github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/management/v1alpha1/ManagedApplication.go (about) 1 /* 2 * This file is automatically generated 3 */ 4 5 package management 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 ManagedApplicationCtx log.ContextField = "managedApplication" 17 18 _ManagedApplicationGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "management", 21 Kind: "ManagedApplication", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 ManagedApplicationScopes = []string{"Environment"} 27 ) 28 29 const ( 30 ManagedApplicationResourceName = "managedapplications" 31 ManagedApplicationMarketplaceSubResourceName = "marketplace" 32 ManagedApplicationReferencesSubResourceName = "references" 33 ManagedApplicationStatusSubResourceName = "status" 34 ) 35 36 func ManagedApplicationGVK() apiv1.GroupVersionKind { 37 return _ManagedApplicationGVK 38 } 39 40 func init() { 41 apiv1.RegisterGVK(_ManagedApplicationGVK, ManagedApplicationScopes[0], ManagedApplicationResourceName) 42 log.RegisterContextField(ManagedApplicationCtx) 43 } 44 45 // ManagedApplication Resource 46 type ManagedApplication struct { 47 apiv1.ResourceMeta 48 Marketplace ManagedApplicationMarketplace `json:"marketplace"` 49 Owner *apiv1.Owner `json:"owner"` 50 References ManagedApplicationReferences `json:"references"` 51 Spec ManagedApplicationSpec `json:"spec"` 52 // Status ManagedApplicationStatus `json:"status"` 53 Status *apiv1.ResourceStatus `json:"status"` 54 } 55 56 // NewManagedApplication creates an empty *ManagedApplication 57 func NewManagedApplication(name, scopeName string) *ManagedApplication { 58 return &ManagedApplication{ 59 ResourceMeta: apiv1.ResourceMeta{ 60 Name: name, 61 GroupVersionKind: _ManagedApplicationGVK, 62 Metadata: apiv1.Metadata{ 63 Scope: apiv1.MetadataScope{ 64 Name: scopeName, 65 Kind: ManagedApplicationScopes[0], 66 }, 67 }, 68 }, 69 } 70 } 71 72 // ManagedApplicationFromInstanceArray converts a []*ResourceInstance to a []*ManagedApplication 73 func ManagedApplicationFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*ManagedApplication, error) { 74 newArray := make([]*ManagedApplication, 0) 75 for _, item := range fromArray { 76 res := &ManagedApplication{} 77 err := res.FromInstance(item) 78 if err != nil { 79 return make([]*ManagedApplication, 0), err 80 } 81 newArray = append(newArray, res) 82 } 83 84 return newArray, nil 85 } 86 87 // AsInstance converts a ManagedApplication to a ResourceInstance 88 func (res *ManagedApplication) AsInstance() (*apiv1.ResourceInstance, error) { 89 meta := res.ResourceMeta 90 meta.GroupVersionKind = ManagedApplicationGVK() 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 ManagedApplication 108 func (res *ManagedApplication) 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 *ManagedApplication) 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["marketplace"] = res.Marketplace 139 out["owner"] = res.Owner 140 out["references"] = res.References 141 out["spec"] = res.Spec 142 out["status"] = res.Status 143 144 return json.Marshal(out) 145 } 146 147 // UnmarshalJSON custom unmarshaller to handle sub resources 148 func (res *ManagedApplication) UnmarshalJSON(data []byte) error { 149 var err error 150 151 aux := &apiv1.ResourceInstance{} 152 err = json.Unmarshal(data, aux) 153 if err != nil { 154 return err 155 } 156 157 res.ResourceMeta = aux.ResourceMeta 158 res.Owner = aux.Owner 159 160 // ResourceInstance holds the spec as a map[string]interface{}. 161 // Convert it to bytes, then convert to the spec type for the resource. 162 sr, err := json.Marshal(aux.Spec) 163 if err != nil { 164 return err 165 } 166 167 err = json.Unmarshal(sr, &res.Spec) 168 if err != nil { 169 return err 170 } 171 172 // marshalling subresource Marketplace 173 if v, ok := aux.SubResources["marketplace"]; ok { 174 sr, err = json.Marshal(v) 175 if err != nil { 176 return err 177 } 178 179 delete(aux.SubResources, "marketplace") 180 err = json.Unmarshal(sr, &res.Marketplace) 181 if err != nil { 182 return err 183 } 184 } 185 186 // marshalling subresource References 187 if v, ok := aux.SubResources["references"]; ok { 188 sr, err = json.Marshal(v) 189 if err != nil { 190 return err 191 } 192 193 delete(aux.SubResources, "references") 194 err = json.Unmarshal(sr, &res.References) 195 if err != nil { 196 return err 197 } 198 } 199 200 // marshalling subresource Status 201 if v, ok := aux.SubResources["status"]; ok { 202 sr, err = json.Marshal(v) 203 if err != nil { 204 return err 205 } 206 207 delete(aux.SubResources, "status") 208 // err = json.Unmarshal(sr, &res.Status) 209 res.Status = &apiv1.ResourceStatus{} 210 err = json.Unmarshal(sr, res.Status) 211 if err != nil { 212 return err 213 } 214 } 215 216 return nil 217 } 218 219 // PluralName returns the plural name of the resource 220 func (res *ManagedApplication) PluralName() string { 221 return ManagedApplicationResourceName 222 }