added generic fabric support to SO
[so.git] / common / src / main / java / org / onap / so / client / aai / AAIObjectType.java
index ce75b17..518fcf5 100644 (file)
 
 package org.onap.so.client.aai;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.onap.aai.annotations.Metadata;
+import org.onap.aai.domain.yang.AllottedResource;
+import org.onap.aai.domain.yang.CloudRegion;
+import org.onap.aai.domain.yang.Collection;
+import org.onap.aai.domain.yang.Configuration;
+import org.onap.aai.domain.yang.Customer;
+import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.InstanceGroup;
+import org.onap.aai.domain.yang.L3Network;
+import org.onap.aai.domain.yang.LinesOfBusiness;
+import org.onap.aai.domain.yang.ModelVer;
+import org.onap.aai.domain.yang.NetworkPolicy;
+import org.onap.aai.domain.yang.OperationalEnvironment;
+import org.onap.aai.domain.yang.OwningEntity;
+import org.onap.aai.domain.yang.PInterface;
+import org.onap.aai.domain.yang.PhysicalLink;
+import org.onap.aai.domain.yang.Platform;
+import org.onap.aai.domain.yang.Project;
+import org.onap.aai.domain.yang.Pserver;
+import org.onap.aai.domain.yang.RouteTableReferences;
+import org.onap.aai.domain.yang.ServiceInstance;
+import org.onap.aai.domain.yang.ServiceSubscription;
+import org.onap.aai.domain.yang.Tenant;
+import org.onap.aai.domain.yang.TunnelXconnect;
+import org.onap.aai.domain.yang.VfModule;
+import org.onap.aai.domain.yang.VlanTag;
+import org.onap.aai.domain.yang.Vce;
+import org.onap.aai.domain.yang.Vnfc;
+import org.onap.aai.domain.yang.VolumeGroup;
+import org.onap.aai.domain.yang.VpnBinding;
+import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.client.graphinventory.GraphInventoryObjectType;
 
 import com.google.common.base.CaseFormat;
@@ -27,57 +61,82 @@ import com.google.common.base.CaseFormat;
 public enum AAIObjectType implements GraphInventoryObjectType {
 
        DEFAULT_CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/cloud-regions/cloud-region/att-aic/{cloud-region-id}"),
-       CUSTOMER(AAINamespaceConstants.BUSINESS, "/customers/customer/{global-customer-id}"),
+       CUSTOMER(AAINamespaceConstants.BUSINESS, Customer.class),
        GENERIC_QUERY("/search", "/generic-query"),
        BULK_PROCESS("/bulkprocess", ""),
-       GENERIC_VNF(AAINamespaceConstants.NETWORK, "/generic-vnfs/generic-vnf/{vnf-id}"),
-       VF_MODULE(AAIObjectType.GENERIC_VNF.uriTemplate(), "/vf-modules/vf-module/{vf-module-id}"),
-       L3_NETWORK(AAINamespaceConstants.NETWORK, "/l3-networks/l3-network/{network-id}"),
-       NETWORK_POLICY(AAINamespaceConstants.NETWORK, "/network-policies/network-policy/{network-policy-id}"),
+       GENERIC_VNF(AAINamespaceConstants.NETWORK, GenericVnf.class),
+       VF_MODULE(AAIObjectType.GENERIC_VNF.uriTemplate(), VfModule.class),
+       L3_NETWORK(AAINamespaceConstants.NETWORK, L3Network.class),
+       NETWORK_POLICY(AAINamespaceConstants.NETWORK, NetworkPolicy.class),
        NODES_QUERY("/search", "/nodes-query"),
        CUSTOM_QUERY("/query", ""),
-       ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, "/route-table-references/route-table-reference/{route-table-reference-id}"),
+       ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, RouteTableReferences.class),
        DEFAULT_TENANT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/att-aic/AAIAIC25", "/tenants/tenant/{tenant-id}"),
-       VCE(AAINamespaceConstants.NETWORK, "/vces/vce/{vnf-id}"),
-       VPN_BINDING(AAINamespaceConstants.NETWORK, "/vpn-bindings/vpn-binding/{vpn-id}"),
+       VCE(AAINamespaceConstants.NETWORK, Vce.class),
+       VPN_BINDING(AAINamespaceConstants.NETWORK, VpnBinding.class),
        VPN_BINDINGS(AAINamespaceConstants.NETWORK, "/vpn-bindings"),
