Merge "Removed deprecated Matcher imports"
[so.git] / common / src / main / java / org / onap / so / client / aai / AAIObjectType.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.client.aai;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import org.onap.aai.annotations.Metadata;
27 import org.onap.aai.domain.yang.AllottedResource;
28 import org.onap.aai.domain.yang.AggregateRoute;
29 import org.onap.aai.domain.yang.CloudRegion;
30 import org.onap.aai.domain.yang.Collection;
31 import org.onap.aai.domain.yang.Complex;
32 import org.onap.aai.domain.yang.Configuration;
33 import org.onap.aai.domain.yang.Connector;
34 import org.onap.aai.domain.yang.Customer;
35 import org.onap.aai.domain.yang.ExtAaiNetwork;
36 import org.onap.aai.domain.yang.GenericVnf;
37 import org.onap.aai.domain.yang.InstanceGroup;
38 import org.onap.aai.domain.yang.L3Network;
39 import org.onap.aai.domain.yang.LineOfBusiness;
40 import org.onap.aai.domain.yang.ModelVer;
41 import org.onap.aai.domain.yang.NetworkPolicy;
42 import org.onap.aai.domain.yang.NetworkTechnology;
43 import org.onap.aai.domain.yang.OperationalEnvironment;
44 import org.onap.aai.domain.yang.OwningEntity;
45 import org.onap.aai.domain.yang.PInterface;
46 import org.onap.aai.domain.yang.PhysicalLink;
47 import org.onap.aai.domain.yang.Platform;
48 import org.onap.aai.domain.yang.PortGroup;
49 import org.onap.aai.domain.yang.Project;
50 import org.onap.aai.domain.yang.Pserver;
51 import org.onap.aai.domain.yang.RouteTableReference;
52 import org.onap.aai.domain.yang.ServiceInstance;
53 import org.onap.aai.domain.yang.ServiceSubscription;
54 import org.onap.aai.domain.yang.SpPartner;
55 import org.onap.aai.domain.yang.Device;
56 import org.onap.aai.domain.yang.Subnet;
57 import org.onap.aai.domain.yang.Tenant;
58 import org.onap.aai.domain.yang.TunnelXconnect;
59 import org.onap.aai.domain.yang.Vce;
60 import org.onap.aai.domain.yang.VfModule;
61 import org.onap.aai.domain.yang.VlanTag;
62 import org.onap.aai.domain.yang.Vnfc;
63 import org.onap.aai.domain.yang.VolumeGroup;
64 import org.onap.aai.domain.yang.VpnBinding;
65 import org.onap.aai.domain.yang.Vserver;
66 import org.onap.so.client.graphinventory.GraphInventoryObjectType;
67 import org.onap.so.constants.Defaults;
68
69 import com.google.common.base.CaseFormat;
70
71 public enum AAIObjectType implements GraphInventoryObjectType {
72
73         DEFAULT_CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/{cloud-region-id}"),
74         CUSTOMER(AAINamespaceConstants.BUSINESS, Customer.class),
75         GENERIC_QUERY("/search", "/generic-query"),
76         BULK_PROCESS("/bulkprocess", ""),
77         SINGLE_TRANSACTION("/bulk/single-transaction", ""),
78         GENERIC_VNF(AAINamespaceConstants.NETWORK, GenericVnf.class),
79         VF_MODULE(AAIObjectType.GENERIC_VNF.uriTemplate(), VfModule.class),
80         L3_NETWORK(AAINamespaceConstants.NETWORK, L3Network.class),
81         NETWORK_POLICY(AAINamespaceConstants.NETWORK, NetworkPolicy.class),
82         NODES_QUERY("/search", "/nodes-query"),
83         CUSTOM_QUERY("/query", ""),
84         ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, RouteTableReference.class),
85         DEFAULT_TENANT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants/tenant/{tenant-id}"),
86         VCE(AAINamespaceConstants.NETWORK, Vce.class),
87         PORT_GROUP(AAIObjectType.VCE.uriTemplate(), PortGroup.class),
88         VPN_BINDING(AAINamespaceConstants.NETWORK, VpnBinding.class),
89         CONFIGURATION(AAINamespaceConstants.NETWORK, Configuration.class),
90         PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Pserver.class),
91         SERVICE_SUBSCRIPTION(AAIObjectType.CUSTOMER.uriTemplate(), ServiceSubscription.class),
92         SERVICE_INSTANCE(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), ServiceInstance.class),
93         PROJECT(AAINamespaceConstants.BUSINESS, Project.class),
94         LINE_OF_BUSINESS(AAINamespaceConstants.BUSINESS, LineOfBusiness.class),
95         PLATFORM(AAINamespaceConstants.BUSINESS, Platform.class),
96         OWNING_ENTITY(AAINamespaceConstants.BUSINESS, OwningEntity.class),
97         ALLOTTED_RESOURCE(AAIObjectType.SERVICE_INSTANCE.uriTemplate(), AllottedResource.class),
98         PNF(AAINamespaceConstants.NETWORK, "/pnfs/pnf/{pnf-name}"),
99         OPERATIONAL_ENVIRONMENT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, OperationalEnvironment.class),
100         CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, CloudRegion.class),
101         TENANT(AAIObjectType.CLOUD_REGION.uriTemplate(), Tenant.class),
102         VOLUME_GROUP(AAIObjectType.CLOUD_REGION.uriTemplate(), VolumeGroup.class),
103         VSERVER(AAIObjectType.TENANT.uriTemplate(), Vserver.class),
104         MODEL_VER(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", ModelVer.class),
105         TUNNEL_XCONNECT(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), TunnelXconnect.class),
106         P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), PInterface.class),
107         PHYSICAL_LINK(AAINamespaceConstants.NETWORK, PhysicalLink.class),
108         INSTANCE_GROUP(AAINamespaceConstants.NETWORK, InstanceGroup.class),
109         COLLECTION(AAINamespaceConstants.NETWORK, Collection.class),
110         VNFC(AAINamespaceConstants.NETWORK, Vnfc.class),
111         VLAN_TAG(AAINamespaceConstants.NETWORK, VlanTag.class),
112         COMPLEX(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Complex.class),
113         CONNECTOR(AAINamespaceConstants.BUSINESS, Connector.class),
114         NETWORK_TECHNOLOGY(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, NetworkTechnology.class),
115         SUBNET(AAIObjectType.L3_NETWORK.uriTemplate(), Subnet.class),
116         SP_PARTNER(AAINamespaceConstants.BUSINESS, SpPartner.class),
117         DEVICE(AAINamespaceConstants.NETWORK, Device.class),
118         EXT_AAI_NETWORK(AAINamespaceConstants.NETWORK, ExtAaiNetwork.class),
119         AGGREGATE_ROUTE(AAINamespaceConstants.NETWORK, AggregateRoute.class),
120         UNKNOWN("", "");
121
122         private final String uriTemplate;
123         private final String parentUri;
124         private final String partialUri;
125         private final Class<?> aaiObjectClass;
126         private static Map<String, AAIObjectType> map = new HashMap<>();
127         private AAIObjectType(String parentUri, String partialUri) {
128                 this.parentUri = parentUri;
129                 this.partialUri = partialUri;
130                 this.uriTemplate = parentUri + partialUri;
131                 this.aaiObjectClass = null;
132         }
133
134         private AAIObjectType(String parentUri, Class<?> aaiObjectClass) {
135                 this.parentUri = parentUri;
136                 this.partialUri = removeParentUri(aaiObjectClass, parentUri);
137                 this.uriTemplate = parentUri + partialUri;
138                 this.aaiObjectClass = aaiObjectClass;
139         }
140
141         @Override
142         public String toString() {
143                 return this.uriTemplate();
144         }
145
146         public static AAIObjectType fromTypeName(String name) {
147                 if (map.isEmpty()) {
148                         for (AAIObjectType type : AAIObjectType.values()) {
149                                 map.put(type.typeName(), type);
150                         }
151                 }
152
153                 if (map.containsKey(name)) {
154                         return map.get(name);
155                 } else {
156                         return AAIObjectType.UNKNOWN;
157                 }
158         }
159         @Override
160         public String typeName() {
161                 return this.typeName(CaseFormat.LOWER_HYPHEN);
162         }
163         @Override
164         public String typeName(CaseFormat format) {
165                 String enumName = this.name();
166                 if (this.equals(AAIObjectType.DEFAULT_CLOUD_REGION) || this.equals(AAIObjectType.DEFAULT_TENANT)) {
167                         enumName = enumName.replace("DEFAULT_", "");
168                 }
169
170                 return CaseFormat.UPPER_UNDERSCORE.to(format, enumName);
171         }
172
173         @Override
174         public String uriTemplate() {
175                 return this.uriTemplate;
176         }
177
178         @Override
179         public String partialUri() {
180                 return this.partialUri;
181         }
182
183         protected String removeParentUri(Class<?> aaiObjectClass, String parentUri) {
184                  return aaiObjectClass.getAnnotation(Metadata.class).uriTemplate().replace(parentUri, "");
185         }
186 }