aboutsummaryrefslogtreecommitdiffstats
path: root/ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java
diff options
context:
space:
mode:
Diffstat (limited to 'ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java')
-rw-r--r--ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java299
1 files changed, 299 insertions, 0 deletions
diff --git a/ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java b/ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java
new file mode 100644
index 0000000..4ca6b92
--- /dev/null
+++ b/ajsc-aai/src/main/java/org/openecomp/aai/dbmap/RelationshipGraph.java
@@ -0,0 +1,299 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.openecomp.aai
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.aai.dbmap;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.map.MultiValueMap;
+import org.eclipse.persistence.dynamic.DynamicEntity;
+import org.eclipse.persistence.dynamic.DynamicType;
+import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
+import org.openecomp.aai.dbgen.DbEdgeGroup;
+import org.openecomp.aai.dbgen.DbMeth;
+import org.openecomp.aai.domain.model.AAIResources;
+import org.openecomp.aai.exceptions.AAIException;
+import org.openecomp.aai.extensions.AAIExtensionMap;
+import org.openecomp.aai.util.AAIConfig;
+import org.openecomp.aai.util.AAIConstants;
+import org.openecomp.aai.util.RestURL;
+
+import com.thinkaurelius.titan.core.TitanTransaction;
+import com.thinkaurelius.titan.core.TitanVertex;
+
+public class RelationshipGraph {
+
+ /**
+ * this method processes the one relationship for the startVertex that is
+ * sent.
+ *
+ * @param g the g
+ * @param startVertex the start vertex
+ * @param jaxbContext the jaxb context
+ * @param rel the rel
+ * @param aaiExtMap the aai ext map
+ * @throws AAIException the AAI exception
+ */
+ public static void updRelationship(TitanTransaction g, TitanVertex startVertex,
+ DynamicJAXBContext jaxbContext,
+ DynamicEntity rel,
+ AAIExtensionMap aaiExtMap)
+ throws AAIException {
+ String apiVersion = aaiExtMap.getApiVersion();
+ String transId = aaiExtMap.getTransId();
+ String fromAppId = aaiExtMap.getFromAppId();
+ MultiValueMap relatedNodesMap = new MultiValueMap();
+
+ if( rel != null ){
+ HashMap<String, Object> propFilterHash = new HashMap<String, Object>();
+ poplatePropertyHashWithRelData(rel, apiVersion, propFilterHash);
+ String relNodeType = (String)rel.get("relatedTo");
+ relatedNodesMap.put(relNodeType, propFilterHash);
+ }
+ DbEdgeGroup.replaceEdgeGroup(transId, fromAppId, g, startVertex,
+ "ONLY_PASSED_COUSINS_REL", relatedNodesMap, apiVersion);
+
+ }
+
+ /**
+ * Poplate property hash with rel data.
+ *
+ * @param rel the rel
+ * @param apiVersion the api version
+ * @param propFilterHash the prop filter hash
+ * @throws AAIException the AAI exception
+ */
+ private static void poplatePropertyHashWithRelData(DynamicEntity rel, String apiVersion,
+ HashMap<String, Object> propFilterHash) throws AAIException {
+
+ for( DynamicEntity relData: (List<DynamicEntity>)rel.get("relationshipData")) {
+ String prop = ((String)relData.get("relationshipKey")).toLowerCase().trim();
+ propFilterHash.put(prop, ((String)relData.get("relationshipValue")).trim());
+ }
+ }
+
+ /**
+ * this method gets any relationships for the startVertex being processed
+ * and sets the related-link.
+ *
+ * @param g the g
+ * @param startVertex the start vertex
+ * @param apiVersion the api version
+ * @param aaiExtMap the aai ext map
+ * @return the relationships
+ * @throws AAIException the AAI exception
+ * @throws UnsupportedEncodingException the unsupported encoding exception
+ */
+ public static DynamicEntity getRelationships(TitanTransaction g, TitanVertex startVertex,
+ String apiVersion, AAIExtensionMap aaiExtMap)
+ throws AAIException, UnsupportedEncodingException {
+
+ DynamicType relationshipsType = null;
+ DynamicType relationshipType = null;
+ DynamicType relationshipDataType = null;
+ DynamicType relatedToPropertyType = null;
+
+ Boolean setRelatedToProperty = true;
+
+ AAIResources aaiResources = org.openecomp.aai.ingestModel.IngestModelMoxyOxm.aaiResourceContainer
+ .get(apiVersion);
+
+ DynamicJAXBContext jaxbContext = aaiResources.getJaxbContext();
+
+ //String apiVersion = aaiExtMap.getApiVersion();
+ String transId = aaiExtMap.getTransId();
+ String fromAppId = aaiExtMap.getFromAppId();
+
+ HashMap <String, String> vidToNodeTypeHash = new HashMap <String, String>();
+ HashMap <String, TitanVertex> vidToVertexHash = new HashMap <String, TitanVertex>();
+
+ if ("v2".equals( apiVersion)) {
+ relationshipsType = jaxbContext.getDynamicType("inventory.aai.openecomp.org.RelationshipList");
+ relationshipType = jaxbContext.getDynamicType("inventory.aai.openecomp.org.Relationship");
+ relationshipDataType = jaxbContext.getDynamicType("inventory.aai.openecomp.org.RelationshipData");
+ setRelatedToProperty = false;
+ } else {
+ relationshipsType = jaxbContext.getDynamicType("inventory.aai.openecomp.org." + apiVersion + ".RelationshipList");
+ relationshipType = jaxbContext.getDynamicType("inventory.aai.openecomp.org." + apiVersion + ".Relationship");
+ relationshipDataType = jaxbContext.getDynamicType("inventory.aai.openecomp.org." + apiVersion + ".RelationshipData");
+ relatedToPropertyType = jaxbContext.getDynamicType("inventory.aai.openecomp.org." + apiVersion + ".RelatedToProperty");
+ if (relatedToPropertyType == null) {
+ setRelatedToProperty = false; // some versions do not support this
+ }
+ }
+
+ DynamicEntity relationships = relationshipsType.newDynamicEntity();
+ List<DynamicEntity> listOfRelationships = new ArrayList<DynamicEntity>();
+
+ DbEdgeGroup.getEdgeGroup(transId,
+ fromAppId,
+ g,
+ startVertex,
+ vidToNodeTypeHash,
+ vidToVertexHash,
+ "ONLY_COUSIN_REL",
+ AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
+ // Convert the found relationships to a RelationshipList DynamicEntity
+ for( Map.Entry<String, TitanVertex> entry : vidToVertexHash.entrySet() ){
+
+ List<DynamicEntity> relationshipDataList = new ArrayList<DynamicEntity>();
+ List<DynamicEntity> relatedToPropertyList = new ArrayList<DynamicEntity>();
+
+ DynamicEntity relationship = relationshipType.newDynamicEntity();
+
+ TitanVertex relNode = entry.getValue();
+ String relNodeVid = entry.getKey();
+ String relNodeType = vidToNodeTypeHash.get(relNodeVid);
+ String relNodeURL = RestURL.get(g, relNode, apiVersion);
+
+ HashMap <String, Object> nodeKeyPropsHash = RestURL.getKeyHashes(g, relNode, AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
+ Iterator <Map.Entry<String,Object>>keyIterator = nodeKeyPropsHash.entrySet().iterator();
+ while( keyIterator.hasNext() ){
+ DynamicEntity relationshipData = relationshipDataType.newDynamicEntity();
+ Map.Entry <String,Object>pair = (Map.Entry<String,Object>)keyIterator.next();
+ String key = pair.getKey();
+
+ if (!key.contains(".")) {
+ key = relNodeType + "." + key;
+ }
+
+ String value = "";
+ if( pair.getValue() != null ){
+ value = pair.getValue().toString();
+ }
+
+ relationshipData.set("relationshipKey", key);
+ relationshipData.set("relationshipValue", value);
+
+ relationshipDataList.add(relationshipData);
+ }
+
+ if (setRelatedToProperty) {
+ HashMap <String, Object> nodeNamePropsHash = DbMeth.getNodeNamePropHash(transId, fromAppId, g, relNode, AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
+ Iterator <Map.Entry<String,Object>>nameIterator = nodeNamePropsHash.entrySet().iterator();
+ while( nameIterator.hasNext() ){
+ DynamicEntity relatedToProperty = relatedToPropertyType.newDynamicEntity();
+ Map.Entry <String,Object>pair = (Map.Entry<String,Object>)nameIterator.next();
+ String key = pair.getKey();
+
+ if (!key.contains(".")) {
+ key = relNodeType + "." + key;
+ }
+
+ String value = "";
+ if( pair.getValue() != null ){
+ value = pair.getValue().toString();
+ }
+ relatedToProperty.set("propertyKey", key);
+ relatedToProperty.set("propertyValue", value);
+
+ relatedToPropertyList.add(relatedToProperty);
+
+ }
+ relationship.set("relatedToProperty", relatedToPropertyList);
+ }
+ relationship.set("relatedTo", relNodeType);
+ relationship.set("relatedLink", relNodeURL);
+ relationship.set("relationshipData", relationshipDataList);
+
+ listOfRelationships.add(relationship);
+ }
+ relationships.set("relationship", listOfRelationships);
+ return relationships;
+ }
+
+ /**
+ * this method processes any relationships for the startVertex being
+ * processed.
+ *
+ * @param g the g
+ * @param startVertex the start vertex
+ * @param jaxbContext the jaxb context
+ * @param relationshipList the relationship list
+ * @param aaiExtMap the aai ext map
+ * @throws AAIException the AAI exception
+ */
+ public static void updRelationships(TitanTransaction g, TitanVertex startVertex,
+ DynamicJAXBContext jaxbContext,
+ DynamicEntity relationshipList,
+ AAIExtensionMap aaiExtMap)
+ throws AAIException {
+
+ String apiVersion = aaiExtMap.getApiVersion();
+ String transId = aaiExtMap.getTransId();
+ String fromAppId = aaiExtMap.getFromAppId();
+ MultiValueMap relatedNodesMap = new MultiValueMap();
+ if (relationshipList != null) {
+ if( relationshipList.get("relationship") != null ){
+ List <DynamicEntity> relListTmp = relationshipList.get("relationship");
+ for( DynamicEntity rel: relListTmp) {
+ HashMap<String, Object> propFilterHash = new HashMap<String, Object>();
+ poplatePropertyHashWithRelData(rel, apiVersion, propFilterHash);
+ String relNodeType = (String)rel.get("relatedTo");
+ relatedNodesMap.put(relNodeType, propFilterHash);
+
+
+ }
+ }
+ DbEdgeGroup.replaceEdgeGroup(transId, fromAppId, g, startVertex,
+ "ALL_COUSIN_REL", relatedNodesMap, apiVersion);
+ }
+ }
+
+ /**
+ * this method deletes the relationship sent in for the startVertex being
+ * processed.
+ *
+ * @param g the g
+ * @param startVertex the start vertex
+ * @param jaxbContext the jaxb context
+ * @param rel the rel
+ * @param aaiExtMap the aai ext map
+ * @throws AAIException the AAI exception
+ */
+ public static void delRelationship(TitanTransaction g, TitanVertex startVertex,
+ DynamicJAXBContext jaxbContext,
+ DynamicEntity rel,
+ AAIExtensionMap aaiExtMap)
+ throws AAIException {
+
+ String apiVersion = aaiExtMap.getApiVersion();
+ String transId = aaiExtMap.getTransId();
+ String fromAppId = aaiExtMap.getFromAppId();
+ MultiValueMap relatedNodesMap = new MultiValueMap();
+
+ if( rel != null ){
+ HashMap<String, Object> propFilterHash = new HashMap<String, Object>();
+ poplatePropertyHashWithRelData(rel, apiVersion, propFilterHash);
+ String relNodeType = (String)rel.get("relatedTo");
+ relatedNodesMap.put(relNodeType, propFilterHash);
+ }
+
+ DbEdgeGroup.deleteEdgeGroup(transId, fromAppId, g, startVertex,
+ relatedNodesMap, apiVersion);
+
+ }
+
+}