github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/Asset.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 AssetCtx log.ContextField = "asset" 17 18 _AssetGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "Asset", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 AssetScopes = []string{""} 27 ) 28 29 const ( 30 AssetResourceName = "assets" 31 AssetAccessSubResourceName = "access" 32 AssetIconSubResourceName = "icon" 33 AssetLatestreleaseSubResourceName = "latestrelease" 34 AssetReferencesSubResourceName = "references" 35 AssetStateSubResourceName = "state" 36 AssetStatusSubResourceName = "status" 37 ) 38 39 func AssetGVK() apiv1.GroupVersionKind { 40 return _AssetGVK 41 } 42 43 func init() { 44 apiv1.RegisterGVK(_AssetGVK, AssetScopes[0], AssetResourceName) 45 log.RegisterContextField(AssetCtx) 46 } 47 48 // Asset Resource 49 type Asset struct { 50 apiv1.ResourceMeta 51 Access AssetAccess `json:"access"` 52 Icon interface{} `json:"icon"` 53 Latestrelease AssetLatestrelease `json:"latestrelease"` 54 Owner *apiv1.Owner `json:"owner"` 55 References interface{} `json:"references"` 56 Spec AssetSpec `json:"spec"` 57 State AssetState `json:"state"` 58 // Status AssetStatus `json:"status"` 59 Status *apiv1.ResourceStatus `json:"status"` 60 } 61 62 // NewAsset creates an empty *Asset 63 func NewAsset(name string) *Asset { 64 return &Asset{ 65 ResourceMeta: apiv1.ResourceMeta{ 66 Name: name, 67 GroupVersionKind: _AssetGVK, 68 }, 69 } 70 } 71 72 // AssetFromInstanceArray converts a []*ResourceInstance to a []*Asset 73 func AssetFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*Asset, error) { 74 newArray := make([]*Asset, 0) 75 for _, item := range fromArray { 76 res := &Asset{} 77 err := res.FromInstance(item) 78 if err != nil { 79 return make([]*Asset, 0), err 80 } 81 newArray = append(newArray, res) 82 } 83 84 return newArray, nil 85 } 86 87 // AsInstance converts a Asset to a ResourceInstance 88 func (res *Asset) AsInstance() (*apiv1.ResourceInstance, error) { 89 meta := res.ResourceMeta 90 meta.GroupVersionKind = AssetGVK() 91 res.ResourceMeta = meta 92 93 m, err := json.Marshal(res) 94 if err != nil { 95 return nil, err 96 } 97 98 instance := apiv1.ResourceInstance{} 99 err = json.Unmarshal(m, &instance) 100 if err != nil { 101 return nil, err 102 } 103 104 return &instance, nil 105 } 106 107 // FromInstance converts a ResourceInstance to a Asset 108 func (res *Asset) FromInstance(ri *apiv1.ResourceInstance) error { 109 if ri == nil { 110 res = nil 111 return nil 112 } 113 var err error 114 rawResource := ri.GetRawResource() 115 if rawResource == nil { 116 rawResource, err = json.Marshal(ri) 117 if err != nil { 118 return err 119 } 120 } 121 err = json.Unmarshal(rawResource, res) 122 return err 123 } 124 125 // MarshalJSON custom marshaller to handle sub resources 126 func (res *Asset) MarshalJSON() ([]byte, error) { 127 m, err := json.Marshal(&res.ResourceMeta) 128 if err != nil { 129 return nil, err 130 } 131 132 var out map[string]interface{} 133 err = json.Unmarshal(m, &out) 134 if err != nil { 135 return nil, err 136 } 137 138 out["access"] = res.Access 139 out["icon"] = res.Icon 140 out["latestrelease"] = res.Latestrelease 141 out["owner"] = res.Owner 142 out["references"] = res.References 143 out["spec"] = res.Spec 144 out["state"] = res.State 145 out["status"] = res.Status 146 147 return json.Marshal(out) 148 } 149 150 // UnmarshalJSON custom unmarshaller to handle sub resources 151 func (res *Asset) UnmarshalJSON(data []byte) error { 152 var err error 153 154 aux := &apiv1.ResourceInstance{} 155 err = json.Unmarshal(data, aux) 156 if err != nil { 157 return err 158 } 159 160 res.ResourceMeta = aux.ResourceMeta 161 res.Owner = aux.Owner 162 163 // ResourceInstance holds the spec as a map[string]interface{}. 164 // Convert it to bytes, then convert to the spec type for the resource. 165 sr, err := json.Marshal(aux.Spec) 166 if err != nil { 167 return err 168 } 169 170 err = json.Unmarshal(sr, &res.Spec) 171 if err != nil { 172 return err 173 } 174 175 // marshalling subresource Access 176 if v, ok := aux.SubResources["access"]; ok { 177 sr, err = json.Marshal(v) 178 if err != nil { 179 return err 180 } 181 182 delete(aux.SubResources, "access") 183 err = json.Unmarshal(sr, &res.Access) 184 if err != nil { 185 return err 186 } 187 } 188 189 // marshalling subresource Icon 190 if v, ok := aux.SubResources["icon"]; ok { 191 sr, err = json.Marshal(v) 192 if err != nil { 193 return err 194 } 195 196 delete(aux.SubResources, "icon") 197 err = json.Unmarshal(sr, &res.Icon) 198 if err != nil { 199 return err 200 } 201 } 202 203 // marshalling subresource Latestrelease 204 if v, ok := aux.SubResources["latestrelease"]; ok { 205 sr, err = json.Marshal(v) 206 if err != nil { 207 return err 208 } 209 210 delete(aux.SubResources, "latestrelease") 211 err = json.Unmarshal(sr, &res.Latestrelease) 212 if err != nil { 213 return err 214 } 215 } 216 217 // marshalling subresource References 218 if v, ok := aux.SubResources["references"]; ok { 219 sr, err = json.Marshal(v) 220 if err != nil { 221 return err 222 } 223 224 delete(aux.SubResources, "references") 225 err = json.Unmarshal(sr, &res.References) 226 if err != nil { 227 return err 228 } 229 } 230 231 // marshalling subresource State 232 if v, ok := aux.SubResources["state"]; ok { 233 sr, err = json.Marshal(v) 234 if err != nil { 235 return err 236 } 237 238 delete(aux.SubResources, "state") 239 err = json.Unmarshal(sr, &res.State) 240 if err != nil { 241 return err 242 } 243 } 244 245 // marshalling subresource Status 246 if v, ok := aux.SubResources["status"]; ok { 247 sr, err = json.Marshal(v) 248 if err != nil { 249 return err 250 } 251 252 delete(aux.SubResources, "status") 253 // err = json.Unmarshal(sr, &res.Status) 254 res.Status = &apiv1.ResourceStatus{} 255 err = json.Unmarshal(sr, res.Status) 256 if err != nil { 257 return err 258 } 259 } 260 261 return nil 262 } 263 264 // PluralName returns the plural name of the resource 265 func (res *Asset) PluralName() string { 266 return AssetResourceName 267 }