github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/PublishedDocumentResource.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 PublishedDocumentResourceCtx log.ContextField = "publishedDocumentResource" 17 18 _PublishedDocumentResourceGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "PublishedDocumentResource", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 PublishedDocumentResourceScopes = []string{"Marketplace"} 27 ) 28 29 const ( 30 PublishedDocumentResourceResourceName = "publisheddocumentresources" 31 ) 32 33 func PublishedDocumentResourceGVK() apiv1.GroupVersionKind { 34 return _PublishedDocumentResourceGVK 35 } 36 37 func init() { 38 apiv1.RegisterGVK(_PublishedDocumentResourceGVK, PublishedDocumentResourceScopes[0], PublishedDocumentResourceResourceName) 39 log.RegisterContextField(PublishedDocumentResourceCtx) 40 } 41 42 // PublishedDocumentResource Resource 43 type PublishedDocumentResource struct { 44 apiv1.ResourceMeta 45 Owner *apiv1.Owner `json:"owner"` 46 Spec PublishedDocumentResourceSpec `json:"spec"` 47 } 48 49 // NewPublishedDocumentResource creates an empty *PublishedDocumentResource 50 func NewPublishedDocumentResource(name, scopeName string) *PublishedDocumentResource { 51 return &PublishedDocumentResource{ 52 ResourceMeta: apiv1.ResourceMeta{ 53 Name: name, 54 GroupVersionKind: _PublishedDocumentResourceGVK, 55 Metadata: apiv1.Metadata{ 56 Scope: apiv1.MetadataScope{ 57 Name: scopeName, 58 Kind: PublishedDocumentResourceScopes[0], 59 }, 60 }, 61 }, 62 } 63 } 64 65 // PublishedDocumentResourceFromInstanceArray converts a []*ResourceInstance to a []*PublishedDocumentResource 66 func PublishedDocumentResourceFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*PublishedDocumentResource, error) { 67 newArray := make([]*PublishedDocumentResource, 0) 68 for _, item := range fromArray { 69 res := &PublishedDocumentResource{} 70 err := res.FromInstance(item) 71 if err != nil { 72 return make([]*PublishedDocumentResource, 0), err 73 } 74 newArray = append(newArray, res) 75 } 76 77 return newArray, nil 78 } 79 80 // AsInstance converts a PublishedDocumentResource to a ResourceInstance 81 func (res *PublishedDocumentResource) AsInstance() (*apiv1.ResourceInstance, error) { 82 meta := res.ResourceMeta 83 meta.GroupVersionKind = PublishedDocumentResourceGVK() 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 PublishedDocumentResource 101 func (res *PublishedDocumentResource) 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 *PublishedDocumentResource) 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["owner"] = res.Owner 132 out["spec"] = res.Spec 133 134 return json.Marshal(out) 135 } 136 137 // UnmarshalJSON custom unmarshaller to handle sub resources 138 func (res *PublishedDocumentResource) UnmarshalJSON(data []byte) error { 139 var err error 140 141 aux := &apiv1.ResourceInstance{} 142 err = json.Unmarshal(data, aux) 143 if err != nil { 144 return err 145 } 146 147 res.ResourceMeta = aux.ResourceMeta 148 res.Owner = aux.Owner 149 150 // ResourceInstance holds the spec as a map[string]interface{}. 151 // Convert it to bytes, then convert to the spec type for the resource. 152 sr, err := json.Marshal(aux.Spec) 153 if err != nil { 154 return err 155 } 156 157 err = json.Unmarshal(sr, &res.Spec) 158 if err != nil { 159 return err 160 } 161 162 return nil 163 } 164 165 // PluralName returns the plural name of the resource 166 func (res *PublishedDocumentResource) PluralName() string { 167 return PublishedDocumentResourceResourceName 168 }