github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/AssetRequest.go (about) 1 /* 2 * This file is automatically generated 3 */ 4 5 package catalog 6 7 import ( 8 "encoding/json" 9 10 apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 11 12 "github.com/Axway/agent-sdk/pkg/util/log" 13 ) 14 15 var ( 16 AssetRequestCtx log.ContextField = "assetRequest" 17 18 _AssetRequestGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "AssetRequest", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 AssetRequestScopes = []string{"Application"} 27 ) 28 29 const ( 30 AssetRequestResourceName = "assetrequests" 31 AssetRequestApprovalSubResourceName = "approval" 32 AssetRequestDataSubResourceName = "data" 33 AssetRequestMarketplaceSubResourceName = "marketplace" 34 AssetRequestReferencesSubResourceName = "references" 35 AssetRequestStatusSubResourceName = "status" 36 ) 37 38 func AssetRequestGVK() apiv1.GroupVersionKind { 39 return _AssetRequestGVK 40 } 41 42 func init() { 43 apiv1.RegisterGVK(_AssetRequestGVK, AssetRequestScopes[0], AssetRequestResourceName) 44 log.RegisterContextField(AssetRequestCtx) 45 } 46 47 // AssetRequest Resource 48 type AssetRequest struct { 49 apiv1.ResourceMeta 50 Approval AssetRequestApproval `json:"approval"` 51 Data interface{} `json:"data"` 52 Marketplace AssetRequestMarketplace `json:"marketplace"` 53 Owner *apiv1.Owner `json:"owner"` 54 References AssetRequestReferences `json:"references"` 55 Spec AssetRequestSpec `json:"spec"` 56 // Status AssetRequestStatus `json:"status"` 57 Status *apiv1.ResourceStatus `json:"status"` 58 } 59 60 // NewAssetRequest creates an empty *AssetRequest 61 func NewAssetRequest(name, scopeName string) *AssetRequest { 62 return &AssetRequest{ 63 ResourceMeta: apiv1.ResourceMeta{ 64 Name: name, 65 GroupVersionKind: _AssetRequestGVK, 66 Metadata: apiv1.Metadata{ 67 Scope: apiv1.MetadataScope{ 68 Name: scopeName, 69 Kind: AssetRequestScopes[0], 70 }, 71 }, 72 }, 73 } 74 } 75 76 // AssetRequestFromInstanceArray converts a []*ResourceInstance to a []*AssetRequest 77 func AssetRequestFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*AssetRequest, error) { 78 newArray := make([]*AssetRequest, 0) 79 for _, item := range fromArray { 80 res := &AssetRequest{} 81 err := res.FromInstance(item) 82 if err != nil { 83 return make([]*AssetRequest, 0), err 84 } 85 newArray = append(newArray, res) 86 } 87 88 return newArray, nil 89 } 90 91 // AsInstance converts a AssetRequest to a ResourceInstance 92 func (res *AssetRequest) AsInstance() (*apiv1.ResourceInstance, error) { 93 meta := res.ResourceMeta 94 meta.GroupVersionKind = AssetRequestGVK() 95 res.ResourceMeta = meta 96 97 m, err := json.Marshal(res) 98 if err != nil { 99 return nil, err 100 } 101 102 instance := apiv1.ResourceInstance{} 103 err = json.Unmarshal(m, &instance) 104 if err != nil { 105 return nil, err 106 } 107 108 return &instance, nil 109 } 110 111 // FromInstance converts a ResourceInstance to a AssetRequest 112 func (res *AssetRequest) FromInstance(ri *apiv1.ResourceInstance) error { 113 if ri == nil { 114 res = nil 115 return nil 116 } 117 var err error 118 rawResource := ri.GetRawResource() 119 if rawResource == nil { 120 rawResource, err = json.Marshal(ri) 121 if err != nil { 122 return err 123 } 124 } 125 err = json.Unmarshal(rawResource, res) 126 return err 127 } 128 129 // MarshalJSON custom marshaller to handle sub resources 130 func (res *AssetRequest) MarshalJSON() ([]byte, error) { 131 m, err := json.Marshal(&res.ResourceMeta) 132 if err != nil { 133 return nil, err 134 } 135 136 var out map[string]interface{} 137 err = json.Unmarshal(m, &out) 138 if err != nil { 139 return nil, err 140 } 141 142 out["approval"] = res.Approval 143 out["data"] = res.Data 144 out["marketplace"] = res.Marketplace 145 out["owner"] = res.Owner 146 out["references"] = res.References 147 out["spec"] = res.Spec 148 out["status"] = res.Status 149 150 return json.Marshal(out) 151 } 152 153 // UnmarshalJSON custom unmarshaller to handle sub resources 154 func (res *AssetRequest) UnmarshalJSON(data []byte) error { 155 var err error 156 157 aux := &apiv1.ResourceInstance{} 158 err = json.Unmarshal(data, aux) 159 if err != nil { 160 return err 161 } 162 163 res.ResourceMeta = aux.ResourceMeta 164 res.Owner = aux.Owner 165 166 // ResourceInstance holds the spec as a map[string]interface{}. 167 // Convert it to bytes, then convert to the spec type for the resource. 168 sr, err := json.Marshal(aux.Spec) 169 if err != nil { 170 return err 171 } 172 173 err = json.Unmarshal(sr, &res.Spec) 174 if err != nil { 175 return err 176 } 177 178 // marshalling subresource Approval 179 if v, ok := aux.SubResources["approval"]; ok { 180 sr, err = json.Marshal(v) 181 if err != nil { 182 return err 183 } 184 185 delete(aux.SubResources, "approval") 186 err = json.Unmarshal(sr, &res.Approval) 187 if err != nil { 188 return err 189 } 190 } 191 192 // marshalling subresource Data 193 if v, ok := aux.SubResources["data"]; ok { 194 sr, err = json.Marshal(v) 195 if err != nil { 196 return err 197 } 198 199 delete(aux.SubResources, "data") 200 err = json.Unmarshal(sr, &res.Data) 201 if err != nil { 202 return err 203 } 204 } 205 206 // marshalling subresource Marketplace 207 if v, ok := aux.SubResources["marketplace"]; ok { 208 sr, err = json.Marshal(v) 209 if err != nil { 210 return err 211 } 212 213 delete(aux.SubResources, "marketplace") 214 err = json.Unmarshal(sr, &res.Marketplace) 215 if err != nil { 216 return err 217 } 218 } 219 220 // marshalling subresource References 221 if v, ok := aux.SubResources["references"]; ok { 222 sr, err = json.Marshal(v) 223 if err != nil { 224 return err 225 } 226 227 delete(aux.SubResources, "references") 228 err = json.Unmarshal(sr, &res.References) 229 if err != nil { 230 return err 231 } 232 } 233 234 // marshalling subresource Status 235 if v, ok := aux.SubResources["status"]; ok { 236 sr, err = json.Marshal(v) 237 if err != nil { 238 return err 239 } 240 241 delete(aux.SubResources, "status") 242 // err = json.Unmarshal(sr, &res.Status) 243 res.Status = &apiv1.ResourceStatus{} 244 err = json.Unmarshal(sr, res.Status) 245 if err != nil { 246 return err 247 } 248 } 249 250 return nil 251 } 252 253 // PluralName returns the plural name of the resource 254 func (res *AssetRequest) PluralName() string { 255 return AssetRequestResourceName 256 }