-       CONFIGURATION(AAINamespaceConstants.NETWORK, "/configurations/configuration/{configuration-id}"),
-       PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/pservers/pserver/{hostname}"),
-       SERVICE_SUBSCRIPTION(AAIObjectType.CUSTOMER.uriTemplate(), "/service-subscriptions/service-subscription/{service-type}"),
-       SERVICE_INSTANCE(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), "/service-instances/service-instance/{service-instance-id}"),
-       PROJECT(AAINamespaceConstants.BUSINESS, "/projects/project/{id}"),
-       LINE_OF_BUSINESS(AAINamespaceConstants.BUSINESS, "/lines-of-business/line-of-business/{id}"),
-       PLATFORM(AAINamespaceConstants.BUSINESS, "/platforms/platform/{id}"),
-       OWNING_ENTITY(AAINamespaceConstants.BUSINESS, "/owning-entities/owning-entity/{id}"),
-       ALLOTTED_RESOURCE(AAIObjectType.SERVICE_INSTANCE.uriTemplate(), "/allotted-resources/allotted-resource/{id}"),
+       CONFIGURATION(AAINamespaceConstants.NETWORK, Configuration.class),
+       PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Pserver.class),
+       SERVICE_SUBSCRIPTION(AAIObjectType.CUSTOMER.uriTemplate(), ServiceSubscription.class),
+       SERVICE_INSTANCE(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), ServiceInstance.class),
+       PROJECT(AAINamespaceConstants.BUSINESS, Project.class),
+       LINE_OF_BUSINESS(AAINamespaceConstants.BUSINESS, LinesOfBusiness.class),
+       PLATFORM(AAINamespaceConstants.BUSINESS, Platform.class),
+       OWNING_ENTITY(AAINamespaceConstants.BUSINESS, OwningEntity.class),
+       ALLOTTED_RESOURCE(AAIObjectType.SERVICE_INSTANCE.uriTemplate(), AllottedResource.class),
        PNF(AAINamespaceConstants.NETWORK, "/pnfs/pnf/{pnf-name}"),
-       OPERATIONAL_ENVIRONMENT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/operational-environments/operational-environment/{operational-environment-id}"),
-       CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/cloud-regions/cloud-region/{cloud-owner-id}/{cloud-region-id}"),
-       TENANT(AAIObjectType.CLOUD_REGION.uriTemplate(), "/tenants/tenant/{tenant-id}"),
-       VOLUME_GROUP(AAIObjectType.CLOUD_REGION.uriTemplate(), "/volume-groups/volume-group/{volume-group-id}"),
-       VSERVER(AAIObjectType.TENANT.uriTemplate(), "/vservers/vserver/{vserver-id}"),
-       MODEL_VER(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", "/model-vers/model-ver/{model-version-id}"),
-       TUNNEL_XCONNECT(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), "/tunnel-xconnects/tunnel-xconnect/{tunnel-id}"),
-       P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), "/p-interfaces/p-interface/{interface-name}"),
-       PHYSICAL_LINK(AAINamespaceConstants.NETWORK, "/physical-links/physical-link/{link-name}"),
-       INSTANCE_GROUP(AAINamespaceConstants.NETWORK, "/instance-groups/instance-group/{id}"),
-       COLLECTION(AAINamespaceConstants.NETWORK, "/collections/collection/{collection-id}"),
+       OPERATIONAL_ENVIRONMENT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, OperationalEnvironment.class),
+       CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, CloudRegion.class),
+       TENANT(AAIObjectType.CLOUD_REGION.uriTemplate(), Tenant.class),
+       VOLUME_GROUP(AAIObjectType.CLOUD_REGION.uriTemplate(), VolumeGroup.class),
+       VSERVER(AAIObjectType.TENANT.uriTemplate(), Vserver.class),
+       MODEL_VER(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", ModelVer.class),
+       TUNNEL_XCONNECT(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), TunnelXconnect.class),
+       P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), PInterface.class),
+       PHYSICAL_LINK(AAINamespaceConstants.NETWORK, PhysicalLink.class),
+       INSTANCE_GROUP(AAINamespaceConstants.NETWORK, InstanceGroup.class),
+       COLLECTION(AAINamespaceConstants.NETWORK, Collection.class),
+       VNFC(AAINamespaceConstants.NETWORK, Vnfc.class),
+       VLAN_TAG(AAINamespaceConstants.NETWORK, VlanTag.class),
        UNKNOWN("", "");
 
        private final String uriTemplate;
        private final String parentUri;
        private final String partialUri;
+       private final Class<?> aaiObjectClass;
+       private static Map<String, AAIObjectType> map = new HashMap<>();
        private AAIObjectType(String parentUri, String partialUri) {
                this.parentUri = parentUri;
                this.partialUri = partialUri;
                this.uriTemplate = parentUri + partialUri;
+               this.aaiObjectClass = null;
+       }
+       
+       private AAIObjectType(String parentUri, Class<?> aaiObjectClass) {
+               this.parentUri = parentUri;
+               this.partialUri = removeParentUri(aaiObjectClass, parentUri);
+               this.uriTemplate = parentUri + partialUri;
+               this.aaiObjectClass = aaiObjectClass;
        }
 
        @Override
        public String toString() {
                return this.uriTemplate();
        }
-
+       
+       public static AAIObjectType fromTypeName(String name) {
+               if (map.isEmpty()) {
+                       for (AAIObjectType type : AAIObjectType.values()) {
+                               map.put(type.typeName(), type);
+                       }
+               }
+               
+               if (map.containsKey(name)) {
+                       return map.get(name);
+               } else {
+                       return AAIObjectType.UNKNOWN;
+               }
+       }
        @Override
        public String typeName() {
                return this.typeName(CaseFormat.LOWER_HYPHEN);
@@ -101,4 +160,8 @@ public enum AAIObjectType implements GraphInventoryObjectType {
        public String partialUri() {
                return this.partialUri;
        }
+       
+       protected String removeParentUri(Class<?> aaiObjectClass, String parentUri) {
+                return aaiObjectClass.getAnnotation(Metadata.class).uriTemplate().replace(parentUri, "");
+       }
 }