hostjoints.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package models
  15. import (
  16. "context"
  17. "yunion.io/x/jsonutils"
  18. "yunion.io/x/pkg/errors"
  19. "yunion.io/x/sqlchemy"
  20. api "yunion.io/x/onecloud/pkg/apis/compute"
  21. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  22. "yunion.io/x/onecloud/pkg/mcclient"
  23. "yunion.io/x/onecloud/pkg/util/stringutils2"
  24. )
  25. // +onecloud:swagger-gen-ignore
  26. type SHostJointsManager struct {
  27. db.SJointResourceBaseManager
  28. SHostResourceBaseManager
  29. }
  30. func NewHostJointsManager(hostIdFieldName string, dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IStandaloneModelManager) SHostJointsManager {
  31. return SHostJointsManager{
  32. SJointResourceBaseManager: db.NewJointResourceBaseManager(
  33. dt,
  34. tableName,
  35. keyword,
  36. keywordPlural,
  37. HostManager,
  38. slave,
  39. ),
  40. SHostResourceBaseManager: SHostResourceBaseManager{
  41. hostIdFieldName: hostIdFieldName,
  42. },
  43. }
  44. }
  45. // +onecloud:model-api-gen
  46. type SHostJointsBase struct {
  47. db.SJointResourceBase
  48. }
  49. func (manager *SHostJointsManager) FetchCustomizeColumns(
  50. ctx context.Context,
  51. userCred mcclient.TokenCredential,
  52. query jsonutils.JSONObject,
  53. objs []interface{},
  54. fields stringutils2.SSortedStrings,
  55. isList bool,
  56. ) []api.HostJointResourceDetails {
  57. rows := make([]api.HostJointResourceDetails, len(objs))
  58. jointRows := manager.SJointResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
  59. hostRows := manager.SHostResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
  60. for i := range rows {
  61. rows[i] = api.HostJointResourceDetails{
  62. JointResourceBaseDetails: jointRows[i],
  63. HostResourceInfo: hostRows[i],
  64. }
  65. }
  66. return rows
  67. }
  68. func (manager *SHostJointsManager) ListItemFilter(
  69. ctx context.Context,
  70. q *sqlchemy.SQuery,
  71. userCred mcclient.TokenCredential,
  72. query api.HostJointsListInput,
  73. ) (*sqlchemy.SQuery, error) {
  74. var err error
  75. q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, userCred, query.JointResourceBaseListInput)
  76. if err != nil {
  77. return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
  78. }
  79. q, err = manager.SHostResourceBaseManager.ListItemFilter(ctx, q, userCred, query.HostFilterListInput)
  80. if err != nil {
  81. return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
  82. }
  83. return q, nil
  84. }
  85. func (manager *SHostJointsManager) OrderByExtraFields(
  86. ctx context.Context,
  87. q *sqlchemy.SQuery,
  88. userCred mcclient.TokenCredential,
  89. query api.HostJointsListInput,
  90. ) (*sqlchemy.SQuery, error) {
  91. var err error
  92. q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.JointResourceBaseListInput)
  93. if err != nil {
  94. return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
  95. }
  96. q, err = manager.SHostResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.HostFilterListInput)
  97. if err != nil {
  98. return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
  99. }
  100. return q, nil
  101. }
  102. func (manager *SHostJointsManager) ListItemExportKeys(ctx context.Context,
  103. q *sqlchemy.SQuery,
  104. userCred mcclient.TokenCredential,
  105. keys stringutils2.SSortedStrings,
  106. ) (*sqlchemy.SQuery, error) {
  107. var err error
  108. q, err = manager.SJointResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
  109. if err != nil {
  110. return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemExportKeys")
  111. }
  112. if keys.ContainsAny(manager.SHostResourceBaseManager.GetExportKeys()...) {
  113. q, err = manager.SHostResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
  114. if err != nil {
  115. return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemExportKeys")
  116. }
  117. }
  118. return q, nil
  119. }