github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/management/v1alpha1/APIServiceInstance.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  	APIServiceInstanceCtx log.ContextField = "apiServiceInstance"
    17  
    18  	_APIServiceInstanceGVK = apiv1.GroupVersionKind{
    19  		GroupKind: apiv1.GroupKind{
    20  			Group: "management",
    21  			Kind:  "APIServiceInstance",
    22  		},
    23  		APIVersion: "v1alpha1",
    24  	}
    25  
    26  	APIServiceInstanceScopes = []string{"Environment"}
    27  )
    28  
    29  const (
    30  	APIServiceInstanceResourceName              = "apiserviceinstances"
    31  	ApiServiceInstanceComplianceSubResourceName = "compliance"
    32  	ApiServiceInstanceLifecycleSubResourceName  = "lifecycle"
    33  	ApiServiceInstanceReferencesSubResourceName = "references"
    34  	ApiServiceInstanceSourceSubResourceName     = "source"
    35  )
    36  
    37  func APIServiceInstanceGVK() apiv1.GroupVersionKind {
    38  	return _APIServiceInstanceGVK
    39  }
    40  
    41  func init() {
    42  	apiv1.RegisterGVK(_APIServiceInstanceGVK, APIServiceInstanceScopes[0], APIServiceInstanceResourceName)
    43  	log.RegisterContextField(APIServiceInstanceCtx)
    44  }
    45  
    46  // APIServiceInstance Resource
    47  type APIServiceInstance struct {
    48  	apiv1.ResourceMeta
    49  	// GENERATE: The following code has been modified after code generation
    50  	//
    51  	//	Compliance ApiServiceInstanceCompliance `json:"compliance"`
    52  	Compliance *ApiServiceInstanceCompliance `json:"compliance,omitempty"`
    53  	Lifecycle  ApiServiceInstanceLifecycle   `json:"lifecycle"`
    54  	Owner      *apiv1.Owner                  `json:"owner"`
    55  	References ApiServiceInstanceReferences  `json:"references"`
    56  	// GENERATE: The following code has been modified after code generation
    57  	//
    58  	//	Source     ApiServiceInstanceSource      `json:"source"`
    59  	Source *ApiServiceInstanceSource `json:"source,omitempty"`
    60  	Spec   ApiServiceInstanceSpec    `json:"spec"`
    61  }
    62  
    63  // NewAPIServiceInstance creates an empty *APIServiceInstance
    64  func NewAPIServiceInstance(name, scopeName string) *APIServiceInstance {
    65  	return &APIServiceInstance{
    66  		ResourceMeta: apiv1.ResourceMeta{
    67  			Name:             name,
    68  			GroupVersionKind: _APIServiceInstanceGVK,
    69  			Metadata: apiv1.Metadata{
    70  				Scope: apiv1.MetadataScope{
    71  					Name: scopeName,
    72  					Kind: APIServiceInstanceScopes[0],
    73  				},
    74  			},
    75  		},
    76  	}
    77  }
    78  
    79  // APIServiceInstanceFromInstanceArray converts a []*ResourceInstance to a []*APIServiceInstance
    80  func APIServiceInstanceFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*APIServiceInstance, error) {
    81  	newArray := make([]*APIServiceInstance, 0)
    82  	for _, item := range fromArray {
    83  		res := &APIServiceInstance{}
    84  		err := res.FromInstance(item)
    85  		if err != nil {
    86  			return make([]*APIServiceInstance, 0), err
    87  		}
    88  		newArray = append(newArray, res)
    89  	}
    90  
    91  	return newArray, nil
    92  }
    93  
    94  // AsInstance converts a APIServiceInstance to a ResourceInstance
    95  func (res *APIServiceInstance) AsInstance() (*apiv1.ResourceInstance, error) {
    96  	meta := res.ResourceMeta
    97  	meta.GroupVersionKind = APIServiceInstanceGVK()
    98  	res.ResourceMeta = meta
    99  
   100  	m, err := json.Marshal(res)
   101  	if err != nil {
   102  		return nil, err
   103  	}
   104  
   105  	instance := apiv1.ResourceInstance{}
   106  	err = json.Unmarshal(m, &instance)
   107  	if err != nil {
   108  		return nil, err
   109  	}
   110  
   111  	return &instance, nil
   112  }
   113  
   114  // FromInstance converts a ResourceInstance to a APIServiceInstance
   115  func (res *APIServiceInstance) FromInstance(ri *apiv1.ResourceInstance) error {
   116  	if ri == nil {
   117  		res = nil
   118  		return nil
   119  	}
   120  	var err error
   121  	rawResource := ri.GetRawResource()
   122  	if rawResource == nil {
   123  		rawResource, err = json.Marshal(ri)
   124  		if err != nil {
   125  			return err
   126  		}
   127  	}
   128  	err = json.Unmarshal(rawResource, res)
   129  	return err
   130  }
   131  
   132  // MarshalJSON custom marshaller to handle sub resources
   133  func (res *APIServiceInstance) MarshalJSON() ([]byte, error) {
   134  	m, err := json.Marshal(&res.ResourceMeta)
   135  	if err != nil {
   136  		return nil, err
   137  	}
   138  
   139  	var out map[string]interface{}
   140  	err = json.Unmarshal(m, &out)
   141  	if err != nil {
   142  		return nil, err
   143  	}
   144  
   145  	out["compliance"] = res.Compliance
   146  	out["lifecycle"] = res.Lifecycle
   147  	out["owner"] = res.Owner
   148  	out["references"] = res.References
   149  	out["source"] = res.Source
   150  	out["spec"] = res.Spec
   151  
   152  	return json.Marshal(out)
   153  }
   154  
   155  // UnmarshalJSON custom unmarshaller to handle sub resources
   156  func (res *APIServiceInstance) UnmarshalJSON(data []byte) error {
   157  	var err error
   158  
   159  	aux := &apiv1.ResourceInstance{}
   160  	err = json.Unmarshal(data, aux)
   161  	if err != nil {
   162  		return err
   163  	}
   164  
   165  	res.ResourceMeta = aux.ResourceMeta
   166  	res.Owner = aux.Owner
   167  
   168  	// ResourceInstance holds the spec as a map[string]interface{}.
   169  	// Convert it to bytes, then convert to the spec type for the resource.
   170  	sr, err := json.Marshal(aux.Spec)
   171  	if err != nil {
   172  		return err
   173  	}
   174  
   175  	err = json.Unmarshal(sr, &res.Spec)
   176  	if err != nil {
   177  		return err
   178  	}
   179  
   180  	// marshalling subresource Compliance
   181  	if v, ok := aux.SubResources["compliance"]; ok {
   182  		sr, err = json.Marshal(v)
   183  		if err != nil {
   184  			return err
   185  		}
   186  
   187  		delete(aux.SubResources, "compliance")
   188  		err = json.Unmarshal(sr, &res.Compliance)
   189  		if err != nil {
   190  			return err
   191  		}
   192  	}
   193  
   194  	// marshalling subresource Lifecycle
   195  	if v, ok := aux.SubResources["lifecycle"]; ok {
   196  		sr, err = json.Marshal(v)
   197  		if err != nil {
   198  			return err
   199  		}
   200  
   201  		delete(aux.SubResources, "lifecycle")
   202  		err = json.Unmarshal(sr, &res.Lifecycle)
   203  		if err != nil {
   204  			return err
   205  		}
   206  	}
   207  
   208  	// marshalling subresource References
   209  	if v, ok := aux.SubResources["references"]; ok {
   210  		sr, err = json.Marshal(v)
   211  		if err != nil {
   212  			return err
   213  		}
   214  
   215  		delete(aux.SubResources, "references")
   216  		err = json.Unmarshal(sr, &res.References)
   217  		if err != nil {
   218  			return err
   219  		}
   220  	}
   221  
   222  	// marshalling subresource Source
   223  	if v, ok := aux.SubResources["source"]; ok {
   224  		sr, err = json.Marshal(v)
   225  		if err != nil {
   226  			return err
   227  		}
   228  
   229  		delete(aux.SubResources, "source")
   230  		err = json.Unmarshal(sr, &res.Source)
   231  		if err != nil {
   232  			return err
   233  		}
   234  	}
   235  
   236  	return nil
   237  }
   238  
   239  // PluralName returns the plural name of the resource
   240  func (res *APIServiceInstance) PluralName() string {
   241  	return APIServiceInstanceResourceName
   242  }