github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/DocumentResource.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 DocumentResourceCtx log.ContextField = "documentResource" 17 18 _DocumentResourceGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "DocumentResource", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 DocumentResourceScopes = []string{""} 27 ) 28 29 const ( 30 DocumentResourceResourceName = "documentresources" 31 DocumentResourceIconSubResourceName = "icon" 32 DocumentResourceReferencesSubResourceName = "references" 33 DocumentResourceStateSubResourceName = "state" 34 ) 35 36 func DocumentResourceGVK() apiv1.GroupVersionKind { 37 return _DocumentResourceGVK 38 } 39 40 func init() { 41 apiv1.RegisterGVK(_DocumentResourceGVK, DocumentResourceScopes[0], DocumentResourceResourceName) 42 log.RegisterContextField(DocumentResourceCtx) 43 } 44 45 // DocumentResource Resource 46 type DocumentResource struct { 47 apiv1.ResourceMeta 48 Icon interface{} `json:"icon"` 49 Owner *apiv1.Owner `json:"owner"` 50 References DocumentResourceReferences `json:"references"` 51 Spec DocumentResourceSpec `json:"spec"` 52 State DocumentResourceState `json:"state"` 53 } 54 55 // NewDocumentResource creates an empty *DocumentResource 56 func NewDocumentResource(name string) *DocumentResource { 57 return &DocumentResource{ 58 ResourceMeta: apiv1.ResourceMeta{ 59 Name: name, 60 GroupVersionKind: _DocumentResourceGVK, 61 }, 62 } 63 } 64 65 // DocumentResourceFromInstanceArray converts a []*ResourceInstance to a []*DocumentResource 66 func DocumentResourceFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*DocumentResource, error) { 67 newArray := make([]*DocumentResource, 0) 68 for _, item := range fromArray { 69 res := &DocumentResource{} 70 err := res.FromInstance(item) 71 if err != nil { 72 return make([]*DocumentResource, 0), err 73 } 74 newArray = append(newArray, res) 75 } 76 77 return newArray, nil 78 } 79 80 // AsInstance converts a DocumentResource to a ResourceInstance 81 func (res *DocumentResource) AsInstance() (*apiv1.ResourceInstance, error) { 82 meta := res.ResourceMeta 83 meta.GroupVersionKind = DocumentResourceGVK() 84 res.ResourceMeta = meta 85 86 m, err := json.Marshal(res) 87 if err != nil { 88 return nil, err 89 } 90 91 instance := apiv1.ResourceInstance{} 92 err = json.Unmarshal(m, &instance) 93 if err != nil { 94 return nil, err 95 } 96 97 return &instance, nil 98 } 99 100 // FromInstance converts a ResourceInstance to a DocumentResource 101 func (res *DocumentResource) FromInstance(ri *apiv1.ResourceInstance) error { 102 if ri == nil { 103 res = nil 104 return nil 105 } 106 var err error 107 rawResource := ri.GetRawResource() 108 if rawResource == nil { 109 rawResource, err = json.Marshal(ri) 110 if err != nil { 111 return err 112 } 113 } 114 err = json.Unmarshal(rawResource, res) 115 return err 116 } 117 118 // MarshalJSON custom marshaller to handle sub resources 119 func (res *DocumentResource) MarshalJSON() ([]byte, error) { 120 m, err := json.Marshal(&res.ResourceMeta) 121 if err != nil { 122 return nil, err 123 } 124 125 var out map[string]interface{} 126 err = json.Unmarshal(m, &out) 127 if err != nil { 128 return nil, err 129 } 130 131 out["icon"] = res.Icon 132 out["owner"] = res.Owner 133 out["references"] = res.References 134 out["spec"] = res.Spec 135 out["state"] = res.State 136 137 return json.Marshal(out) 138 } 139 140 // UnmarshalJSON custom unmarshaller to handle sub resources 141 func (res *DocumentResource) UnmarshalJSON(data []byte) error { 142 var err error 143 144 aux := &apiv1.ResourceInstance{} 145 err = json.Unmarshal(data, aux) 146 if err != nil { 147 return err 148 } 149 150 res.ResourceMeta = aux.ResourceMeta 151 res.Owner = aux.Owner 152 153 // ResourceInstance holds the spec as a map[string]interface{}. 154 // Convert it to bytes, then convert to the spec type for the resource. 155 sr, err := json.Marshal(aux.Spec) 156 if err != nil { 157 return err 158 } 159 160 err = json.Unmarshal(sr, &res.Spec) 161 if err != nil { 162 return err 163 } 164 165 // marshalling subresource Icon 166 if v, ok := aux.SubResources["icon"]; ok { 167 sr, err = json.Marshal(v) 168 if err != nil { 169 return err 170 } 171 172 delete(aux.SubResources, "icon") 173 err = json.Unmarshal(sr, &res.Icon) 174 if err != nil { 175 return err 176 } 177 } 178 179 // marshalling subresource References 180 if v, ok := aux.SubResources["references"]; ok { 181 sr, err = json.Marshal(v) 182 if err != nil { 183 return err 184 } 185 186 delete(aux.SubResources, "references") 187 err = json.Unmarshal(sr, &res.References) 188 if err != nil { 189 return err 190 } 191 } 192 193 // marshalling subresource State 194 if v, ok := aux.SubResources["state"]; ok { 195 sr, err = json.Marshal(v) 196 if err != nil { 197 return err 198 } 199 200 delete(aux.SubResources, "state") 201 err = json.Unmarshal(sr, &res.State) 202 if err != nil { 203 return err 204 } 205 } 206 207 return nil 208 } 209 210 // PluralName returns the plural name of the resource 211 func (res *DocumentResource) PluralName() string { 212 return DocumentResourceResourceName 213 }