Added support for Multiple Edges 21/25321/1
authorMaharajh, Robby (rx2202) <rx2202@att.com>
Fri, 1 Dec 2017 15:41:41 +0000 (10:41 -0500)
committerMaharajh, Robby (rx2202) <rx2202@att.com>
Fri, 1 Dec 2017 15:45:31 +0000 (10:45 -0500)
Issue-ID: AAI-524
Change-Id: I33dd31315992e2efb2d6d390ffc523655b55a84c
Signed-off-by: Maharajh, Robby (rx2202) <rx2202@att.com>
36 files changed:
.gitignore
aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java
aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java
aai-core/src/main/java/org/onap/aai/query/builder/GremlinTraversal.java
aai-core/src/main/java/org/onap/aai/query/builder/GremlinUnique.java
aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java
aai-core/src/main/java/org/onap/aai/query/builder/TraversalQuery.java
aai-core/src/main/java/org/onap/aai/rest/db/HttpEntry.java
aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java
aai-core/src/main/java/org/onap/aai/serialization/db/EdgeProperty.java
aai-core/src/main/java/org/onap/aai/serialization/db/EdgeRule.java
aai-core/src/main/java/org/onap/aai/serialization/db/EdgeRules.java
aai-core/src/main/java/org/onap/aai/serialization/db/exceptions/MultipleEdgeRuleFoundException.java [new file with mode: 0644]
aai-core/src/main/java/org/onap/aai/serialization/db/exceptions/NoEdgeRuleFoundException.java
aai-core/src/main/java/org/onap/aai/serialization/db/util/VersionChecker.java [new file with mode: 0644]
aai-core/src/main/java/org/onap/aai/serialization/queryformats/RawFormat.java
aai-core/src/main/java/org/onap/aai/serialization/queryformats/exceptions/AAIFormatQueryResultFormatNotSupported.java [new file with mode: 0644]
aai-core/src/main/resources/dbedgerules/DbEdgeRules_v10.json
aai-core/src/main/resources/dbedgerules/DbEdgeRules_v11.json
aai-core/src/main/resources/dbedgerules/DbEdgeRules_v12.json
aai-core/src/main/resources/dbedgerules/DbEdgeRules_v8.json
aai-core/src/main/resources/dbedgerules/DbEdgeRules_v9.json
aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataCopyTest.java
aai-core/src/test/java/org/onap/aai/query/builder/GremlinTraversalTest.java [new file with mode: 0644]
aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java [new file with mode: 0644]
aai-core/src/test/java/org/onap/aai/query/builder/TraversalQueryTest.java
aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java
aai-core/src/test/java/org/onap/aai/serialization/db/EdgeRulesTest.java
aai-core/src/test/java/org/onap/aai/serialization/db/util/VersionCheckerTest.java [new file with mode: 0644]
aai-core/src/test/java/org/onap/aai/serialization/queryformats/RawFormatTest.java [new file with mode: 0644]
aai-core/src/test/java/org/onap/aai/util/FormatDateTest.java [new file with mode: 0644]
aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v12.xml
aai-core/src/test/resources/dbedgerules/DbEdgeRules_TraversalQueryTest.json [new file with mode: 0644]
aai-core/src/test/resources/dbedgerules/DbEdgeRules_test.json
aai-schema/src/main/resources/aai_schema/aai_schema_v12.xsd
aai-schema/src/main/resources/oxm/aai_oxm_v12.xml

index 50983ee..5b160ae 100644 (file)
@@ -10,3 +10,4 @@ bundleconfig-local/etc/logback.xml
 /bin/
 */.idea
 *.iml
+.idea/
\ No newline at end of file
index 8a585da..82079ad 100644 (file)
@@ -22,9 +22,8 @@
 package org.onap.aai.query.builder;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 
@@ -74,6 +73,18 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                
        }
        
+       /**
+        * Instantiates a new graph traversal builder.
+        *
+        * @param loader the loader
+        */
+       public GraphTraversalBuilder(Loader loader, GraphTraversalSource source, EdgeRules edgeRules) {
+               super(loader, source);
+               this.edgeRules = edgeRules;
+               traversal = (GraphTraversal<Vertex, E>) __.<E>start();
+               
+       }
+       
        /**
         * Instantiates a new graph traversal builder.
         *
@@ -86,34 +97,28 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                traversal = (GraphTraversal<Vertex, E>) __.__(start);
                
        }
-
-       /**
-        * @{inheritDoc}
-        */
-       @Override
-       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, Object value) {
        
-               return this.getVerticesByProperty(key, value);
-       }
-
        /**
-        * @{inheritDoc}
+        * Instantiates a new graph traversal builder.
+        *
+        * @param loader the loader
+        * @param start the start
         */
-       @Override
-       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, List<?> values) {
-               return this.getVerticesByProperty(key, values);
+       public GraphTraversalBuilder(Loader loader, GraphTraversalSource source, Vertex start, EdgeRules edgeRules) {
+               super(loader, source, start);
+               this.edgeRules = edgeRules;
+               traversal = (GraphTraversal<Vertex, E>) __.__(start);
+               
        }
-       
+
        /**
         * @{inheritDoc}
         */
        @Override
        public QueryBuilder<Vertex> getVerticesByProperty(String key, Object value) {
                
-               //this is because the index is registered as an Integer
-               value = this.correctObjectType(value);
-               
-               traversal.has(key, value);
+               // correct value call because the index is registered as an Integer
+               traversal.has(key, this.correctObjectType(value));
                
                stepIndex++;
                return (QueryBuilder<Vertex>) this;
@@ -151,10 +156,10 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
         * @{inheritDoc}
         */
        @Override
-       public QueryBuilder<Vertex> getTypedVerticesByMap(String type, LinkedHashMap<String, String> map) {
+       public QueryBuilder<Vertex> getTypedVerticesByMap(String type, Map<String, String> map) {
                
-               for (String key : map.keySet()) {
-                       traversal.has(key, map.get(key));
+               for (Map.Entry<String, String> es : map.entrySet()) {
+                       traversal.has(es.getKey(), es.getValue());
                        stepIndex++;
                }
                traversal.has(AAIProperties.NODE_TYPE, type);
@@ -162,16 +167,6 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                return (QueryBuilder<Vertex>) this;
        }
 
-       /**
-        * @{inheritDoc}
-        */
-       @Override
-       public QueryBuilder<Vertex> createDBQuery(Introspector obj) {
-               this.createKeyQuery(obj);
-               this.createContainerQuery(obj);
-               return (QueryBuilder<Vertex>) this;
-       }
-
        /**
         * @{inheritDoc}
         */
@@ -257,70 +252,78 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
         * @{inheritDoc}
         */
        @Override
-       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException, NoEdgeRuleFoundException {
+       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException {
                String isAbstractType = parent.getMetadata(ObjectMetadata.ABSTRACT);
                if ("true".equals(isAbstractType)) {
                        markParentBoundary();
                        traversal.union(handleAbstractEdge(type, parent, child));
-                       stepIndex += 1;
+                       stepIndex++;
                } else {
-                       this.edgeQueryToVertex(type, parent, child);
+                       this.edgeQueryToVertex(type, parent, child, null);
                }
                return (QueryBuilder<Vertex>) this;
                        
        }
-       
+
+       /**
+        *
+        * @{inheritDoc}
+        */
+       @Override
+       public QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, Introspector out, Introspector in, List<String> labels) throws AAIException {
+               this.edgeQueryToVertex(type, out, in, labels);
+               return (QueryBuilder<Vertex>) this;
+       }
+
+
        private Traversal<Vertex, Vertex>[] handleAbstractEdge(EdgeType type, Introspector abstractParent, Introspector child) throws AAIException, NoEdgeRuleFoundException {
                String childName = child.getDbName();
                String inheritorMetadata = abstractParent.getMetadata(ObjectMetadata.INHERITORS);
                String[] inheritors = inheritorMetadata.split(",");
-               Traversal<Vertex, Vertex>[] unionTraversals = new Traversal[inheritors.length];
-               int traversalIndex = 0;
+               List<Traversal<Vertex, Vertex>> unionTraversals = new ArrayList<>(inheritors.length);
+
                for (int i = 0; i < inheritors.length; i++) {
                        String inheritor = inheritors[i];
                        if (edgeRules.hasEdgeRule(inheritor, childName) || edgeRules.hasEdgeRule(childName, inheritor)) {
-                               EdgeRule rule = edgeRules.getEdgeRule(type, inheritor, childName);
+                               Map<String, EdgeRule> rules = edgeRules.getEdgeRules(type, inheritor, childName);
                                GraphTraversal<Vertex, Vertex> innerTraversal = __.start();
-                               if (rule.getDirection().equals(Direction.OUT)) {
-                                       innerTraversal.out(rule.getLabel());
-                               } else {
-                                       innerTraversal.in(rule.getLabel());
+                               
+                               final List<String> inLabels = new ArrayList<>();
+                               final List<String> outLabels = new ArrayList<>();
+
+                               rules.forEach((k,v) -> {
+                                       if (v.getDirection().equals(Direction.IN)) {
+                                               inLabels.add(k);
+                                       } else {
+                                               outLabels.add(k);
+                                       }
+                               } );
+               
+                               if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+                                       innerTraversal.out(outLabels.toArray(new String[outLabels.size()]));
+                               } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+                                       innerTraversal.in(inLabels.toArray(new String[inLabels.size()]));
+                               } else {                                
+                                       innerTraversal.union(__.out(outLabels.toArray(new String[outLabels.size()])), __.in(inLabels.toArray(new String[inLabels.size()])));
                                }
+                               
                                innerTraversal.has(AAIProperties.NODE_TYPE, childName);
-                               unionTraversals[traversalIndex] = innerTraversal;
-                               traversalIndex++;
+                               unionTraversals.add(innerTraversal);
                        }
                }
-               if (traversalIndex < inheritors.length) {
-                       Traversal<Vertex, Vertex>[] temp = Arrays.copyOfRange(unionTraversals, 0, traversalIndex);
-                       unionTraversals = temp;
-               }
-               return unionTraversals;
-       }
-       /**
-        * @throws NoEdgeRuleFoundException 
-        * @throws AAIException 
-        * @{inheritDoc}
-        */
-       @Override
-       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Vertex parent, Introspector child) throws AAIException, NoEdgeRuleFoundException {
                
-               String nodeType = parent.<String>property(AAIProperties.NODE_TYPE).orElse(null);
-               Introspector parentObj = loader.introspectorFromName(nodeType);
-               this.edgeQueryToVertex(type, parentObj, child);
-               return (QueryBuilder<Vertex>) this;
-                       
+               return unionTraversals.toArray(new Traversal[unionTraversals.size()]);
        }
-       
-       @Override
-       public QueryBuilder<Edge> getEdgesBetween(EdgeType type, String outNodeType, String inNodeType) throws AAIException {
+
+       public QueryBuilder<Edge> getEdgesBetweenWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException {
                Introspector outObj = loader.introspectorFromName(outNodeType);
                Introspector inObj = loader.introspectorFromName(inNodeType);
-               this.edgeQuery(type, outObj, inObj);
-               
-               return (QueryBuilder<Edge>)this;
+               this.edgeQuery(type, outObj, inObj, labels);
 
+               return (QueryBuilder<Edge>)this;
        }
+
+
        /**
         * @{inheritDoc}
         */
@@ -477,12 +480,12 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
        /**
         * Edge query.
         *
-        * @param outType the out type
-        * @param inType the in type
+        * @param outObj the out type
+        * @param inObj the in type
         * @throws NoEdgeRuleFoundException 
         * @throws AAIException 
         */
-       private void edgeQueryToVertex(EdgeType type, Introspector outObj, Introspector inObj) throws AAIException, NoEdgeRuleFoundException {
+       private void edgeQueryToVertex(EdgeType type, Introspector outObj, Introspector inObj, List<String> labels) throws AAIException {
                String outType = outObj.getDbName();
                String inType = inObj.getDbName();
                
@@ -493,13 +496,38 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                        inType = inObj.getChildDBName();
                }
                markParentBoundary();
-               EdgeRule rule = edgeRules.getEdgeRule(type, outType, inType);
-               if (rule.getDirection().equals(Direction.OUT)) {
-                       traversal.out(rule.getLabel());
+               Map<String, EdgeRule> rules;
+               if (labels == null) {
+                       rules = edgeRules.getEdgeRules(type, outType, inType);
                } else {
-                       traversal.in(rule.getLabel());
+                       rules = edgeRules.getEdgeRulesWithLabels(type, outType, inType, labels);
+               }
+               
+               final List<String> inLabels = new ArrayList<>();
+               final List<String> outLabels = new ArrayList<>();
+
+               rules.forEach((k, edgeRule) -> {
+                       if (labels != null && !labels.contains(k)) {
+                               return;
+                       } else {
+                               if (edgeRule.getDirection().equals(Direction.IN)) {
+                                       inLabels.add(edgeRule.getLabel());
+                               } else {
+                                       outLabels.add(edgeRule.getLabel());
+                               }
+                       }
+               });
+
+               if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+                       traversal.out(outLabels.toArray(new String[outLabels.size()]));
+               } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+                       traversal.in(inLabels.toArray(new String[inLabels.size()]));
+               } else {                                
+                       traversal.union(__.out(outLabels.toArray(new String[outLabels.size()])), __.in(inLabels.toArray(new String[inLabels.size()])));
                }
+               
                stepIndex++;
+
                this.createContainerQuery(inObj);
                
        }
@@ -507,12 +535,12 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
        /**
         * Edge query.
         *
-        * @param outType the out type
-        * @param inType the in type
+        * @param outObj the out type
+        * @param inObj the in type
         * @throws NoEdgeRuleFoundException 
         * @throws AAIException 
         */
-       private void edgeQuery(EdgeType type, Introspector outObj, Introspector inObj) throws AAIException, NoEdgeRuleFoundException {
+       private void edgeQuery(EdgeType type, Introspector outObj, Introspector inObj, List<String> labels) throws AAIException {
                String outType = outObj.getDbName();
                String inType = inObj.getDbName();
                
@@ -522,15 +550,37 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                if (inObj.isContainer()) {
                        inType = inObj.getChildDBName();
                }
+               
                markParentBoundary();
-               EdgeRule rule = edgeRules.getEdgeRule(type, outType, inType);
-               if (rule.getDirection().equals(Direction.OUT)) {
-                       traversal.outE(rule.getLabel());
+               Map<String, EdgeRule> rules;
+               if (labels == null) {
+                       rules = edgeRules.getEdgeRules(type, outType, inType);
                } else {
-                       traversal.inE(rule.getLabel());
+                       rules = edgeRules.getEdgeRulesWithLabels(type, outType, inType, labels);
                }
-               stepIndex++;
                
+               final List<String> inLabels = new ArrayList<>();
+               final List<String> outLabels = new ArrayList<>();
+
+               rules.forEach((k, edgeRule) -> {
+                       if (labels != null && !labels.contains(k)) {
+                               return;
+                       } else {
+                               if (edgeRule.getDirection().equals(Direction.IN)) {
+                                       inLabels.add(edgeRule.getLabel());
+                               } else {
+                                       outLabels.add(edgeRule.getLabel());
+                               }
+                       }
+               });
+
+               if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+                       traversal.outE(outLabels.toArray(new String[outLabels.size()]));
+               } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+                       traversal.inE(inLabels.toArray(new String[inLabels.size()]));
+               } else {                                
+                       traversal.union(__.outE(outLabels.toArray(new String[outLabels.size()])), __.inE(inLabels.toArray(new String[inLabels.size()])));
+               }
        }
        
        @Override
index 62ba539..f2eaa91 100644 (file)
@@ -23,7 +23,6 @@ package org.onap.aai.query.builder;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -67,7 +66,19 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
         */
        public GremlinQueryBuilder(Loader loader, GraphTraversalSource source) {
                super(loader, source);
-               list = new ArrayList<String>();
+               list = new ArrayList<>();
+       }
+       
+       /**
+        * Instantiates a new graph gremlin builder.
+        *
+        * @param loader the loader
+        */
+       public GremlinQueryBuilder(Loader loader, GraphTraversalSource source, EdgeRules edgeRules) {
+               super(loader, source);
+               this.edgeRules = edgeRules;
+               list = new ArrayList<>();
+               
        }
        
        /**
@@ -78,43 +89,29 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
         */
        public GremlinQueryBuilder(Loader loader, GraphTraversalSource source, Vertex start) {
                super(loader, source, start);
-               list = new ArrayList<String>();
+               list = new ArrayList<>();
        }
        
        /**
-        * @{inheritDoc}
+        * Instantiates a new graph gremlin builder.
+        *
+        * @param loader the loader
+        * @param start the start
         */
-       @Override
-       public QueryBuilder<Vertex> createDBQuery(Introspector obj) {
-               this.createKeyQuery(obj);
-               this.createContainerQuery(obj);
-               return (QueryBuilder<Vertex>) this;
+       public GremlinQueryBuilder(Loader loader, GraphTraversalSource source, Vertex start, EdgeRules edgeRules) {
+               super(loader, source, start);
+               this.edgeRules = edgeRules;
+               list = new ArrayList<>();
+               
        }
        
        @Override
        public QueryBuilder<Vertex> exactMatchQuery(Introspector obj) {
                // TODO not implemented because this is implementation is no longer used
                this.createKeyQuery(obj);
-               //allPropertiesQuery(obj);
                this.createContainerQuery(obj);
                return (QueryBuilder<Vertex>) this;
        }
-       
-       /**
-        * @{inheritDoc}
-        */
-       @Override
-       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, Object value) {
-               return this.getVerticesByProperty(key, value);
-       }
-       
-       /**
-        * @{inheritDoc}
-        */
-       @Override
-       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, List<?> values) {
-               return this.getVerticesByProperty(key, values);
-       }
 
        /**
         * @{inheritDoc}
@@ -123,7 +120,7 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
        public QueryBuilder<Vertex> getVerticesByProperty(String key, Object value) {
 
                String term = "";
-               if (value != null && !value.getClass().getName().equals("java.lang.String")) {
+               if (value != null && !(value instanceof String) ) {
                        term = value.toString();
                } else {
                        term = "'" + value + "'";
@@ -143,7 +140,7 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
                String predicate = "P.within(#!#argument#!#)";
                List<String> arguments = new ArrayList<>();
                for (Object item : values) {
-                       if (item != null && !item.getClass().getName().equals("java.lang.String")) {
+                       if (item != null && !(item instanceof String)) {
                                arguments.add(item.toString());
                        } else {
                                arguments.add("'" + item + "'");
@@ -175,10 +172,10 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
         * @{inheritDoc}
         */
        @Override
-       public QueryBuilder<Vertex> getTypedVerticesByMap(String type, LinkedHashMap<String, String> map) {
+       public QueryBuilder<Vertex> getTypedVerticesByMap(String type, Map<String, String> map) {
                
-               for (String key : map.keySet()) {
-                       list.add(".has('" + key + "', '" + map.get(key) + "')");
+               for (Map.Entry<String, String> es : map.entrySet()) {
+                       list.add(".has('" + es.getKey() + "', '" + es.getValue() + "')");
                        stepIndex++;
                }
                list.add(".has('aai-node-type', '" + type + "')");
@@ -207,7 +204,7 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
         * @{inheritDoc}
         */
        @Override
-       public QueryBuilder createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException, NoEdgeRuleFoundException {
+       public QueryBuilder createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException {
                String parentName = parent.getDbName();
                String childName = child.getDbName();
                if (parent.isContainer()) {
@@ -216,47 +213,73 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
                if (child.isContainer()) {
                        childName = child.getChildDBName();
                }
-               this.edgeQueryToVertex(type, parentName, childName);
+               this.edgeQueryToVertex(type, parentName, childName, null);
                return this;
                        
        }
-       
+
        /**
-        * @throws NoEdgeRuleFoundException 
-        * @throws AAIException 
+        *
         * @{inheritDoc}
         */
        @Override
-       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Vertex parent, Introspector child) throws AAIException, NoEdgeRuleFoundException {
-               String nodeType = parent.<String>property(AAIProperties.NODE_TYPE).orElse(null);
-               this.edgeQueryToVertex(type, nodeType, child.getDbName());
-               
+       public QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, Introspector out, Introspector in, List<String> labels) throws AAIException {
+               String parentName = out.getDbName();
+               String childName = in.getDbName();
+               if (out.isContainer()) {
+                       parentName = out.getChildDBName();
+               }
+               if (in.isContainer()) {
+                       childName = in.getChildDBName();
+               }
+               this.edgeQueryToVertex(type, parentName, childName, labels);
                return (QueryBuilder<Vertex>) this;
-                       
        }
-       
-       @Override
-       public QueryBuilder<Edge> getEdgesBetween(EdgeType type, String outNodeType, String inNodeType) throws AAIException {
-               this.edgeQuery(type, outNodeType, inNodeType);
-               
-               return (QueryBuilder<Edge>)this;
 
+
+       public QueryBuilder<Edge> getEdgesBetweenWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException {
+               this.edgeQuery(type, outNodeType, inNodeType, labels);
+               return (QueryBuilder<Edge>)this;
        }
+
        /**
         * Edge query.
         *
         * @param outType the out type
         * @param inType the in type
-        * @throws NoEdgeRuleFoundException 
-        * @throws AAIException 
+        * @throws NoEdgeRuleFoundException
+        * @throws AAIException
         */
-       private void edgeQueryToVertex(EdgeType type, String outType, String inType) throws AAIException, NoEdgeRuleFoundException {
+       private void edgeQueryToVertex(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
                markParentBoundary();
-               EdgeRule rule = edgeRules.getEdgeRule(type, outType, inType);
-               if (rule.getDirection().equals(Direction.OUT)) {
-                       list.add(".out('" + rule.getLabel() + "')");
+               Map<String, EdgeRule> rules;
+               if (labels == null) {
+                       rules = edgeRules.getEdgeRules(type, outType, inType);
                } else {
-                       list.add(".in('" + rule.getLabel() + "')");
+                       rules = edgeRules.getEdgeRulesWithLabels(type, outType, inType, labels);
+               }
+
+               final List<String> inLabels = new ArrayList<>();
+               final List<String> outLabels = new ArrayList<>();
+
+               rules.forEach((k, edgeRule) -> {
+                       if (labels != null && !labels.contains(k)) {
+                               return;
+                       } else {
+                               if (edgeRule.getDirection().equals(Direction.IN)) {
+                                       inLabels.add(edgeRule.getLabel());
+                               } else {
+                                       outLabels.add(edgeRule.getLabel());
+                               }
+                       }
+               });
+
+               if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+                       list.add(".out('" + String.join("','", outLabels) + "')");
+               } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+                       list.add(".in('" + String.join("','", inLabels) + "')");
+               } else {
+                       list.add(".union(__.in('" + String.join("','", inLabels) + "')" + ", __.out('" + String.join("','", outLabels) + "'))");
                }
                stepIndex++;
                list.add(".has('" + AAIProperties.NODE_TYPE + "', '" + inType + "')");
@@ -272,14 +295,38 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
         * @throws NoEdgeRuleFoundException 
         * @throws AAIException 
         */
-       private void edgeQuery(EdgeType type, String outType, String inType) throws AAIException, NoEdgeRuleFoundException {
+       private void edgeQuery(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
                markParentBoundary();
-               EdgeRule rule = edgeRules.getEdgeRule(type, outType, inType);
-               if (rule.getDirection().equals(Direction.OUT)) {
-                       list.add(".outE('" + rule.getLabel() + "')");
+               Map<String, EdgeRule> rules;
+               if (labels == null) {
+                       rules = edgeRules.getEdgeRules(type, outType, inType);
                } else {
-                       list.add(".inV('" + rule.getLabel() + "')");
+                       rules = edgeRules.getEdgeRulesWithLabels(type, outType, inType, labels);
                }
+               
+               final List<String> inLabels = new ArrayList<>();
+               final List<String> outLabels = new ArrayList<>();
+
+               rules.forEach((k, edgeRule) -> {
+                       if (labels != null && !labels.contains(k)) {
+                               return;
+                       } else {
+                               if (edgeRule.getDirection().equals(Direction.IN)) {
+                                       inLabels.add(edgeRule.getLabel());
+                               } else {
+                                       outLabels.add(edgeRule.getLabel());
+                               }
+                       }
+               });
+
+               if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+                       list.add(".outE('" + String.join("','", outLabels) + "')");
+               } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+                       list.add(".inE('" + String.join("','", inLabels) + "')");
+               } else {
+                       list.add(".union(__.inE('" + String.join("','", inLabels) + "')" + ", __.outE('" + String.join("','", outLabels) + "'))");
+               }
+               
                stepIndex++;
                
        }
index 801ac33..b3d3f75 100644 (file)
@@ -35,12 +35,23 @@ import org.onap.aai.introspection.Introspector;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.parsers.query.QueryParser;
 import org.onap.aai.parsers.query.TraversalStrategy;
+import org.onap.aai.serialization.db.EdgeRules;
 
 /**
  * The Class GremlinTraversal.
  */
 public class GremlinTraversal<E> extends GremlinQueryBuilder<E> {
 
+       /**
+        * Instantiates a new gremlin traversal.
+        *
+        * @param loader the loader
+        */
+       public GremlinTraversal(Loader loader, GraphTraversalSource source, EdgeRules ers) {
+               super(loader, source, ers);
+               this.factory = new TraversalStrategy(this.loader, this);
+       }
+       
        /**
         * Instantiates a new gremlin traversal.
         *
@@ -61,6 +72,17 @@ public class GremlinTraversal<E> extends GremlinQueryBuilder<E> {
                super(loader, source, start);
                this.factory = new TraversalStrategy(this.loader, this);
        }
+       
+       /**
+        * Instantiates a new gremlin traversal.
+        *
+        * @param loader the loader
+        * @param start the start
+        */
+       public GremlinTraversal(Loader loader, GraphTraversalSource source, Vertex start, EdgeRules ers) {
+               super(loader, source, start, ers);
+               this.factory = new TraversalStrategy(this.loader, this);
+       }
 
        protected GremlinTraversal(List<String> traversal, Loader loader, GraphTraversalSource source, GremlinQueryBuilder<E> gtb) {
                super(loader, source);
@@ -124,11 +146,15 @@ public class GremlinTraversal<E> extends GremlinQueryBuilder<E> {
        
        @Override
        protected QueryBuilder<E> cloneQueryAtStep(int index) {
-               if (index == 0) {
-                       index = stepIndex;
+               
+               int idx = index;
+               
+               if (idx == 0) {
+                       idx = stepIndex;
                }
+               
                List<String> newList = new ArrayList<>();
-               for (int i = 0; i < index; i++) {
+               for (int i = 0; i < idx; i++) {
                        newList.add(this.list.get(i));
                }
                
index 284f884..85bd7ab 100644 (file)
@@ -125,11 +125,15 @@ public class GremlinUnique<E> extends GremlinQueryBuilder<E> {
        
        @Override
        protected QueryBuilder<E> cloneQueryAtStep(int index) {
-               if (index == 0) {
-                       index = stepIndex;
+               
+               int idx = index;
+               
+               if (idx == 0) {
+                       idx = stepIndex;
                }
+               
                List<String> newList = new ArrayList<>();
-               for (int i = 0; i < index; i++) {
+               for (int i = 0; i < idx; i++) {
                        newList.add(this.list.get(i));
                }
                
index 3a3feaf..5f91a44 100644 (file)
@@ -24,35 +24,32 @@ package org.onap.aai.query.builder;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.ws.rs.core.MultivaluedMap;
 
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.onap.aai.db.props.AAIProperties;
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Introspector;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.parsers.query.QueryParser;
 import org.onap.aai.parsers.query.QueryParserStrategy;
 import org.onap.aai.serialization.db.EdgeType;
-import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
 
 /**
  * The Class QueryBuilder.
  */
 public abstract class QueryBuilder<E> implements Iterator<E> {
 
+       protected final GraphTraversalSource source;
        protected QueryParserStrategy factory = null;
-       
        protected Loader loader = null;
-       
        protected boolean optimize = false;
-       
        protected Vertex start = null;
-       protected final GraphTraversalSource source;
        
        /**
         * Instantiates a new query builder.
@@ -83,7 +80,9 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
         * @param value the value
         * @return the vertices by indexed property
         */
-       public abstract QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, Object value);
+       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, Object value) {
+               return this.getVerticesByProperty(key, value);
+       }
        
        /**
         * Gets the vertices by property.
@@ -100,7 +99,9 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
         * @param values
         * @return vertices that match these values
         */
-       public abstract QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, List<?> values);
+       public QueryBuilder<Vertex> getVerticesByIndexedProperty(String key, List<?> values) {
+               return this.getVerticesByProperty(key, values);
+       }
 
        /**
         * filters by all the values for this property
@@ -127,7 +128,7 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
         * @param map the map
         * @return the typed vertices by map
         */
-       public abstract QueryBuilder<Vertex> getTypedVerticesByMap(String type, LinkedHashMap<String, String> map);
+       public abstract QueryBuilder<Vertex> getTypedVerticesByMap(String type, Map<String, String> map);
 
        /**
         * Creates the DB query.
@@ -135,7 +136,11 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
         * @param obj the obj
         * @return the query builder
         */
-       public abstract QueryBuilder<Vertex> createDBQuery(Introspector obj);
+       public QueryBuilder<Vertex> createDBQuery(Introspector obj) {
+               this.createKeyQuery(obj);
+               this.createContainerQuery(obj);
+               return (QueryBuilder<Vertex>) this;
+       }
        
        /**
         * Creates the key query.
@@ -169,16 +174,79 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
         * @param child the child
         * @return the query builder
         */
-       public abstract QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Vertex parent, Introspector child) throws AAIException;
+       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Vertex parent, Introspector child) throws AAIException {
+               String nodeType = parent.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               this.createEdgeTraversal(type, nodeType, child.getDbName());
+               return (QueryBuilder<Vertex>) this;
+
+       }
 
-       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, String outNodeType, String inNodeType) throws NoEdgeRuleFoundException, AAIException {
+       /**
+        *
+        * @param type
+        * @param outNodeType
+        * @param inNodeType
+        * @return
+        * @throws AAIException
+        */
+       public QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, String outNodeType, String inNodeType) throws AAIException {
                Introspector out = loader.introspectorFromName(outNodeType);
                Introspector in = loader.introspectorFromName(inNodeType);
-               
+
                return createEdgeTraversal(type, out, in);
        }
-       
-       public abstract QueryBuilder<Edge> getEdgesBetween(EdgeType type, String outNodeType, String inNodeType) throws AAIException;
+
+       /**
+        *
+        * @param type
+        * @param outNodeType
+        * @param inNodeType
+        * @param labels
+        * @return
+        * @throws AAIException
+        */
+       public QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException {
+               Introspector out = loader.introspectorFromName(outNodeType);
+               Introspector in = loader.introspectorFromName(inNodeType);
+
+               return createEdgeTraversalWithLabels(type, out, in, labels);
+       }
+
+       /**
+        *
+        * @param type
+        * @param out
+        * @param in
+        * @param labels
+        * @return
+        */
+       public abstract QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, Introspector out, Introspector in, List<String> labels) throws AAIException;
+
+       /**
+        *
+        * @param type
+        * @param outNodeType
+        * @param inNodeType
+        * @return
+        * @throws AAIException
+        */
+       public QueryBuilder<Edge> getEdgesBetween(EdgeType type, String outNodeType, String inNodeType) throws AAIException {
+               this.getEdgesBetweenWithLabels(type, outNodeType, inNodeType, null);
+
+               return (QueryBuilder<Edge>)this;
+
+       }
+       /**
+        *
+        * @param type
+        * @param outNodeType
+        * @param inNodeType
+        * @param labels
+        * @return
+        * @throws AAIException
+        */
+       public abstract QueryBuilder<Edge> getEdgesBetweenWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException;
+
        /**
         * Creates the query from URI.
         *
@@ -238,6 +306,7 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
        public abstract void markParentBoundary();
        
        public abstract QueryBuilder<E> limit(long amount);
+
        /**
         * New instance.
         *
index 60e72aa..014ce79 100644 (file)
@@ -31,12 +31,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Introspector;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.parsers.query.QueryParser;
 import org.onap.aai.parsers.query.TraversalStrategy;
+import org.onap.aai.serialization.db.EdgeRules;
 
 /**
  * The Class TraversalQuery.
@@ -53,6 +53,19 @@ public class TraversalQuery<E> extends GraphTraversalBuilder<E> {
                this.factory = new TraversalStrategy(this.loader, this);
        }
        
+       /**
+        * Instantiates a new traversal query.
+        *
+        * @param loader the loader
+        * @param source graph traversal source
+        * @param edgeRules the edgeRules to use
+        */
+       public TraversalQuery(Loader loader, GraphTraversalSource source, EdgeRules edgeRules) {
+               super(loader, source, edgeRules);
+               this.factory = new TraversalStrategy(this.loader, this);
+       
+       }
+       
        /**
         * Instantiates a new traversal query.
         *
@@ -64,6 +77,17 @@ public class TraversalQuery<E> extends GraphTraversalBuilder<E> {
                this.factory = new TraversalStrategy(this.loader, this);
        }
        
+       /**
+        * Instantiates a new traversal query.
+        *
+        * @param loader the loader
+        * @param start the start
+        */
+       public TraversalQuery(Loader loader, GraphTraversalSource source, Vertex start, EdgeRules edgeRules) {
+               super(loader, source, start, edgeRules);
+               this.factory = new TraversalStrategy(this.loader, this);
+       }
+       
        protected TraversalQuery(GraphTraversal<Vertex, E> traversal, Loader loader, GraphTraversalSource source, GraphTraversalBuilder<E> gtb) {
                super(loader, source);
                this.traversal = traversal;
@@ -125,14 +149,17 @@ public class TraversalQuery<E> extends GraphTraversalBuilder<E> {
        
        @Override
        protected QueryBuilder<E> cloneQueryAtStep(int index) {
-               if (index == 0) {
-                       index = stepIndex;
+               int idx = index;
+               
+               if (idx == 0) {
+                       idx = stepIndex;
                }
+
                GraphTraversal<Vertex, E> clone = this.traversal.asAdmin().clone();
                GraphTraversal.Admin<Vertex, E> cloneAdmin = clone.asAdmin();
                List<Step> steps = cloneAdmin.getSteps();
 
-               for (int i = steps.size()-1; i >= index; i--) {
+               for (int i = steps.size()-1; i >= idx; i--) {
                        cloneAdmin.removeStep(i);
                }
                return new TraversalQuery<>(cloneAdmin, loader, source, this);
index 634e44e..0d89a74 100644 (file)
@@ -461,14 +461,13 @@ public class HttpEntry {
        private Introspector getObjectFromDb(List<Vertex> results, DBSerializer serializer, QueryParser query, Introspector obj, URI uri, int depth, boolean nodeOnly, String cleanUp) throws AAIException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, UnsupportedEncodingException, AAIUnknownObjectException, URISyntaxException {
         
         //nothing found
-        if (results.size() == 0) {
+        if (results.isEmpty()) {
                String msg = createNotFoundMessage(query.getResultType(), uri);
                        throw new AAIException("AAI_6114", msg);
         }
 
-        obj = serializer.dbToObject(results, obj, depth, nodeOnly, cleanUp);
+        return serializer.dbToObject(results, obj, depth, nodeOnly, cleanUp);
         
-        return obj;
        }
 
        
index dd073dc..cd48fc6 100644 (file)
@@ -1,40 +1,67 @@
-/**
+/*-
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * 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
- *
+ * 
+ *      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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
+
 package org.onap.aai.serialization.db;
 
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.common.base.CaseFormat;
-import com.thinkaurelius.titan.core.SchemaViolationException;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+
+import javax.ws.rs.core.UriBuilder;
+
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.structure.*;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.javatuples.Pair;
+import org.javatuples.Triplet;
 import org.onap.aai.db.props.AAIProperties;
 import org.onap.aai.exceptions.AAIException;
-import org.onap.aai.introspection.*;
+import org.onap.aai.introspection.Introspector;
+import org.onap.aai.introspection.IntrospectorFactory;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.LoaderFactory;
+import org.onap.aai.introspection.ModelType;
+import org.onap.aai.introspection.PropertyPredicates;
+import org.onap.aai.introspection.Version;
 import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
 import org.onap.aai.introspection.sideeffect.DataCopy;
 import org.onap.aai.introspection.sideeffect.DataLinkReader;
@@ -48,6 +75,7 @@ import org.onap.aai.query.builder.QueryBuilder;
 import org.onap.aai.schema.enums.ObjectMetadata;
 import org.onap.aai.schema.enums.PropertyMetadata;
 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
+import org.onap.aai.serialization.db.util.VersionChecker;
 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
 import org.onap.aai.serialization.tinkerpop.TreeBackedVertex;
 import org.onap.aai.util.AAIApiServerURLBase;
@@ -55,18 +83,10 @@ import org.onap.aai.util.AAIConfig;
 import org.onap.aai.util.AAIConstants;
 import org.onap.aai.workarounds.NamingExceptions;
 
-import javax.ws.rs.core.UriBuilder;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.common.base.CaseFormat;
+import com.thinkaurelius.titan.core.SchemaViolationException;
 
 public class DBSerializer {
        
@@ -109,8 +129,7 @@ public class DBSerializer {
         */
        public void touchStandardVertexProperties(Vertex v, boolean isNewVertex) {
                
-               long unixTimeNow = System.currentTimeMillis();
-               String timeNowInSec = "" + unixTimeNow;
+               String timeNowInSec = Long.toString(System.currentTimeMillis());
                if (isNewVertex) {
                        v.property(AAIProperties.SOURCE_OF_TRUTH, this.sourceOfTruth);
                        v.property(AAIProperties.CREATED_TS, timeNowInSec);
@@ -391,15 +410,20 @@ public class DBSerializer {
                                
                List<Object> relationships = (List<Object>)wrapped.getValue("relationship");
                
-               List<Pair<Vertex, Vertex>> addEdges = new ArrayList<>();
+               List<Triplet<Vertex, Vertex, String>> addEdges = new ArrayList<>();
                List<Edge> existingEdges = this.engine.getQueryEngine().findEdgesForVersion(v, wrapped.getLoader());
                
                for (Object relationship : relationships) {
                        Edge e = null;
                        Vertex cousinVertex = null;
+                       String label = null;
                        Introspector wrappedRel = IntrospectorFactory.newInstance(this.introspectionType, relationship);
                        QueryParser parser = engine.getQueryBuilder().createQueryFromRelationship(wrappedRel);
                        
+                       if (wrappedRel.hasProperty("relationship-label")) {
+                               label = wrappedRel.getValue("relationship-label");
+                       }
+                       
                        List<Vertex> results = parser.getQueryBuilder().toList();
                        if (results.isEmpty()) {
                                final AAIException ex = new AAIException("AAI_6129", "Node of type " + parser.getResultType() + ". Could not find object at: " + parser.getUri());
@@ -412,30 +436,30 @@ public class DBSerializer {
                        }
                        
                        if (cousinVertex != null) {
-                               try {
-                                       if (!edgeRules.hasEdgeRule(v, cousinVertex)) {
-                                               throw new AAIException("AAI_6120", "No EdgeRule found for passed nodeTypes: " + v.property(AAIProperties.NODE_TYPE).value().toString() + ", " 
-                                                               + cousinVertex.property(AAIProperties.NODE_TYPE).value().toString() + "."); 
-                                       }
-                                       e = this.getEdgeBetween(EdgeType.COUSIN, v, cousinVertex);
-
-                                       if (e == null) {
-                                               addEdges.add(new Pair<>(v, cousinVertex));
-                                       } else { 
-                                               existingEdges.remove(e);
-                                       }
-                               } catch (NoEdgeRuleFoundException e1) {
+                                       
+                               if (!edgeRules.hasEdgeRule(v, cousinVertex, label)) {
+                                       throw new AAIException("AAI_6120", "No EdgeRule found for passed nodeTypes: " + v.property(AAIProperties.NODE_TYPE).value().toString() + ", " 
+                                                       + cousinVertex.property(AAIProperties.NODE_TYPE).value().toString() + (label != null ? (" with label " + label):"")  +"."); 
+                               } else if (edgeRules.hasTreeEdgeRule(v, cousinVertex) && !edgeRules.hasCousinEdgeRule(v, cousinVertex, label)) {
                                        throw new AAIException("AAI_6145");
                                }
+                               
+                               e = this.getEdgeBetween(EdgeType.COUSIN, v, cousinVertex, label);
+
+                               if (e == null) {
+                                       addEdges.add(new Triplet<>(v, cousinVertex, label));
+                               } else { 
+                                       existingEdges.remove(e);
+                               }
                        }
                }
                
                for (Edge edge : existingEdges) {
                        edge.remove();
                }
-               for (Pair<Vertex, Vertex> pair : addEdges) {
+               for (Triplet<Vertex, Vertex, String> triplet : addEdges) {
                         try {
-                               edgeRules.addEdge(this.engine.asAdmin().getTraversalSource(), pair.getValue0(), pair.getValue1());
+                               edgeRules.addEdge(this.engine.asAdmin().getTraversalSource(), triplet.getValue0(), triplet.getValue1(), triplet.getValue2());
                        } catch (NoEdgeRuleFoundException e) {
                                throw new AAIException("AAI_6129", e);
                        }                       
@@ -491,7 +515,7 @@ public class DBSerializer {
                
                //QueryParser p = this.engine.getQueryBuilder().createQueryFromURI(obj.getURI());
                //List<Vertex> items = p.getQuery().toList();
-               QueryBuilder query = this.engine.getQueryBuilder(v);
+               QueryBuilder<Vertex> query = this.engine.getQueryBuilder(v);
                query.createEdgeTraversal(EdgeType.TREE, v, dependentObj);
                query.createKeyQuery(dependentObj);
                
@@ -531,14 +555,13 @@ public class DBSerializer {
                
                String parentUri = parent.<String>property(AAIProperties.AAI_URI).orElse(null);
                if (parentUri != null) {
-                       String uri;
-                               uri = obj.getURI();
+                       String uri = obj.getURI();
                        child.property(AAIProperties.AAI_URI, parentUri + uri);
                }
                processObject(obj, child, requestContext);
                
                Edge e;
-               e = this.getEdgeBetween(EdgeType.TREE, parent, child);
+               e = this.getEdgeBetween(EdgeType.TREE, parent, child, null);
                if (e == null) {
                        String canBeLinked = obj.getMetadata(ObjectMetadata.CAN_BE_LINKED);
                        if (canBeLinked != null && canBeLinked.equals("true")) {
@@ -617,9 +640,7 @@ public class DBSerializer {
                        for (Future<Object> future : futures) {
                                try {
                                        getList.add(future.get());
-                               } catch (ExecutionException e) {
-                                       throw new AAIException("AAI_4000", e);
-                               } catch (InterruptedException e) {
+                               } catch (ExecutionException | InterruptedException e) {
                                        throw new AAIException("AAI_4000", e);
                                }
                        }
@@ -726,7 +747,7 @@ public class DBSerializer {
                                                                        Introspector argumentObject = obj.newIntrospectorInstanceOfNestedProperty(property);
                                                                        
                                                                        Object result = dbToObject(argumentObject, childVertex, seen, depth, nodeOnly, cleanUp);
-                                                                       if (result != null && getList != null) {
+                                                                       if (result != null) { 
                                                                                getList.add(argumentObject.getUnderlyingObject());
                                                                        }
                                                                        
@@ -868,19 +889,28 @@ public class DBSerializer {
         */
        private Introspector createRelationshipList(Vertex v, Introspector obj, String cleanUp) throws UnsupportedEncodingException, AAIException {
                
-
                List<Vertex> cousins = this.engine.getQueryEngine().findCousinVertices(v);
 
                List<Object> relationshipObjList = obj.getValue("relationship");
                
                for (Vertex cousin : cousins) {
-               
+                       if (VersionChecker.apiVersionNeedsEdgeLabel(obj.getVersion())) {
+                               List<Edge> edges = this.getEdgesBetween(EdgeType.COUSIN, v, cousin);
+                               for (Edge e : edges) {
+                                       Introspector relationshipObj = obj.newIntrospectorInstanceOfNestedProperty("relationship");
+                                       Object result = processEdgeRelationship(relationshipObj, cousin, cleanUp, e);
+                                       if (result != null) {
+                                               relationshipObjList.add(result);
+                                       }
+                               }
+                       } else {
                                Introspector relationshipObj = obj.newIntrospectorInstanceOfNestedProperty("relationship");
-                       Object result = processEdgeRelationship(relationshipObj, cousin, cleanUp);
+                               Object result = processEdgeRelationship(relationshipObj, cousin, cleanUp, null);
                                if (result != null) {
                                        relationshipObjList.add(result);
                                }
-               
+                       }
+
                }
                
                if (relationshipObjList.isEmpty()) {
@@ -910,7 +940,7 @@ public class DBSerializer {
         * @throws AAIUnknownObjectException 
         * @throws URISyntaxException 
         */
-               private Object processEdgeRelationship(Introspector relationshipObj, Vertex cousin, String cleanUp) throws UnsupportedEncodingException, AAIUnknownObjectException {
+       private Object processEdgeRelationship(Introspector relationshipObj, Vertex cousin, String cleanUp, Edge edge) throws UnsupportedEncodingException, AAIUnknownObjectException {
 
 
                //we must look up all parents in this case because we need to compute name-properties
@@ -935,11 +965,14 @@ public class DBSerializer {
                        }
                        return null;
                }
-
-        if(list.size() > 0 && this.version.compareTo(Version.v8) >= 0){
+               if (!list.isEmpty()) {
                        this.addRelatedToProperty(result, list.get(0));
                }
-
+               
+               if (edge != null && result.hasProperty("relationship-label")) {
+                       result.setValue("relationship-label", edge.label());
+               }
+               
                return result.getUnderlyingObject();
        }
        
@@ -993,8 +1026,7 @@ public class DBSerializer {
                }
                
                uri = sb.toString();
-               URI result = UriBuilder.fromPath(uri).build();
-               return result;
+               return UriBuilder.fromPath(uri).build();
        }
        
        /**
@@ -1063,19 +1095,19 @@ public class DBSerializer {
         */
        public void setCachedURIs(List<Vertex> vertices, List<Introspector> objs) throws UnsupportedEncodingException, URISyntaxException {
                
-               String uriChain = "";
+               StringBuilder uriChain = new StringBuilder();
                for (int i = 0; i < vertices.size(); i++) {
                        String aaiUri = "";
                        Vertex v = null;
                        v = vertices.get(i);
                        aaiUri = v.<String>property(AAIProperties.AAI_URI).orElse(null);
                        if (aaiUri != null) {
-                               uriChain += aaiUri;
+                               uriChain.append(aaiUri);
                        } else {
                                URI uri = UriBuilder.fromPath(objs.get(i).getURI()).build();
                                aaiUri = uri.toString();
-                               uriChain += aaiUri;
-                               v.property(AAIProperties.AAI_URI, uriChain);
+                               uriChain.append(aaiUri);
+                               v.property(AAIProperties.AAI_URI, uriChain.toString());
                        }
                }
                
@@ -1106,7 +1138,7 @@ public class DBSerializer {
                        }
                }
                
-               if (relatedToProperties.size() > 0) {
+               if (!relatedToProperties.isEmpty()) {
                        List relatedToList = (List)relationship.getValue("related-to-property");
                        for (Introspector obj : relatedToProperties) {
                                relatedToList.add(obj.getUnderlyingObject());
@@ -1130,8 +1162,13 @@ public class DBSerializer {
                
                QueryParser parser = engine.getQueryBuilder().createQueryFromRelationship(relationship);
                
+               String label = null;
+               if (relationship.hasProperty("relationship-label")) {
+                       label = relationship.getValue("relationship-label");
+               }
+               
                List<Vertex> results = parser.getQueryBuilder().toList();
-               if (results.size() == 0) {
+               if (results.isEmpty()) {
                        AAIException e = new AAIException("AAI_6129", "Node of type " + parser.getResultType() + ". Could not find object at: " + parser.getUri());
                        e.getTemplateVars().add(parser.getResultType());
                        e.getTemplateVars().add(parser.getUri().toString());
@@ -1143,29 +1180,19 @@ public class DBSerializer {
 
                if (relatedVertex != null) {
 
-                       Edge e;
-                       try {
-                               e = this.getEdgeBetween(EdgeType.COUSIN, inputVertex, relatedVertex);
-                               if (e == null) {                                
-                                       edgeRules.addEdge(this.engine.asAdmin().getTraversalSource(), inputVertex, relatedVertex);
-
-                               } else {
-                                       //attempted to link two vertexes already linked
-                               }
-                       } catch (NoEdgeRuleFoundException e1) {
-                               throw new AAIException("AAI_6129", e1);
+                       Edge e = this.getEdgeBetween(EdgeType.COUSIN, inputVertex, relatedVertex, label);
+                       if (e == null) {                                
+                               edgeRules.addEdge(this.engine.asAdmin().getTraversalSource(), inputVertex, relatedVertex, label);
+                       } else {
+                               //attempted to link two vertexes already linked
                        }
-                       
-                       
-                       
-
                }
                
                return true;
        }
        
        /**
-        * Gets the edges between.
+        * Gets all the edges between of the type.
         *
         * @param aVertex the out vertex
         * @param bVertex the in vertex
@@ -1173,44 +1200,67 @@ public class DBSerializer {
         * @throws AAIException the AAI exception
         * @throws NoEdgeRuleFoundException 
         */
-       private List<Edge> getEdgesBetween(EdgeType type, Vertex aVertex, Vertex bVertex) throws AAIException, NoEdgeRuleFoundException {
+       private List<Edge> getEdgesBetween(EdgeType type, Vertex aVertex, Vertex bVertex) {
                
                List<Edge> result = new ArrayList<>();
                
                if (bVertex != null) {
-                               EdgeRule rule = edgeRules.getEdgeRule(type, aVertex, bVertex);
-                               GraphTraversal<Vertex, Edge> findEdgesBetween = null;
-                               findEdgesBetween = this.engine.asAdmin().getTraversalSource().V(aVertex).bothE(rule.getLabel()).filter(__.otherV().hasId(bVertex.id()));
-                               List<Edge> edges = findEdgesBetween.toList();
-                               for (Edge edge : edges) {
-                                       if (edge.label().equals(rule.getLabel())) {
-                                               result.add(edge);
-                                       }
+                       GraphTraversal<Vertex, Edge> findEdgesBetween = null;
+                       findEdgesBetween = this.engine.asAdmin().getTraversalSource().V(aVertex).bothE();
+                       if (EdgeType.TREE.equals(type)) {
+                               findEdgesBetween = findEdgesBetween.not(__.has(EdgeProperty.CONTAINS.toString(), "NONE"));
+                       } else {
+                               findEdgesBetween = findEdgesBetween.has(EdgeProperty.CONTAINS.toString(), "NONE");
+                       }
+                       findEdgesBetween = findEdgesBetween.filter(__.otherV().hasId(bVertex.id()));
+                       result = findEdgesBetween.toList();
+               }
+               
+               return result;
+       }
+       /**
+        * Gets all the edges between the vertexes with the label and type.
+        *
+        * @param aVertex the out vertex
+        * @param bVertex the in vertex
+        * @param label 
+        * @return the edges between
+        * @throws AAIException the AAI exception
+        */
+       private List<Edge> getEdgesBetween(EdgeType type, Vertex aVertex, Vertex bVertex, String label) throws AAIException {
+               
+               List<Edge> result = new ArrayList<>();
+               
+               if (bVertex != null) {
+                       EdgeRule rule = edgeRules.getEdgeRule(type, aVertex, bVertex, label);
+                       List<Edge> edges = this.getEdgesBetween(type, aVertex, bVertex);
+                       for (Edge edge : edges) {
+                               if (edge.label().equals(rule.getLabel())) {
+                                       result.add(edge);
                                }
-
+                       }               
                }
                
                return result;
        }
        
        /**
-        * Gets the edge between.
+        * Gets the edge between with the label and edge type.
         *
         * @param aVertex the out vertex
         * @param bVertex the in vertex
+        * @param label 
         * @return the edge between
         * @throws AAIException the AAI exception
         * @throws NoEdgeRuleFoundException 
         */
-       public Edge getEdgeBetween(EdgeType type, Vertex aVertex, Vertex bVertex) throws AAIException {
-               
-               
-               
+       public Edge getEdgeBetween(EdgeType type, Vertex aVertex, Vertex bVertex, String label) throws AAIException {
+       
                if (bVertex != null) {
 
-                               List<Edge> edges = this.getEdgesBetween(type, aVertex, bVertex);
+                               List<Edge> edges = this.getEdgesBetween(type, aVertex, bVertex, label);
                                
-                               if (edges.size() > 0) {
+                               if (!edges.isEmpty()) {
                                        return edges.get(0);
                                }
 
@@ -1218,6 +1268,9 @@ public class DBSerializer {
                
                return null;
        }
+       public Edge getEdgeBetween(EdgeType type, Vertex aVertex, Vertex bVertex) throws AAIException {
+               return this.getEdgeBetween(type, aVertex, bVertex, null);
+       }
        
 
        /**
@@ -1236,15 +1289,20 @@ public class DBSerializer {
                QueryParser parser = engine.getQueryBuilder().createQueryFromRelationship(relationship);
                
                List<Vertex> results = parser.getQueryBuilder().toList();
+               
+               String label = null;
+               if (relationship.hasProperty("relationship-label")) {
+                       label = relationship.getValue("relationship-label");
+               }
 
-               if (results.size() == 0) {
+               if (results.isEmpty()) {
                        return false;
                }
                
                relatedVertex = results.get(0);
                Edge edge;
                try {
-                       edge = this.getEdgeBetween(EdgeType.COUSIN, inputVertex, relatedVertex);
+                       edge = this.getEdgeBetween(EdgeType.COUSIN, inputVertex, relatedVertex, label);
                } catch (NoEdgeRuleFoundException e) {
                        throw new AAIException("AAI_6129", e);
                }
@@ -1329,7 +1387,7 @@ public class DBSerializer {
                }
                List<Object> preventDeleteVertices = this.engine.asAdmin().getReadOnlyTraversalSource().V(vertex).union(__.inE().has(EdgeProperty.PREVENT_DELETE.toString(), AAIDirection.IN.toString()).outV().values(AAIProperties.NODE_TYPE), __.outE().has(EdgeProperty.PREVENT_DELETE.toString(), AAIDirection.OUT.toString()).inV().values(AAIProperties.NODE_TYPE)).dedup().toList();
                
-               if (preventDeleteVertices.size() > 0) {
+               if (!preventDeleteVertices.isEmpty()) {
                        aaiExceptionCode = "AAI_6110";
                        errorDetail = String.format("Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types %s", preventDeleteVertices);
                        result = false;
@@ -1368,7 +1426,7 @@ public class DBSerializer {
                        ErrorLogHelper.logException(e);
                }
                // We're only doing the resource version checks for v5 and later
-               if (enabled.equals("true") && this.version.compareTo(Version.v8) > 0) {
+               if (enabled.equals("true")) {
                        if (!currentResourceVersion.equals(resourceVersion)) {
                                if (action.equals("create") && !resourceVersion.equals("")) {
                                        errorDetail = "resource-version passed for " + action + " of " + uri;
index 29d8229..ecd749c 100644 (file)
@@ -1,37 +1,30 @@
-/**
+/*-
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * 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
- *
+ * 
+ *      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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
+
 package org.onap.aai.serialization.db;
 
 public enum EdgeProperty {
-       FROM("from"),
-       TO("to"),
-       LABEL("label"),
-       DIRECTION("direction"),
-       MULTIPLICITY("multiplicity"),
        CONTAINS("contains-other-v"),
        DELETE_OTHER_V("delete-other-v"),
        SVC_INFRA("SVC-INFRA"),
        PREVENT_DELETE("prevent-delete");
-       
        private final String name;
 
        private EdgeProperty(String name) {
index 309dbff..ae9e96c 100644 (file)
@@ -1,43 +1,43 @@
-/**
+/*-
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * 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
- *
+ * 
+ *      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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
-package org.onap.aai.serialization.db;
 
-import org.apache.tinkerpop.gremlin.structure.Direction;
+package org.onap.aai.serialization.db;
 
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 
+import org.apache.tinkerpop.gremlin.structure.Direction;
+
 public class EdgeRule {
 
        private String label = "";
        private MultiplicityRule multiplicityRule = null;
        private Direction direction = null;
        private Map<EdgeProperty, String> edgeProperties = null;
+       private boolean isDefaultEdge = false;
        
        /**
         * Instantiates a new edge rule.
         */
        public EdgeRule() {
-               edgeProperties = new HashMap<>();
+               edgeProperties = new EnumMap<>(EdgeProperty.class);
        }
        
        /**
@@ -206,6 +206,18 @@ public class EdgeRule {
        private String getProp(EdgeProperty key) {
                return this.edgeProperties.get(key);
        }
+
+       public boolean isDefault() {
+               return isDefaultEdge;
+       }
+       
+       public void setIsDefault(boolean isDefault) {
+               this.isDefaultEdge = isDefault;
+       }
+       
+       public void setIsDefault(String isDefault) {
+               this.isDefaultEdge = "true".equals(isDefault);
+       }
        
        
 }
index d9dfa45..349f9e6 100644 (file)
@@ -44,6 +44,7 @@ import org.onap.aai.db.props.AAIProperties;
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Version;
 import org.onap.aai.serialization.db.exceptions.EdgeMultiplicityException;
+import org.onap.aai.serialization.db.exceptions.MultipleEdgeRuleFoundException;
 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
 
 import com.att.eelf.configuration.EELFLogger;
@@ -56,6 +57,12 @@ import com.jayway.jsonpath.JsonPath;
 
 public class EdgeRules {
        
+       private static final String LABEL = "label";
+
+       private static final String NOT_DIRECTION_NOTATION = "!${direction}";
+
+       private static final String DIRECTION_NOTATION = "${direction}";
+
        private EELFLogger logger = EELFManager.getInstance().getLogger(EdgeRules.class);
 
        private DocumentContext rulesDoc;
@@ -77,54 +84,14 @@ public class EdgeRules {
                rulesDoc = JsonPath.parse(json);
        }
 
-       private String getEdgeRuleJson(String rulesFilename) {
-               InputStream is = getClass().getResourceAsStream(rulesFilename);
-
-               Scanner scanner = new Scanner(is);
-               String json = scanner.useDelimiter("\\Z").next();
-               scanner.close();
-
-               return json;
-       }
-
        /**
         * Loads the versioned DbEdgeRules json file for later parsing.
         */
-       @SuppressWarnings("unchecked")
        private EdgeRules(Version version) {
                String json = this.getEdgeRuleJson(version);
                rulesDoc = JsonPath.parse(json);
        }
-       
-       private String getEdgeRuleJson(Version version) {
-               InputStream is = getClass().getResourceAsStream("/dbedgerules/DbEdgeRules_" + version.toString() + ".json");
 
-               Scanner scanner = new Scanner(is);
-               String json = scanner.useDelimiter("\\Z").next();
-               scanner.close();
-               
-               return json;
-       }
-       
-       private static class Helper {
-               private static final EdgeRules INSTANCE = new EdgeRules();
-               private static final Map<Version, EdgeRules> INSTANCEMAP = new ConcurrentHashMap<>();
-
-               private static EdgeRules getEdgeRulesByFilename(String rulesFilename) {
-                       return new EdgeRules(rulesFilename);
-               }
-
-               private static EdgeRules getVersionedEdgeRules(Version v) {
-                       if (Version.isLatest(v)) {
-                               return INSTANCE;
-                       }
-                       if (!INSTANCEMAP.containsKey(v)) {
-                               INSTANCEMAP.put(v, new EdgeRules(v));
-                       }
-                       return INSTANCEMAP.get(v);
-               }
-       }
-       
        /**
         * Gets the single instance of EdgeRules.
         *
@@ -154,7 +121,21 @@ public class EdgeRules {
        public static EdgeRules getInstance(String rulesFilename) {
                return Helper.getEdgeRulesByFilename(rulesFilename);
        }
+       
+       private String getEdgeRuleJson(String rulesFilename) {
+               InputStream is = getClass().getResourceAsStream(rulesFilename);
 
+               Scanner scanner = new Scanner(is);
+               String json = scanner.useDelimiter("\\Z").next();
+               scanner.close();
+
+               return json;
+       }
+       
+       private String getEdgeRuleJson(Version version) {
+               return this.getEdgeRuleJson("/dbedgerules/DbEdgeRules_" + version.toString() + ".json");
+       }
+       
        /**
         * Adds the tree edge.
         *
@@ -164,9 +145,9 @@ public class EdgeRules {
         * @throws AAIException the AAI exception
         */
        public Edge addTreeEdge(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex) throws AAIException {
-               return this.addEdge(EdgeType.TREE, traversalSource, aVertex, bVertex, false);
+               return this.addEdge(EdgeType.TREE, traversalSource, aVertex, bVertex, false, null);
        }
-       
+
        /**
         * Adds the edge.
         *
@@ -176,9 +157,13 @@ public class EdgeRules {
         * @throws AAIException the AAI exception
         */
        public Edge addEdge(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex) throws AAIException {
-               return this.addEdge(EdgeType.COUSIN, traversalSource, aVertex, bVertex, false);
+               return this.addEdge(traversalSource, aVertex, bVertex, null);
        }
-       
+
+       public Edge addEdge(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex, String label) throws AAIException {
+               return this.addEdge(EdgeType.COUSIN, traversalSource, aVertex, bVertex, false, label);
+       }
+
        /**
         * Adds the tree edge.
         *
@@ -188,9 +173,9 @@ public class EdgeRules {
         * @throws AAIException the AAI exception
         */
        public Edge addTreeEdgeIfPossible(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex) throws AAIException {
-               return this.addEdge(EdgeType.TREE, traversalSource, aVertex, bVertex, true);
+               return this.addEdge(EdgeType.TREE, traversalSource, aVertex, bVertex, true, null);
        }
-       
+
        /**
         * Adds the edge.
         *
@@ -200,9 +185,13 @@ public class EdgeRules {
         * @throws AAIException the AAI exception
         */
        public Edge addEdgeIfPossible(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex) throws AAIException {
-               return this.addEdge(EdgeType.COUSIN, traversalSource, aVertex, bVertex, true);
+               return this.addEdgeIfPossible(traversalSource, aVertex, bVertex, null);
        }
        
+       public Edge addEdgeIfPossible(GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex, String label) throws AAIException {
+               return this.addEdge(EdgeType.COUSIN, traversalSource, aVertex, bVertex, true, label);
+       }
+
        /**
         * Adds the edge.
         *
@@ -212,14 +201,14 @@ public class EdgeRules {
         * @return the edge
         * @throws AAIException the AAI exception
         */
-       private Edge addEdge(EdgeType type, GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex, boolean isBestEffort) throws AAIException {
+       private Edge addEdge(EdgeType type, GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex, boolean isBestEffort, String label) throws AAIException {
 
-               EdgeRule rule = this.getEdgeRule(type, aVertex, bVertex);
+               EdgeRule rule = this.getEdgeRule(type, aVertex, bVertex, label);
 
                Edge e = null;
-               
+
                Optional<String> message = this.validateMultiplicity(rule, traversalSource, aVertex, bVertex);
-               
+
                if (message.isPresent() && !isBestEffort) {
                        throw new EdgeMultiplicityException(message.get());
                }
@@ -229,12 +218,12 @@ public class EdgeRules {
                        } else if (rule.getDirection().equals(Direction.IN)) {
                                e = bVertex.addEdge(rule.getLabel(), aVertex);
                        }
-                       
+
                        this.addProperties(e, rule);
                }
                return e;
        }
-
+       
        /**
         * Adds the properties.
         *
@@ -242,40 +231,91 @@ public class EdgeRules {
         * @param rule the rule
         */
        public void addProperties(Edge edge, EdgeRule rule) {
-               
+
                // In DbEdgeRules.EdgeRules -- What we have as "edgeRule" is a comma-delimited set of strings.
                // The first item is the edgeLabel.
                // The second in the list is always "direction" which is always OUT for the way we've implemented it.
-               // Items starting at "firstTagIndex" and up are all assumed to be booleans that map according to 
+               // Items starting at "firstTagIndex" and up are all assumed to be booleans that map according to
                // tags as defined in EdgeInfoMap.
                // Note - if they are tagged as 'reverse', that means they get the tag name with "-REV" on it
                Map<EdgeProperty, String> propMap = rule.getEdgeProperties();
-               
+
                for (Entry<EdgeProperty, String> entry : propMap.entrySet()) {
                        edge.property(entry.getKey().toString(), entry.getValue());
                }
        }
-       
+
        /**
-        * Checks if any edge rules exist between the two given nodes, in either A|B or B|A order.
+        * Checks if any edge rules exist between the two given node types, in either A|B or B|A order.
         *
         * @param nodeA - node at one end of the edge
         * @param nodeB - node at the other end
         * @return true, if any such rules exist
         */
        public boolean hasEdgeRule(String nodeA, String nodeB) {
-               Filter aToB = filter(
-                               where("from").is(nodeA).and("to").is(nodeB)
-                               );
-               Filter bToA = filter(
-                               where("from").is(nodeB).and("to").is(nodeA)
-                               );
-               
-               List<Map<String, String>> results = readRules(aToB);
-               results.addAll(readRules(bToA));
+               return this.hasEdgeRule(nodeA, nodeB, null);
+       }
+       
+       /**
+        * Checks if any edge rules exist between the two given node types with contains-other-v !NONE, in either A|B or B|A order.
+        *
+        * @param nodeA - node at one end of the edge
+        * @param nodeB - node at the other end
+        * @return true, if any such rules exist
+        */
+       public boolean hasTreeEdgeRule(String nodeA, String nodeB) {
+               return this.hasEdgeRule(EdgeType.TREE, nodeA, nodeB, null);
+       }
 
-               return !results.isEmpty();
-               
+       /**
+        * Checks if any edge rules exist between the two given node types with contains-other-v NONE, in either A|B or B|A order.
+        *
+        * @param nodeA - node at one end of the edge
+        * @param nodeB - node at the other end
+        * @param label - edge label
+        * @return true, if any such rules exist
+        */
+       public boolean hasCousinEdgeRule(String nodeA, String nodeB, String label) {
+               return this.hasEdgeRule(EdgeType.COUSIN, nodeA, nodeB, label);
+       }
+       
+       /**
+        * Checks if any edge rules exist between the two given nodes with contains-other-v !NONE, in either A|B or B|A order.
+        *
+        * @param aVertex - node at one end of the edge
+        * @param bVertex - node at the other end
+        * @return true, if any such rules exist
+        */
+       public boolean hasTreeEdgeRule(Vertex aVertex, Vertex bVertex) {
+               String outType = aVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               String inType = bVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               return this.hasTreeEdgeRule(outType, inType);
+       }
+       
+       /**
+        * Checks if any edge rules exist between the two given nodes with contains-other-v NONE with edge label, in either A|B or B|A order.
+        *
+        * @param aVertex - node at one end of the edge
+        * @param bVertex - node at the other end
+        * @param label - edge label
+        * @return true, if any such rules exist
+        */
+       public boolean hasCousinEdgeRule(Vertex aVertex, Vertex bVertex, String label) {
+               String outType = aVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               String inType = bVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               return this.hasCousinEdgeRule(outType, inType, label);
+       }
+
+       /**
+        * Checks if any edge rules exist between the two given nodes w/ edge label, in either A|B or B|A order.
+        *
+        * @param nodeA - node at one end of the edge
+        * @param nodeB - node at the other end
+        * @param label - edge label
+        * @return true, if any such rules exist
+        */
+       public boolean hasEdgeRule(String nodeA, String nodeB, String label) {
+               return this.hasEdgeRule(null, nodeA, nodeB, label);
        }
        
        /**
@@ -286,11 +326,65 @@ public class EdgeRules {
         * @return true, if any such rules exist
         */
        public boolean hasEdgeRule(Vertex aVertex, Vertex bVertex) {
-               String outType = aVertex.<String>property("aai-node-type").orElse(null);
-               String inType = bVertex.<String>property("aai-node-type").orElse(null);
-               
-               return this.hasEdgeRule(outType, inType);
-               
+               return this.hasEdgeRule(aVertex, bVertex, null);
+
+       }
+       
+       /**
+        * Checks if any edge rules exist between the two given nodes with label, in either A|B or B|A order with edge label.
+        *
+        * @param aVertex - node at one end of the edge
+        * @param bVertex - node at the other end
+        * @param label - edge label
+        * @return true, if any such rules exist
+        */
+       public boolean hasEdgeRule(Vertex aVertex, Vertex bVertex, String label) {
+               String outType = aVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               String inType = bVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+
+               if (label == null) {
+                       return this.hasEdgeRule(outType, inType);
+               } else {
+                       return this.hasEdgeRule(outType, inType, label);
+               }
+       }
+
+       /**
+        * Checks if any edge rules exist between the two given node types, in either A|B or B|A order with edge label and edge type.
+        *
+        * @param type - type of edge EdgeType.COUSIN | EdgeType.TREE
+        * @param nodeA - node at one end of the edge
+        * @param nodeB - node at the other end
+        * @param label - edge label
+        * @return true, if any such rules exist
+        */
+       public boolean hasEdgeRule(EdgeType type, String nodeA, String nodeB, String label) {
+               Filter aToB = filter(
+                               where("from").is(nodeA)
+                                       .and("to").is(nodeB)
+                               );
+               Filter bToA = filter(
+                               where("from").is(nodeB)
+                               .and("to").is(nodeA)
+                       );
+
+               if (EdgeType.TREE.equals(type)) {
+                       aToB = aToB.and(where(EdgeProperty.CONTAINS.toString()).ne(AAIDirection.NONE.toString()));
+                       bToA = bToA.and(where(EdgeProperty.CONTAINS.toString()).ne(AAIDirection.NONE.toString()));
+               } else if (EdgeType.COUSIN.equals(type)) {
+                       aToB = aToB.and(where(EdgeProperty.CONTAINS.toString()).is(AAIDirection.NONE.toString()));
+                       bToA = bToA.and(where(EdgeProperty.CONTAINS.toString()).is(AAIDirection.NONE.toString()));
+               }
+
+               if (label != null) {
+                       aToB = aToB.and(where(LABEL).is(label));
+                       bToA = bToA.and(where(LABEL).is(label));
+               }
+
+               List<Object> results = rulesDoc.read("$.rules.[?]", aToB);
+               results.addAll(rulesDoc.read("$.rules.[?]", bToA));
+
+               return !results.isEmpty();
        }
        
        /**
@@ -298,29 +392,109 @@ public class EdgeRules {
         * The rules will be phrased in terms of out|in, though this will
         * also find rules defined as in|out (it will flip the direction in
         * the EdgeRule object returned accordingly to match out|in).
-        * 
-        * @param outType 
+        *
+        * @param outType
+        * @param inType
+        * @return Map<String edgeLabel, EdgeRule rule> where edgeLabel is the label name
+        * @throws AAIException
+        */
+       public Map<String, EdgeRule> getEdgeRules(String outType, String inType) {
+               return this.getEdgeRules(outType, inType, null);
+       }
+       
+       /**
+        * Gets all the edge rules that exist between the given node types with given label.
+        * The rules will be phrased in terms of out|in, though this will
+        * also find rules defined as in|out (it will flip the direction in
+        * the EdgeRule object returned accordingly to match out|in).
+        *
+        * @param outType
         * @param inType
+        * @param label
         * @return Map<String edgeLabel, EdgeRule rule> where edgeLabel is the label name
         * @throws AAIException
         */
-       public Map<String, EdgeRule> getEdgeRules(String outType, String inType) throws AAIException {
-               Map<String, EdgeRule> result = new HashMap<>();
-               EdgeRule rule = null;
+       public Map<String, EdgeRule> getEdgeRules(String outType, String inType, String label) {
+               final Map<String, EdgeRule> result = new HashMap<>();
+
                for (EdgeType type : EdgeType.values()) {
-                       try {
-                               rule = this.getEdgeRule(type, outType, inType);
-                               result.put(rule.getLabel(), rule);
-                       } catch (NoEdgeRuleFoundException e) {
-                               continue;
-                       }
+                       result.putAll(this.getEdgeRules(type, outType, inType, label));
                }
-               
+
                return result;
        }
-       
 
+       /**
+        * Looks up edge rules for the given node types and the labels specified
+        * @param type
+        * @param outType
+        * @param inType
+        * @param labels
+        * @return
+        * @throws NoEdgeRuleFoundException
+        * @throws MultipleEdgeRuleFoundException
+        */
+       public Map<String, EdgeRule> getEdgeRulesWithLabels(EdgeType type, String outType, String inType, List<String> labels) throws NoEdgeRuleFoundException, MultipleEdgeRuleFoundException {
+               final Map<String, EdgeRule> result = new HashMap<>();
+
+               if (labels == null || labels.isEmpty()) {
+                       throw new NoEdgeRuleFoundException("No labels specified");
+               }
+               for (String label : labels) {
+                       EdgeRule er = this.getEdgeRule(type, outType, inType, label);
+                       result.put(er.getLabel(), er);
+               }
+
+               return result;
+       }
 
+       /**
+        * Gets all the edge rules of that edge type that exist between the given node types with given label.
+        * The rules will be phrased in terms of out|in, though this will
+        * also find rules defined as in|out (it will flip the direction in
+        * the EdgeRule object returned accordingly to match out|in).
+        *
+        * @param type
+        * @param outType
+        * @param inType
+        * @param label
+        * @return
+        * @throws AAIException
+        */
+       public Map<String, EdgeRule> getEdgeRules(EdgeType type, String outType, String inType, String label) {
+               final Map<String, EdgeRule> result = new HashMap<>();
+
+               this.getEdgeRulesFromJson(type, outType, inType, label).forEach(edgeRuleJson -> {
+                               EdgeRule edgeRule = this.buildRule(edgeRuleJson);
+                               result.put(edgeRule.getLabel(), edgeRule);
+                       });
+               this.getEdgeRulesFromJson(type, inType, outType, label).forEach(erj -> {
+                       EdgeRule edgeRule = this.flipDirection(this.buildRule(erj));
+                       if (!result.containsKey(edgeRule.getLabel())) {
+                               result.put(edgeRule.getLabel(), edgeRule);
+                       }
+               });
+
+
+               return result;
+       }
+       
+       /**
+        * Gets all the edge rules of that edge type that exist between the given node types.
+        * The rules will be phrased in terms of out|in, though this will
+        * also find rules defined as in|out (it will flip the direction in
+        * the EdgeRule object returned accordingly to match out|in).
+        *
+        * @param type
+        * @param outType
+        * @param inType
+        * @return
+        * @throws AAIException
+        */
+       public Map<String, EdgeRule> getEdgeRules(EdgeType type, String outType, String inType) {
+               return this.getEdgeRules(type, outType, inType, null);
+       }
+       
        /**
         * Gets the edge rule of the given type that exists between A and B.
         * Will check B|A as well, and flips the direction accordingly if that succeeds
@@ -333,69 +507,155 @@ public class EdgeRules {
         * @throws AAIException if no such edge exists
         */
        public EdgeRule getEdgeRule(EdgeType type, String nodeA, String nodeB) throws AAIException {
-               //try A to B
-               List<Map<String, String>> aToBEdges = readRules(buildFilter(type, nodeA, nodeB));
-               if (!aToBEdges.isEmpty()) {
-                       //lazily stop iterating if we find a match
-                       //should there be a mismatch between type and isParent,
-                       //the caller will receive something.
-                       //this operates on the assumption that there are at most two rules
-                       //for a given vertex pair
-                       verifyRule(aToBEdges.get(0));
-                       return buildRule(aToBEdges.get(0));
-               }
-               
-               //we get here if there was nothing for A to B, so let's try B to A
-               List<Map<String, String>> bToAEdges = readRules(buildFilter(type, nodeB, nodeA));
-               if (!bToAEdges.isEmpty()) {
-                       verifyRule(bToAEdges.get(0));
-                       return flipDirection(buildRule(bToAEdges.get(0))); //bc we need to return as A|B, so flip the direction to match
+               return this.getEdgeRule(type, nodeA, nodeB, null);
+       }
+
+       /**
+        * Gets the edge rule of the given type that exists between A and B with edge label.
+        * Will check B|A as well, and flips the direction accordingly if that succeeds
+        * to match the expected A|B return.
+        *
+        * @param type - the type of edge you're looking for
+        * @param nodeA - first node type
+        * @param nodeB - second node type
+        * @param label - edge label
+        * @return EdgeRule describing the rule in terms of A|B, if there is any such rule
+        * @throws MultipleEdgeRuleFoundException
+        * @throws AAIException if no such edge exists
+        */
+       public EdgeRule getEdgeRule(EdgeType type, String nodeA, String nodeB, String label) throws NoEdgeRuleFoundException, MultipleEdgeRuleFoundException {
+
+               final StringBuilder errorMsg = new StringBuilder();
+               errorMsg.append(type.toString())
+                       .append(" edge rule between ")
+                       .append(nodeA).append(" and ").append(nodeB);
+               if (label != null) {
+                       errorMsg.append(" with label ").append(label);
                }
-               
+
+               EdgeRule edgeRule;
+               Map<String, EdgeRule> edgeRules = this.getEdgeRules(type, nodeA, nodeB, label);
+
                //found none
-               throw new NoEdgeRuleFoundException("no " + type.toString() + " edge between " + nodeA + " and " + nodeB);
+               if (edgeRules.isEmpty()) {
+
+                       throw new NoEdgeRuleFoundException("no " + errorMsg);
+
+               } else if (edgeRules.size() == 1) {
+
+                       edgeRule = edgeRules.values().iterator().next();
+
+               } else {
+
+                       Optional<EdgeRule> optionalEdgeRule = Optional.empty();
+
+                       try {
+                               optionalEdgeRule = this.getDefaultEdgeRule(edgeRules);
+                       } catch (MultipleEdgeRuleFoundException e) {
+                               throw new MultipleEdgeRuleFoundException("multiple default edge rule exists " + errorMsg);
+                       }
+
+                       edgeRule = optionalEdgeRule.orElseThrow(() -> new MultipleEdgeRuleFoundException("multiple edge rule exists with no default " + errorMsg));
+
+               }
+
+               return edgeRule;
        }
-       
+
+       private Optional<EdgeRule> getDefaultEdgeRule(Map<String, EdgeRule> edgeRules) throws MultipleEdgeRuleFoundException {
+
+               EdgeRule edgeRule = null;
+               int numDefaults = 0;
+
+               for (Map.Entry<String, EdgeRule> entry : edgeRules.entrySet()) {
+                       if (entry.getValue().isDefault()) {
+                               edgeRule  = entry.getValue();
+                               numDefaults++;
+                       }
+               }
+
+               if (numDefaults > 1) {
+                       throw new MultipleEdgeRuleFoundException("");
+               }
+
+               if (edgeRule == null) {
+                       return Optional.empty();
+               } else {
+                       return Optional.of(edgeRule);
+               }
+       }
+
+       /**
+        * Gets the rules from the edge rules Json
+        *
+        * @param type - type
+        * @param nodeA - start node
+        * @param nodeB - end node
+        * @param label - edge label to filter on
+        * @return
+        */
+       private List<Map<String, String>> getEdgeRulesFromJson(EdgeType type, String nodeA, String nodeB, String label) {
+               if (label == null) {
+                       return rulesDoc.read("$.rules.[?]", buildFilter(type, nodeA, nodeB));
+               } else {
+                       return rulesDoc.read("$.rules.[?]", buildFilter(type, nodeA, nodeB, label));
+               }
+       }
+
        /**
         * Builds a JsonPath filter to search for an edge from nodeA to nodeB with the given edge type (cousin or parent/child)
-        * 
+        *
         * @param type
         * @param nodeA - start node
         * @param nodeB - end node
         * @return
         */
        private Filter buildFilter(EdgeType type, String nodeA, String nodeB) {
+               return this.buildFilter(type, nodeA, nodeB, null);
+       }
+       
+       private Filter buildFilter(EdgeType type, String nodeA, String nodeB, String label) {
                if (EdgeType.COUSIN.equals(type)) {
-                       return filter(
-                                       where("from").is(nodeA).and("to").is(nodeB).and(EdgeProperty.CONTAINS.toString()).is(AAIDirection.NONE.toString())
+                       Filter f = filter(
+                                       where("from").is(nodeA)
+                                               .and("to").is(nodeB)
+                                               .and(EdgeProperty.CONTAINS.toString()).is(AAIDirection.NONE.toString())
                                        );
+                       if (label != null) {
+                               f = f.and(where(LABEL).is(label));
+                       }
+
+                       return f;
                } else {
                        return filter(
-                                       where("from").is(nodeA).and("to").is(nodeB).and(EdgeProperty.CONTAINS.toString()).is("${direction}")).or(
-                                                       where("from").is(nodeA).and("to").is(nodeB).and(EdgeProperty.CONTAINS.toString()).is("!${direction}")   
+                                       where("from").is(nodeA).and("to").is(nodeB).and(EdgeProperty.CONTAINS.toString()).is(DIRECTION_NOTATION)).or(
+                                                       where("from").is(nodeA).and("to").is(nodeB).and(EdgeProperty.CONTAINS.toString()).is(NOT_DIRECTION_NOTATION)
                                        );
                }
        }
-       
+
        /**
-        * Puts the give edge rule information into an EdgeRule object. 
-        * 
-        * @param edge - the edge information returned from JsonPath
+        * Puts the give edge rule information into an EdgeRule object.
+        *
+        * @param map edge rule property map
         * @return EdgeRule containing that information
         */
        private EdgeRule buildRule(Map<String, String> map) {
                Map<String, String> edge = new EdgePropertyMap<>();
                edge.putAll(map);
-               
+
                EdgeRule rule = new EdgeRule();
-               rule.setLabel(edge.get("label"));
+               rule.setLabel(edge.get(LABEL));
                rule.setDirection(edge.get("direction"));
                rule.setMultiplicityRule(edge.get("multiplicity"));
                rule.setContains(edge.get(EdgeProperty.CONTAINS.toString()));
                rule.setDeleteOtherV(edge.get(EdgeProperty.DELETE_OTHER_V.toString()));
                rule.setServiceInfrastructure(edge.get(EdgeProperty.SVC_INFRA.toString()));
                rule.setPreventDelete(edge.get(EdgeProperty.PREVENT_DELETE.toString()));
-               
+               if (edge.containsKey("default")) {
+                       rule.setIsDefault(edge.get("default"));
+               }
+
                return rule;
        }
        
@@ -403,7 +663,7 @@ public class EdgeRules {
         * If getEdgeRule gets a request for A|B, and it finds something as B|A, the caller still expects
         * the returned EdgeRule to reflect A|B directionality. This helper method flips B|A direction to
         * match this expectation.
-        * 
+        *
         * @param rule whose direction needs flipped
         * @return the updated rule
         */
@@ -415,7 +675,7 @@ public class EdgeRules {
                        rule.setDirection(Direction.IN);
                        return rule;
                } else { //direction is BOTH, flipping both is still both
-                       return rule; 
+                       return rule;
                }
        }
        
@@ -431,14 +691,30 @@ public class EdgeRules {
         * @throws AAIException if no such edge exists
         */
        public EdgeRule getEdgeRule(EdgeType type, Vertex aVertex, Vertex bVertex) throws AAIException {
+               return this.getEdgeRule(type, aVertex, bVertex, null);
+       }
+       
+       /**
+        * Gets the edge rule of the given type that exists between A and B with label.
+        * Will check B|A as well, and flips the direction accordingly if that succeeds
+        * to match the expected A|B return.
+        *
+        * @param type - the type of edge you're looking for
+        * @param aVertex - first node type
+        * @param bVertex - second node type
+        * @param label - edge label
+        * @return EdgeRule describing the rule in terms of A|B, if there is any such rule
+        * @throws AAIException if no such edge exists
+        */
+       public EdgeRule getEdgeRule(EdgeType type, Vertex aVertex, Vertex bVertex, String label) throws AAIException {
                String outType = aVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
                String inType = bVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
-               
-               return this.getEdgeRule(type, outType, inType);
 
-               
+               return this.getEdgeRule(type, outType, inType, label);
+
+
        }
-       
+
        /**
         * Validate multiplicity.
         *
@@ -450,44 +726,46 @@ public class EdgeRules {
         */
        private Optional<String> validateMultiplicity(EdgeRule rule, GraphTraversalSource traversalSource, Vertex aVertex, Vertex bVertex) {
 
+               Vertex a = aVertex;
+               Vertex b = bVertex;
+
                if (rule.getDirection().equals(Direction.OUT)) {
-                       
+                       a = aVertex;
+                       b = bVertex;
                } else if (rule.getDirection().equals(Direction.IN)) {
-                       Vertex tempV = bVertex;
-                       bVertex = aVertex;
-                       aVertex = tempV;
+                       a = bVertex;
+                       b = aVertex;
                }
-                               
-               String aVertexType = aVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
-               String bVertexType =  bVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+
+               String aVertexType = a.<String>property(AAIProperties.NODE_TYPE).orElse(null);
+               String bVertexType =  b.<String>property(AAIProperties.NODE_TYPE).orElse(null);
                String label = rule.getLabel();
                MultiplicityRule multiplicityRule = rule.getMultiplicityRule();
-               List<Edge> outEdges = traversalSource.V(aVertex).outE(label).where(__.inV().has(AAIProperties.NODE_TYPE, bVertexType)).toList();
-               List<Edge> inEdges = traversalSource.V(bVertex).inE(label).where(__.outV().has(AAIProperties.NODE_TYPE, aVertexType)).toList();
+               List<Edge> outEdges = traversalSource.V(a).outE(label).where(__.inV().has(AAIProperties.NODE_TYPE, bVertexType)).toList();
+               List<Edge> inEdges = traversalSource.V(b).inE(label).where(__.outV().has(AAIProperties.NODE_TYPE, aVertexType)).toList();
                String detail = "";
+               final String msg = "multiplicity rule violated: only one edge can exist with label: ";
                if (multiplicityRule.equals(MultiplicityRule.ONE2ONE)) {
-                       if (inEdges.size() >= 1 || outEdges.size() >= 1 ) {
-                               detail = "multiplicity rule violated: only one edge can exist with label: " + label + " between " + aVertexType + " and " + bVertexType;
+                       if (!inEdges.isEmpty() || !outEdges.isEmpty() ) {
+                               detail = msg + label + " between " + aVertexType + " and " + bVertexType;
                        }
                } else if (multiplicityRule.equals(MultiplicityRule.ONE2MANY)) {
-                       if (inEdges.size() >= 1) {
-                               detail = "multiplicity rule violated: only one edge can exist with label: " + label + " between " + aVertexType + " and " + bVertexType;
+                       if (!inEdges.isEmpty()) {
+                               detail = msg + label + " between " + aVertexType + " and " + bVertexType;
                        }
                } else if (multiplicityRule.equals(MultiplicityRule.MANY2ONE)) {
-                       if (outEdges.size() >= 1) {
-                               detail = "multiplicity rule violated: only one edge can exist with label: " + label + " between " + aVertexType + " and " + bVertexType;
+                       if (!outEdges.isEmpty()) {
+                               detail = msg + label + " between " + aVertexType + " and " + bVertexType;
                        }
-               } else {
-                       
                }
-               
+
                if (!"".equals(detail)) {
                        return Optional.of(detail);
                } else  {
                        return Optional.empty();
                }
-               
-                               
+
+
        }
        
        /**
@@ -513,7 +791,7 @@ public class EdgeRules {
                        }
                }
        }
-
+       
        /**
         * Reads all the edge rules from the loaded json file.
         *
@@ -547,22 +825,22 @@ public class EdgeRules {
 
        /**
         * Gets all the edge rules we define.
-        * 
+        *
         * @return Multimap<String "from|to", EdgeRule rule>
         */
        public Multimap<String, EdgeRule> getAllRules() {
                Multimap<String, EdgeRule> result = ArrayListMultimap.create();
-               
+
                List<Map<String, String>> rules = readRules();
                for (Map<String, String> rule : rules) {
                        EdgeRule er = buildRule(rule);
                        String name = rule.get("from") + "|" + rule.get("to");
                        result.put(name, er);
                }
-               
+
                return result;
        }
-       
+
        /**
         * Gets all edge rules that define a child relationship from
         * the given node type.
@@ -571,19 +849,40 @@ public class EdgeRules {
         * @return
         */
        public Set<EdgeRule> getChildren(String nodeType) {
-               
+
                final Filter filter = filter(
-                               where("from").is(nodeType).and(EdgeProperty.CONTAINS.toString()).is("${direction}")
-                               ).or(where("to").is(nodeType).and(EdgeProperty.CONTAINS.toString()).is("!${direction}"));
-               
+                               where("from").is(nodeType).and(EdgeProperty.CONTAINS.toString()).is(DIRECTION_NOTATION)
+                               ).or(where("to").is(nodeType).and(EdgeProperty.CONTAINS.toString()).is(NOT_DIRECTION_NOTATION));
+
                final List<Map<String, String>> rules = readRules(filter);
                final Set<EdgeRule> result = new HashSet<>();
                rules.forEach(item -> {
                        verifyRule(item);
                        result.add(buildRule(item));
                });
-       
+
                return result;
-               
+
+       }
+
+       private static class Helper {
+               private static final EdgeRules INSTANCE = new EdgeRules();
+               private static final Map<Version, EdgeRules> INSTANCEMAP = new ConcurrentHashMap<>();
+
+               private Helper() {}
+
+               private static EdgeRules getEdgeRulesByFilename(String rulesFilename) {
+                       return new EdgeRules(rulesFilename);
+               }
+
+               private static EdgeRules getVersionedEdgeRules(Version v) {
+                       if (Version.isLatest(v)) {
+                               return INSTANCE;
+                       }
+                       if (!INSTANCEMAP.containsKey(v)) {
+                               INSTANCEMAP.put(v, new EdgeRules(v));
+                       }
+                       return INSTANCEMAP.get(v);
+               }
        }
 }
diff --git a/aai-core/src/main/java/org/onap/aai/serialization/db/exceptions/MultipleEdgeRuleFoundException.java b/aai-core/src/main/java/org/onap/aai/serialization/db/exceptions/MultipleEdgeRuleFoundException.java
new file mode 100644 (file)
index 0000000..bb4ba4d
--- /dev/null
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.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.onap.aai.serialization.db.exceptions;
+
+import org.onap.aai.exceptions.AAIException;
+
+public class MultipleEdgeRuleFoundException extends AAIException {
+
+       private static final long serialVersionUID = -906843868234976763L;
+       
+       public MultipleEdgeRuleFoundException(String message) {
+               super("AAI_6107", message);
+       }
+
+       public MultipleEdgeRuleFoundException(Throwable cause) {
+               super("AAI_6107",cause);
+       }
+
+       public MultipleEdgeRuleFoundException(String message, Throwable cause) {
+               super("AAI_6107", cause, message);
+       }
+}
index 247379c..b66f014 100644 (file)
@@ -28,14 +28,14 @@ public class NoEdgeRuleFoundException extends AAIException {
        private static final long serialVersionUID = -906843868234976763L;
        
        public NoEdgeRuleFoundException(String message) {
-               super("AAI_6129", message);
+               super("AAI_6107", message);
        }
 
        public NoEdgeRuleFoundException(Throwable cause) {
-               super("AAI_6129",cause);
+               super("AAI_6107",cause);
        }
 
        public NoEdgeRuleFoundException(String message, Throwable cause) {
-               super("AAI_6129", cause, message);
+               super("AAI_6107", cause, message);
        }
 }
diff --git a/aai-core/src/main/java/org/onap/aai/serialization/db/util/VersionChecker.java b/aai-core/src/main/java/org/onap/aai/serialization/db/util/VersionChecker.java
new file mode 100644 (file)
index 0000000..04c57ed
--- /dev/null
@@ -0,0 +1,39 @@
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * org.onap.aai\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ */\r
+package org.onap.aai.serialization.db.util;\r
+\r
+import org.onap.aai.introspection.Version;\r
+\r
+public class VersionChecker {\r
+       \r
+       private VersionChecker() {}\r
+       \r
+       /**\r
+        * true if Version v is gt v12\r
+        * \r
+        * @param v - Version to be checked\r
+        * @return\r
+        */\r
+       public static boolean apiVersionNeedsEdgeLabel(Version v) {\r
+               return v.compareTo(Version.v12) >= 0 ;\r
+       }\r
+}\r
index 7aaf303..3477a74 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.onap.aai.db.props.AAIProperties;
@@ -101,23 +102,35 @@ public class RawFormat implements FormatMapper {
 
                return json;
        }
+       
        protected JsonArray createRelationshipObject(Vertex v) throws AAIFormatVertexException {
                JsonArray jarray = new JsonArray();
-               Iterator<Vertex> iter = v.vertices(Direction.BOTH);
-
-               while (iter.hasNext()) {
-                       Vertex related = iter.next();
+               Iterator<Edge> inIter = v.edges(Direction.IN);
+               Iterator<Edge> outIter = v.edges(Direction.OUT);
 
-                       JsonObject json = new JsonObject();
-                       json.addProperty("id", related.id().toString());
-                       json.addProperty("node-type", related.<String>value(AAIProperties.NODE_TYPE));
-                       json.addProperty("url", this.urlBuilder.pathed(related));
-                       jarray.add(json);
+               while (inIter.hasNext()) {
+                       Edge e = inIter.next();
+                       jarray.add(this.getRelatedObject(e.label(), e.outVertex()));
+               }
+               
+               while (outIter.hasNext()) {
+                       Edge e = outIter.next();
+                       jarray.add(this.getRelatedObject(e.label(), e.inVertex()));
                }
 
                return jarray;
        }
        
+       private JsonObject getRelatedObject(String label, Vertex related) throws AAIFormatVertexException {
+               JsonObject json = new JsonObject();
+               json.addProperty("id", related.id().toString());
+               json.addProperty("relationship-label", label);
+               json.addProperty("node-type", related.<String>value(AAIProperties.NODE_TYPE));
+               json.addProperty("url", this.urlBuilder.pathed(related));
+               
+               return json;
+       }
+       
        public static class Builder implements NodesOnly<Builder>, Depth<Builder> {
                
                protected final Loader loader;
diff --git a/aai-core/src/main/java/org/onap/aai/serialization/queryformats/exceptions/AAIFormatQueryResultFormatNotSupported.java b/aai-core/src/main/java/org/onap/aai/serialization/queryformats/exceptions/AAIFormatQueryResultFormatNotSupported.java
new file mode 100644 (file)
index 0000000..726116a
--- /dev/null
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.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.onap.aai.serialization.queryformats.exceptions;
+
+public class AAIFormatQueryResultFormatNotSupported extends Exception {
+
+       private static final long serialVersionUID = -5814240842844624097L;
+
+       public AAIFormatQueryResultFormatNotSupported() {}
+
+       public AAIFormatQueryResultFormatNotSupported(String message) {
+               super(message);
+       }
+
+       public AAIFormatQueryResultFormatNotSupported(Throwable cause) {
+               super(cause);
+       }
+
+       public AAIFormatQueryResultFormatNotSupported(String message, Throwable cause) {
+               super(message, cause);
+       }
+}
index 1f41e2d..e7a2e48 100644 (file)
-{"rules":
-[
 {
-       "from": "ipsec-configuration",
-       "to": "vig-server",
-       "label": "hasVigServer",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "multicast-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-constraint",
-       "to": "constrained-element-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vf-module",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "p-interface",
-       "label": "usesPInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "virtual-data-center",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "vpn-binding",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "vserver",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vserver",
-       "to": "flavor",
-       "label": "hasFlavor",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "vlan",
-       "label": "hasVlan",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vnfc",
-       "label": "hosts",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "instance-group",
-       "to": "model",
-       "label": "targets",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "volume-group",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "pnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "ctag-assignment",
-       "label": "hasCtagAssignment",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "service-instance",
-       "label": "hasServiceInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "service-instance",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "flavor",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "pnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "generic-vnf",
-       "label": "hasVNF",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vf-module",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "complex",
-       "to": "ctag-pool",
-       "label": "hasCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "constrained-element-set",
-       "to": "element-choice-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "physical-link",
-       "label": "usesPhysicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-ver",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "image",
-       "label": "hasImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "volume-group",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "cloud-region",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "customer",
-       "to": "service-subscription",
-       "label": "subscribesTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "segmentation-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "related-lookup",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "newvce",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l3-network",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "lag-interface",
-       "label": "hasLAGinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "model",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vf-module",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "pserver",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "volume",
-       "label": "hasVolume",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "route-table-reference",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "constrained-element-set",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "dvs-switch",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "availability-zone",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vlan",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "zone",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair",
-       "to": "class-of-service",
-       "label": "hasClassOfService",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "element-choice-set",
-       "to": "model-element",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "ctag-pool",
-       "to": "availability-zone",
-       "label": "supportsAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "port-group",
-       "label": "hasPortGroup",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnf-image",
-       "label": "usesVnfImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair-set",
-       "to": "routing-instance",
-       "label": "hasRoutingInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "generic-vnf",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vce",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "pserver",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "oam-network",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "dvs-switch",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "group-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "logical-link",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "named-query-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "connector",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "cloud-region",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "generic-vnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "sriov-vf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "pserver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "snapshot",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "image",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "model-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "cvlan-tag",
-       "label": "hasIPAGFacingVLAN",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "lag-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "snapshot",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "property-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-subscription",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "service-subscription",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "vlan",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "subnet",
-       "label": "hasSubnet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "tenant",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "complex",
-       "label": "groupsResourcesIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "lag-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "named-query-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "ctag-assignment",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ipsec-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "site-pair-set",
-       "label": "hasSitePairSet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "model-ver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "network-profile",
-       "label": "hasNetworkProfile",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "port-group",
-       "to": "cvlan-tag",
-       "label": "hasCTag",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "image",
-       "to": "metadatum",
-       "label": "hasMetaDatum",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license-key-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "vpn-binding",
-       "label": "usesVpnBinding",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "complex",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "complex",
-       "label": "definedFor",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "routing-instance",
-       "to": "site-pair",
-       "label": "hasSitePair",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpn-binding",
-       "to": "route-target",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "tunnel-xconnect",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
+       "rules": [
+               {
+                       "from": "ipsec-configuration",
+                       "to": "vig-server",
+                       "label": "hasVigServer",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "multicast-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-constraint",
+                       "to": "constrained-element-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vf-module",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "p-interface",
+                       "label": "usesPInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "virtual-data-center",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "vpn-binding",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "vserver",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "flavor",
+                       "label": "hasFlavor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "vlan",
+                       "label": "hasVlan",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vnfc",
+                       "label": "hosts",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "instance-group",
+                       "to": "model",
+                       "label": "targets",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "volume-group",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "pnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "ctag-assignment",
+                       "label": "hasCtagAssignment",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "service-instance",
+                       "label": "hasServiceInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "service-instance",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "flavor",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "generic-vnf",
+                       "label": "hasVNF",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vf-module",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "ctag-pool",
+                       "label": "hasCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "constrained-element-set",
+                       "to": "element-choice-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "physical-link",
+                       "label": "usesPhysicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-ver",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "image",
+                       "label": "hasImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "cloud-region",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "customer",
+                       "to": "service-subscription",
+                       "label": "subscribesTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "segmentation-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "related-lookup",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "newvce",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l3-network",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "lag-interface",
+                       "label": "hasLAGinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "model",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "volume",
+                       "label": "hasVolume",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "route-table-reference",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "constrained-element-set",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "dvs-switch",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "availability-zone",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vlan",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "zone",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair",
+                       "to": "class-of-service",
+                       "label": "hasClassOfService",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "element-choice-set",
+                       "to": "model-element",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "ctag-pool",
+                       "to": "availability-zone",
+                       "label": "supportsAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "port-group",
+                       "label": "hasPortGroup",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnf-image",
+                       "label": "usesVnfImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair-set",
+                       "to": "routing-instance",
+                       "label": "hasRoutingInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "generic-vnf",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pserver",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "oam-network",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "dvs-switch",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "group-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "logical-link",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "named-query-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "connector",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "cloud-region",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "generic-vnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "sriov-vf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "pserver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "snapshot",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "image",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "model-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "cvlan-tag",
+                       "label": "hasIPAGFacingVLAN",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "lag-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "snapshot",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "property-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-subscription",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "service-subscription",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "vlan",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "subnet",
+                       "label": "hasSubnet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "tenant",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "complex",
+                       "label": "groupsResourcesIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "named-query-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "ctag-assignment",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ipsec-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "site-pair-set",
+                       "label": "hasSitePairSet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "model-ver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "network-profile",
+                       "label": "hasNetworkProfile",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "port-group",
+                       "to": "cvlan-tag",
+                       "label": "hasCTag",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "image",
+                       "to": "metadatum",
+                       "label": "hasMetaDatum",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license-key-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "vpn-binding",
+                       "label": "usesVpnBinding",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "complex",
+                       "label": "definedFor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "routing-instance",
+                       "to": "site-pair",
+                       "label": "hasSitePair",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpn-binding",
+                       "to": "route-target",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "tunnel-xconnect",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
 }
-]
-}
\ No newline at end of file
index 06eb558..e369390 100644 (file)
@@ -1,105 +1,6 @@
-{"rules":
-[
-{
-       "from": "vlan",
-       "to": "multicast-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l-interface",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vf-module",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "vpn-binding",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "flavor",
-       "label": "hasFlavor",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vnfc",
-       "label": "hosts",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
 {
+       "rules": [
+               {
                        "from": "esr-ems",
                        "to": "esr-system-info",
                        "label": "has",
                        "prevent-delete": "NONE",
                        "default": "true"
                },
-{
-       "from": "cloud-region",
-       "to": "volume-group",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vce",
-       "to": "service-instance",
-       "label": "hasServiceInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "service-instance",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "flavor",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vip-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "pnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "generic-vnf",
-       "label": "hasVNF",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv4-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "pnf",
-       "label": "hostedOn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "physical-link",
-       "label": "usesPhysicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-ver",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "oam-network",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "segmentation-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "metadatum",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "related-lookup",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv6-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "lag-interface",
-       "label": "hasLAGinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "model",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vf-module",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "availability-zone",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "vip-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "route-table-reference",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "constrained-element-set",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "dvs-switch",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vlan",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "zone",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "ctag-pool",
-       "to": "availability-zone",
-       "label": "supportsAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "owning-entity",
-       "to": "service-instance",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "port-group",
-       "label": "hasPortGroup",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair-set",
-       "to": "routing-instance",
-       "label": "hasRoutingInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "generic-vnf",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vce",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "pserver",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "oam-network",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "dvs-switch",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "subnet",
-       "to": "host-route",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "generic-vnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "sriov-vf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "pserver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vnfc",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "cvlan-tag",
-       "label": "hasIPAGFacingVLAN",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "line-of-business",
-       "to": "generic-vnf",
-       "label": "realizedBy",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "subnet",
-       "label": "hasSubnet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "tenant",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "complex",
-       "label": "groupsResourcesIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vpn-binding",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "project",
-       "to": "service-instance",
-       "label": "created",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "platform",
-       "to": "generic-vnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "port-group",
-       "to": "cvlan-tag",
-       "label": "hasCTag",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "image",
-       "to": "metadatum",
-       "label": "hasMetaDatum",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "vip-ipv6-address-list",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "complex",
-       "label": "definedFor",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "routing-instance",
-       "to": "site-pair",
-       "label": "hasSitePair",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpn-binding",
-       "to": "route-target",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "tunnel-xconnect",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "ipsec-configuration",
-       "to": "vig-server",
-       "label": "hasVigServer",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-constraint",
-       "to": "constrained-element-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "p-interface",
-       "label": "usesPInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "virtual-data-center",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "vserver",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "vlan",
-       "label": "hasVlan",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "instance-group",
-       "to": "model",
-       "label": "targets",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "zone",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "logical-link",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "logical-link",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "pnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "ctag-assignment",
-       "label": "hasCtagAssignment",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vf-module",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "complex",
-       "to": "ctag-pool",
-       "label": "hasCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "constrained-element-set",
-       "to": "element-choice-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "image",
-       "label": "hasImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "cloud-region",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "sriov-vf",
-       "to": "sriov-pf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "customer",
-       "to": "service-subscription",
-       "label": "subscribesTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "newvce",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "allotted-resource",
-       "label": "bindsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l3-network",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "volume",
-       "label": "hasVolume",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "vip-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "availability-zone",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "site-pair",
-       "to": "class-of-service",
-       "label": "hasClassOfService",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "instance-group",
-       "label": "memberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "element-choice-set",
-       "to": "model-element",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnf-image",
-       "label": "usesVnfImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "vip-ipv4-address-list",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "sriov-pf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "group-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "logical-link",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "named-query-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "connector",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "cloud-region",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "snapshot",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "image",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "model-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "lag-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "snapshot",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "property-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-subscription",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "service-subscription",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "vlan",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "named-query-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "ctag-assignment",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ipsec-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "site-pair-set",
-       "label": "hasSitePairSet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "model-ver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "network-profile",
-       "label": "hasNetworkProfile",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "configuration",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "configuration",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license-key-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "vpn-binding",
-       "label": "usesVpnBinding",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "complex",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
+               {
+                       "from": "vlan",
+                       "to": "multicast-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l-interface",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vf-module",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "vpn-binding",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "flavor",
+                       "label": "hasFlavor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vnfc",
+                       "label": "hosts",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "volume-group",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "service-instance",
+                       "label": "hasServiceInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "service-instance",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "flavor",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "generic-vnf",
+                       "label": "hasVNF",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv4-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pnf",
+                       "label": "hostedOn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "physical-link",
+                       "label": "usesPhysicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-ver",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "segmentation-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "metadatum",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "related-lookup",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv6-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "lag-interface",
+                       "label": "hasLAGinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "model",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "vip-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "route-table-reference",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "constrained-element-set",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "dvs-switch",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vlan",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "zone",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "ctag-pool",
+                       "to": "availability-zone",
+                       "label": "supportsAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "owning-entity",
+                       "to": "service-instance",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "port-group",
+                       "label": "hasPortGroup",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair-set",
+                       "to": "routing-instance",
+                       "label": "hasRoutingInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "generic-vnf",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pserver",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "oam-network",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "dvs-switch",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "subnet",
+                       "to": "host-route",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "generic-vnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "sriov-vf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "pserver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "cvlan-tag",
+                       "label": "hasIPAGFacingVLAN",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "line-of-business",
+                       "to": "generic-vnf",
+                       "label": "realizedBy",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "subnet",
+                       "label": "hasSubnet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "tenant",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "complex",
+                       "label": "groupsResourcesIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vpn-binding",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "project",
+                       "to": "service-instance",
+                       "label": "created",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "platform",
+                       "to": "generic-vnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "port-group",
+                       "to": "cvlan-tag",
+                       "label": "hasCTag",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "image",
+                       "to": "metadatum",
+                       "label": "hasMetaDatum",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "vip-ipv6-address-list",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "complex",
+                       "label": "definedFor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "routing-instance",
+                       "to": "site-pair",
+                       "label": "hasSitePair",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpn-binding",
+                       "to": "route-target",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "tunnel-xconnect",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "ipsec-configuration",
+                       "to": "vig-server",
+                       "label": "hasVigServer",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-constraint",
+                       "to": "constrained-element-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "p-interface",
+                       "label": "usesPInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "virtual-data-center",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "vserver",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "vlan",
+                       "label": "hasVlan",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "instance-group",
+                       "to": "model",
+                       "label": "targets",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "zone",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "logical-link",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "logical-link",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "pnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "ctag-assignment",
+                       "label": "hasCtagAssignment",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vf-module",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "ctag-pool",
+                       "label": "hasCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "constrained-element-set",
+                       "to": "element-choice-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "image",
+                       "label": "hasImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "cloud-region",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "sriov-vf",
+                       "to": "sriov-pf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "customer",
+                       "to": "service-subscription",
+                       "label": "subscribesTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "newvce",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "allotted-resource",
+                       "label": "bindsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l3-network",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "volume",
+                       "label": "hasVolume",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "vip-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "availability-zone",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair",
+                       "to": "class-of-service",
+                       "label": "hasClassOfService",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "instance-group",
+                       "label": "memberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "element-choice-set",
+                       "to": "model-element",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnf-image",
+                       "label": "usesVnfImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "vip-ipv4-address-list",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "sriov-pf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "group-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "logical-link",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "named-query-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "connector",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "cloud-region",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "snapshot",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "image",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "model-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "lag-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "snapshot",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "property-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-subscription",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "service-subscription",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "vlan",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "named-query-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "ctag-assignment",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ipsec-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "site-pair-set",
+                       "label": "hasSitePairSet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "model-ver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "network-profile",
+                       "label": "hasNetworkProfile",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "configuration",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "configuration",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license-key-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "vpn-binding",
+                       "label": "usesVpnBinding",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
 }
-]
-}
\ No newline at end of file
index 4e14995..4c72156 100644 (file)
@@ -1,105 +1,6 @@
-{"rules":
-[
-{
-       "from": "vlan",
-       "to": "multicast-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l-interface",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vf-module",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "vpn-binding",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "flavor",
-       "label": "hasFlavor",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vnfc",
-       "label": "hosts",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
 {
+       "rules": [
+               {
                        "from": "esr-ems",
                        "to": "esr-system-info",
                        "label": "has",
                        "prevent-delete": "NONE",
                        "default": "true"
                },
-{
-       "from": "cloud-region",
-       "to": "volume-group",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vce",
-       "to": "service-instance",
-       "label": "hasServiceInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "service-instance",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "flavor",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vip-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "pnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "generic-vnf",
-       "label": "hasVNF",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv4-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "pnf",
-       "label": "hostedOn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "physical-link",
-       "label": "usesPhysicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-ver",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "oam-network",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "segmentation-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "metadatum",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "related-lookup",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv6-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "lag-interface",
-       "label": "hasLAGinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "model",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vf-module",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vip-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "availability-zone",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "vip-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "route-table-reference",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "constrained-element-set",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "dvs-switch",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vlan",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "zone",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "ctag-pool",
-       "to": "availability-zone",
-       "label": "supportsAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "owning-entity",
-       "to": "service-instance",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "port-group",
-       "label": "hasPortGroup",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair-set",
-       "to": "routing-instance",
-       "label": "hasRoutingInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "generic-vnf",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vce",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "pserver",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "oam-network",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "dvs-switch",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "subnet",
-       "to": "host-route",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "generic-vnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "sriov-vf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "pserver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vnfc",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "cvlan-tag",
-       "label": "hasIPAGFacingVLAN",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "line-of-business",
-       "to": "generic-vnf",
-       "label": "realizedBy",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "operational-environment",
-       "to": "operational-environment",
-       "label": "managedBy",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "subnet",
-       "label": "hasSubnet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "tenant",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "complex",
-       "label": "groupsResourcesIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vpn-binding",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "project",
-       "to": "service-instance",
-       "label": "created",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "platform",
-       "to": "generic-vnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "port-group",
-       "to": "cvlan-tag",
-       "label": "hasCTag",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "image",
-       "to": "metadatum",
-       "label": "hasMetaDatum",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "vip-ipv6-address-list",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "complex",
-       "label": "definedFor",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "routing-instance",
-       "to": "site-pair",
-       "label": "hasSitePair",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpn-binding",
-       "to": "route-target",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "tunnel-xconnect",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "ipsec-configuration",
-       "to": "vig-server",
-       "label": "hasVigServer",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-constraint",
-       "to": "constrained-element-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "p-interface",
-       "label": "usesPInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "virtual-data-center",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "vserver",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "vlan",
-       "label": "hasVlan",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "instance-group",
-       "to": "model",
-       "label": "targets",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "zone",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "logical-link",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "configuration",
-       "to": "logical-link",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "pnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "ctag-assignment",
-       "label": "hasCtagAssignment",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vf-module",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "complex",
-       "to": "ctag-pool",
-       "label": "hasCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "constrained-element-set",
-       "to": "element-choice-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "image",
-       "label": "hasImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "cloud-region",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "sriov-vf",
-       "to": "sriov-pf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "customer",
-       "to": "service-subscription",
-       "label": "subscribesTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "newvce",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "allotted-resource",
-       "label": "bindsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l3-network",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "volume",
-       "label": "hasVolume",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "vip-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "availability-zone",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "site-pair",
-       "to": "class-of-service",
-       "label": "hasClassOfService",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "instance-group",
-       "label": "memberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "element-choice-set",
-       "to": "model-element",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnf-image",
-       "label": "usesVnfImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vnfc",
-       "to": "vip-ipv4-address-list",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "sriov-pf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "group-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "logical-link",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "named-query-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "connector",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "cloud-region",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "snapshot",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "image",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "model-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "lag-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "snapshot",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "property-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-subscription",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "service-subscription",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "vlan",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "named-query-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "ctag-assignment",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ipsec-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "site-pair-set",
-       "label": "hasSitePairSet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "model-ver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "network-profile",
-       "label": "hasNetworkProfile",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "configuration",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "configuration",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license-key-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "vpn-binding",
-       "label": "usesVpnBinding",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "complex",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
+               {
+                       "from": "vlan",
+                       "to": "multicast-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l-interface",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vf-module",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "vpn-binding",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "flavor",
+                       "label": "hasFlavor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vnfc",
+                       "label": "hosts",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "volume-group",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "service-instance",
+                       "label": "hasServiceInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "service-instance",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "flavor",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "generic-vnf",
+                       "label": "hasVNF",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv4-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pnf",
+                       "label": "hostedOn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "physical-link",
+                       "label": "usesPhysicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-ver",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "segmentation-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "metadatum",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "related-lookup",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv6-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "lag-interface",
+                       "label": "hasLAGinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "model",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vip-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "vip-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "route-table-reference",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "constrained-element-set",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "dvs-switch",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vlan",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "zone",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "ctag-pool",
+                       "to": "availability-zone",
+                       "label": "supportsAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "owning-entity",
+                       "to": "service-instance",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "port-group",
+                       "label": "hasPortGroup",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair-set",
+                       "to": "routing-instance",
+                       "label": "hasRoutingInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "generic-vnf",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pserver",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "oam-network",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "dvs-switch",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "subnet",
+                       "to": "host-route",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "generic-vnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "sriov-vf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "pserver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "cvlan-tag",
+                       "label": "hasIPAGFacingVLAN",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "line-of-business",
+                       "to": "generic-vnf",
+                       "label": "realizedBy",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "operational-environment",
+                       "to": "operational-environment",
+                       "label": "managedBy",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "subnet",
+                       "label": "hasSubnet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "tenant",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "complex",
+                       "label": "groupsResourcesIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vpn-binding",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "project",
+                       "to": "service-instance",
+                       "label": "created",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "platform",
+                       "to": "generic-vnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "port-group",
+                       "to": "cvlan-tag",
+                       "label": "hasCTag",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "image",
+                       "to": "metadatum",
+                       "label": "hasMetaDatum",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "vip-ipv6-address-list",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "complex",
+                       "label": "definedFor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "routing-instance",
+                       "to": "site-pair",
+                       "label": "hasSitePair",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpn-binding",
+                       "to": "route-target",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "tunnel-xconnect",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "ipsec-configuration",
+                       "to": "vig-server",
+                       "label": "hasVigServer",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-constraint",
+                       "to": "constrained-element-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "p-interface",
+                       "label": "usesPInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "virtual-data-center",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "vserver",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "vlan",
+                       "label": "hasVlan",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "instance-group",
+                       "to": "model",
+                       "label": "targets",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "zone",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "logical-link",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "configuration",
+                       "to": "logical-link",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "pnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "ctag-assignment",
+                       "label": "hasCtagAssignment",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vf-module",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "ctag-pool",
+                       "label": "hasCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "constrained-element-set",
+                       "to": "element-choice-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "image",
+                       "label": "hasImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "cloud-region",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "sriov-vf",
+                       "to": "sriov-pf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "customer",
+                       "to": "service-subscription",
+                       "label": "subscribesTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "newvce",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "allotted-resource",
+                       "label": "bindsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l3-network",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "volume",
+                       "label": "hasVolume",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "vip-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "availability-zone",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair",
+                       "to": "class-of-service",
+                       "label": "hasClassOfService",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "instance-group",
+                       "label": "memberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "element-choice-set",
+                       "to": "model-element",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnf-image",
+                       "label": "usesVnfImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "vip-ipv4-address-list",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "sriov-pf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "group-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "sourceLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "false"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "targetLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "false"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "logical-link",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "named-query-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "connector",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "cloud-region",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "snapshot",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "image",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "model-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "lag-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "snapshot",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "property-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-subscription",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "service-subscription",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "vlan",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "named-query-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "ctag-assignment",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ipsec-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "site-pair-set",
+                       "label": "hasSitePairSet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "model-ver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "network-profile",
+                       "label": "hasNetworkProfile",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "configuration",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license-key-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "vpn-binding",
+                       "label": "usesVpnBinding",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
 }
-]
-}
\ No newline at end of file
index c78d427..9997468 100644 (file)
-{"rules":
-[
 {
-       "from": "ipsec-configuration",
-       "to": "vig-server",
-       "label": "hasVigServer",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "multicast-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-constraint",
-       "to": "constrained-element-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vf-module",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "p-interface",
-       "label": "usesPInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "virtual-data-center",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "vserver",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vserver",
-       "to": "flavor",
-       "label": "hasFlavor",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "vlan",
-       "label": "hasVlan",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vnfc",
-       "label": "hosts",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "volume-group",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "ctag-assignment",
-       "label": "hasCtagAssignment",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "service-instance",
-       "label": "hasServiceInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "service-instance",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "flavor",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "pnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "generic-vnf",
-       "label": "hasVNF",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vf-module",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "complex",
-       "to": "ctag-pool",
-       "label": "hasCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "constrained-element-set",
-       "to": "element-choice-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "physical-link",
-       "label": "usesPhysicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "image",
-       "label": "hasImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "volume-group",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "oam-network",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "customer",
-       "to": "service-subscription",
-       "label": "subscribesTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "segmentation-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "related-lookup",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "newvce",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "lag-interface",
-       "label": "hasLAGinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "model",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vf-module",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "pserver",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "availability-zone",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "volume",
-       "label": "hasVolume",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "route-table-reference",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "constrained-element-set",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "dvs-switch",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "availability-zone",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair",
-       "to": "class-of-service",
-       "label": "hasClassOfService",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "element-choice-set",
-       "to": "model-element",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "ctag-pool",
-       "to": "availability-zone",
-       "label": "supportsAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "port-group",
-       "label": "hasPortGroup",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnf-image",
-       "label": "usesVnfImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair-set",
-       "to": "routing-instance",
-       "label": "hasRoutingInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vce",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "pserver",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "oam-network",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "dvs-switch",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "group-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "logical-link",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "named-query-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "connector",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "cloud-region",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "generic-vnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "sriov-vf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "pserver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "snapshot",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "image",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "cvlan-tag",
-       "label": "hasIPAGFacingVLAN",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "lag-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "snapshot",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "named-query-element",
-       "to": "property-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-subscription",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "service-subscription",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "vlan",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "subnet",
-       "label": "hasSubnet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "tenant",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "complex",
-       "label": "groupsResourcesIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "lag-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "named-query-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ipsec-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "site-pair-set",
-       "label": "hasSitePairSet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "model-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "network-profile",
-       "label": "hasNetworkProfile",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "port-group",
-       "to": "cvlan-tag",
-       "label": "hasCTag",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "image",
-       "to": "metadatum",
-       "label": "hasMetaDatum",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license-key-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "vpn-binding",
-       "label": "usesVpnBinding",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "complex",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "complex",
-       "label": "definedFor",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "routing-instance",
-       "to": "site-pair",
-       "label": "hasSitePair",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
+       "rules": [
+               {
+                       "from": "ipsec-configuration",
+                       "to": "vig-server",
+                       "label": "hasVigServer",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "multicast-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-constraint",
+                       "to": "constrained-element-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vf-module",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "p-interface",
+                       "label": "usesPInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "virtual-data-center",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "vserver",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "flavor",
+                       "label": "hasFlavor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "vlan",
+                       "label": "hasVlan",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vnfc",
+                       "label": "hosts",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "volume-group",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "ctag-assignment",
+                       "label": "hasCtagAssignment",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "service-instance",
+                       "label": "hasServiceInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "service-instance",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "flavor",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "generic-vnf",
+                       "label": "hasVNF",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vf-module",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "ctag-pool",
+                       "label": "hasCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "constrained-element-set",
+                       "to": "element-choice-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "physical-link",
+                       "label": "usesPhysicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "image",
+                       "label": "hasImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "customer",
+                       "to": "service-subscription",
+                       "label": "subscribesTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "segmentation-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "related-lookup",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "newvce",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "lag-interface",
+                       "label": "hasLAGinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "model",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "volume",
+                       "label": "hasVolume",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "route-table-reference",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "constrained-element-set",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "dvs-switch",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "availability-zone",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair",
+                       "to": "class-of-service",
+                       "label": "hasClassOfService",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "element-choice-set",
+                       "to": "model-element",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "ctag-pool",
+                       "to": "availability-zone",
+                       "label": "supportsAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "port-group",
+                       "label": "hasPortGroup",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnf-image",
+                       "label": "usesVnfImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair-set",
+                       "to": "routing-instance",
+                       "label": "hasRoutingInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pserver",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "oam-network",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "dvs-switch",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "group-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "logical-link",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "named-query-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "connector",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "cloud-region",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "generic-vnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "sriov-vf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "pserver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "snapshot",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "image",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "cvlan-tag",
+                       "label": "hasIPAGFacingVLAN",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "lag-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "snapshot",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "property-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-subscription",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "service-subscription",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "vlan",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "subnet",
+                       "label": "hasSubnet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "tenant",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "complex",
+                       "label": "groupsResourcesIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "named-query-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ipsec-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "site-pair-set",
+                       "label": "hasSitePairSet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "model-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "network-profile",
+                       "label": "hasNetworkProfile",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "port-group",
+                       "to": "cvlan-tag",
+                       "label": "hasCTag",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "image",
+                       "to": "metadatum",
+                       "label": "hasMetaDatum",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license-key-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "vpn-binding",
+                       "label": "usesVpnBinding",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "complex",
+                       "label": "definedFor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "routing-instance",
+                       "to": "site-pair",
+                       "label": "hasSitePair",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
 }
-]
-}
\ No newline at end of file
index 82d995d..d579d9a 100644 (file)
-{"rules":
-[
 {
-       "from": "ipsec-configuration",
-       "to": "vig-server",
-       "label": "hasVigServer",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "multicast-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-constraint",
-       "to": "constrained-element-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vf-module",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "p-interface",
-       "label": "usesPInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "virtual-data-center",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "vpn-binding",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "vserver",
-       "label": "owns",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vserver",
-       "to": "flavor",
-       "label": "hasFlavor",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l-interface",
-       "to": "vlan",
-       "label": "hasVlan",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "ctag-pool",
-       "label": "usesCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vnfc",
-       "label": "hosts",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "instance-group",
-       "to": "model",
-       "label": "targets",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "volume-group",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "pnf",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "ctag-assignment",
-       "label": "hasCtagAssignment",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "service-instance",
-       "label": "hasServiceInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "service-instance",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "flavor",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "pnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "generic-vnf",
-       "label": "hasVNF",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "vf-module",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "complex",
-       "to": "ctag-pool",
-       "label": "hasCtagPool",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "constrained-element-set",
-       "to": "element-choice-set",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "physical-link",
-       "label": "usesPhysicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "model-ver",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "image",
-       "label": "hasImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pnf",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "tenant",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "volume-group",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "cloud-region",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "customer",
-       "to": "service-subscription",
-       "label": "subscribesTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "segmentation-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "related-lookup",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "newvce",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "l3-network",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "p-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "lag-interface",
-       "label": "hasLAGinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "model",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vf-module",
-       "to": "vnfc",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "pserver",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "service-capability",
-       "label": "supportsServiceCapability",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vserver",
-       "to": "volume",
-       "label": "hasVolume",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv4-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "route-table-reference",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model-element",
-       "to": "constrained-element-set",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "dvs-switch",
-       "to": "availability-zone",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "pserver",
-       "to": "lag-interface",
-       "label": "hasLAGInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "availability-zone",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "vpls-pe",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "allotted-resource",
-       "to": "vlan",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "zone",
-       "to": "complex",
-       "label": "existsIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair",
-       "to": "class-of-service",
-       "label": "hasClassOfService",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "element-choice-set",
-       "to": "model-element",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "ctag-pool",
-       "to": "availability-zone",
-       "label": "supportsAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "network-policy",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "port-group",
-       "label": "hasPortGroup",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "vnf-image",
-       "label": "usesVnfImage",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "site-pair-set",
-       "to": "routing-instance",
-       "label": "hasRoutingInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "generic-vnf",
-       "label": "isPartOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "zone",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vce",
-       "to": "vserver",
-       "label": "runsOnVserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "subnet",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "pserver",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "oam-network",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "dvs-switch",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "allotted-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "group-assignment",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "logical-link",
-       "label": "usesLogicalLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "virtual-data-center",
-       "to": "logical-link",
-       "label": "contains",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "named-query-element",
-       "label": "connectsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "connector",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "lag-interface",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pserver",
-       "to": "cloud-region",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "generic-vnf",
-       "label": "bridgedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vce",
-       "to": "entitlement",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "l3-network",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l-interface",
-       "to": "sriov-vf",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "model",
-       "label": "isA",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "group-assignment",
-       "to": "pserver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "snapshot",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "tenant",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "cloud-region",
-       "to": "image",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "${direction}"
-},
-{
-       "from": "model-ver",
-       "to": "model-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "cvlan-tag",
-       "label": "hasIPAGFacingVLAN",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "pnf",
-       "to": "lag-interface",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "snapshot",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query-element",
-       "to": "property-constraint",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-subscription",
-       "to": "service-instance",
-       "label": "hasInstance",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "tenant",
-       "to": "service-subscription",
-       "label": "relatedTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vserver",
-       "to": "pserver",
-       "label": "runsOnPserver",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "service-instance",
-       "to": "vlan",
-       "label": "dependsOn",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "instance-group",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "availability-zone",
-       "label": "hasAvailabilityZone",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "logical-link",
-       "to": "lag-link",
-       "label": "usesLAGLink",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-network",
-       "to": "subnet",
-       "label": "hasSubnet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "!${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "volume-group",
-       "to": "tenant",
-       "label": "belongsTo",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "cloud-region",
-       "to": "complex",
-       "label": "locatedIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "generic-vnf",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "availability-zone",
-       "to": "complex",
-       "label": "groupsResourcesIn",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "lag-interface",
-       "to": "l-interface",
-       "label": "hasLInterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "named-query",
-       "to": "named-query-element",
-       "label": "startsWith",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "service-instance",
-       "to": "ctag-assignment",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "ipsec-configuration",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "site-pair-set",
-       "label": "hasSitePairSet",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "model",
-       "to": "model-ver",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "connector",
-       "to": "metadatum",
-       "label": "hasMetaData",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "network-profile",
-       "label": "hasNetworkProfile",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vf-module",
-       "to": "volume-group",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "logical-link",
-       "to": "logical-link",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "ONE2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "l3-interface-ipv6-address-list",
-       "to": "l3-network",
-       "label": "isMemberOf",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "port-group",
-       "to": "cvlan-tag",
-       "label": "hasCTag",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vpls-pe",
-       "to": "p-interface",
-       "label": "hasPinterface",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "image",
-       "to": "metadatum",
-       "label": "hasMetaDatum",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "generic-vnf",
-       "to": "license-key-resource",
-       "label": "uses",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "l3-network",
-       "to": "vpn-binding",
-       "label": "usesVpnBinding",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "complex",
-       "to": "l3-network",
-       "label": "usesL3Network",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "oam-network",
-       "to": "complex",
-       "label": "definedFor",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "NONE",
-       "delete-other-v": "NONE",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "!${direction}"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv4-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "routing-instance",
-       "to": "site-pair",
-       "label": "hasSitePair",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "vlan",
-       "to": "l3-interface-ipv6-address-list",
-       "label": "hasIpAddress",
-       "direction": "OUT",
-       "multiplicity": "MANY2MANY",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "${direction}",
-       "prevent-delete": "NONE"
-},
-{
-       "from": "allotted-resource",
-       "to": "tunnel-xconnect",
-       "label": "has",
-       "direction": "OUT",
-       "multiplicity": "ONE2ONE",
-       "contains-other-v": "${direction}",
-       "delete-other-v": "${direction}",
-       "SVC-INFRA": "NONE",
-       "prevent-delete": "NONE"
+       "rules": [
+               {
+                       "from": "ipsec-configuration",
+                       "to": "vig-server",
+                       "label": "hasVigServer",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "multicast-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-constraint",
+                       "to": "constrained-element-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vf-module",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "p-interface",
+                       "label": "usesPInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "virtual-data-center",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "vpn-binding",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "vserver",
+                       "label": "owns",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "flavor",
+                       "label": "hasFlavor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "vlan",
+                       "label": "hasVlan",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "ctag-pool",
+                       "label": "usesCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vnfc",
+                       "label": "hosts",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "instance-group",
+                       "to": "model",
+                       "label": "targets",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "volume-group",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "pnf",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "ctag-assignment",
+                       "label": "hasCtagAssignment",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "service-instance",
+                       "label": "hasServiceInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "service-instance",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "flavor",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "generic-vnf",
+                       "label": "hasVNF",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "vf-module",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "ctag-pool",
+                       "label": "hasCtagPool",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "constrained-element-set",
+                       "to": "element-choice-set",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "physical-link",
+                       "label": "usesPhysicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "model-ver",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "image",
+                       "label": "hasImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "cloud-region",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "customer",
+                       "to": "service-subscription",
+                       "label": "subscribesTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "segmentation-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "related-lookup",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "newvce",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "l3-network",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "p-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "lag-interface",
+                       "label": "hasLAGinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "model",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "service-capability",
+                       "label": "supportsServiceCapability",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "volume",
+                       "label": "hasVolume",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv4-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "route-table-reference",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model-element",
+                       "to": "constrained-element-set",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "dvs-switch",
+                       "to": "availability-zone",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "lag-interface",
+                       "label": "hasLAGInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "availability-zone",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "vlan",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "zone",
+                       "to": "complex",
+                       "label": "existsIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair",
+                       "to": "class-of-service",
+                       "label": "hasClassOfService",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "element-choice-set",
+                       "to": "model-element",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "ctag-pool",
+                       "to": "availability-zone",
+                       "label": "supportsAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "network-policy",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "port-group",
+                       "label": "hasPortGroup",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnf-image",
+                       "label": "usesVnfImage",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "site-pair-set",
+                       "to": "routing-instance",
+                       "label": "hasRoutingInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "generic-vnf",
+                       "label": "isPartOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "zone",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "vserver",
+                       "label": "runsOnVserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "subnet",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "pserver",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "oam-network",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "dvs-switch",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "allotted-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "group-assignment",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "virtual-data-center",
+                       "to": "logical-link",
+                       "label": "contains",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "named-query-element",
+                       "label": "connectsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "connector",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "cloud-region",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "generic-vnf",
+                       "label": "bridgedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vce",
+                       "to": "entitlement",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "l3-network",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "sriov-vf",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "model",
+                       "label": "isA",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "group-assignment",
+                       "to": "pserver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "snapshot",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "tenant",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "image",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "model-ver",
+                       "to": "model-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "cvlan-tag",
+                       "label": "hasIPAGFacingVLAN",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pnf",
+                       "to": "lag-interface",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "snapshot",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query-element",
+                       "to": "property-constraint",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-subscription",
+                       "to": "service-instance",
+                       "label": "hasInstance",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "tenant",
+                       "to": "service-subscription",
+                       "label": "relatedTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vserver",
+                       "to": "pserver",
+                       "label": "runsOnPserver",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "vlan",
+                       "label": "dependsOn",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "instance-group",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "availability-zone",
+                       "label": "hasAvailabilityZone",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "lag-link",
+                       "label": "usesLAGLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "subnet",
+                       "label": "hasSubnet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "!${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "volume-group",
+                       "to": "tenant",
+                       "label": "belongsTo",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "cloud-region",
+                       "to": "complex",
+                       "label": "locatedIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "availability-zone",
+                       "to": "complex",
+                       "label": "groupsResourcesIn",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "lag-interface",
+                       "to": "l-interface",
+                       "label": "hasLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "named-query",
+                       "to": "named-query-element",
+                       "label": "startsWith",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "service-instance",
+                       "to": "ctag-assignment",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "ipsec-configuration",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "site-pair-set",
+                       "label": "hasSitePairSet",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "model",
+                       "to": "model-ver",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "connector",
+                       "to": "metadatum",
+                       "label": "hasMetaData",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "network-profile",
+                       "label": "hasNetworkProfile",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vf-module",
+                       "to": "volume-group",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "logical-link",
+                       "to": "logical-link",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-interface-ipv6-address-list",
+                       "to": "l3-network",
+                       "label": "isMemberOf",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "port-group",
+                       "to": "cvlan-tag",
+                       "label": "hasCTag",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vpls-pe",
+                       "to": "p-interface",
+                       "label": "hasPinterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "image",
+                       "to": "metadatum",
+                       "label": "hasMetaDatum",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "license-key-resource",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "l3-network",
+                       "to": "vpn-binding",
+                       "label": "usesVpnBinding",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "l3-network",
+                       "label": "usesL3Network",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "oam-network",
+                       "to": "complex",
+                       "label": "definedFor",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "NONE",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "!${direction}",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv4-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "routing-instance",
+                       "to": "site-pair",
+                       "label": "hasSitePair",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vlan",
+                       "to": "l3-interface-ipv6-address-list",
+                       "label": "hasIpAddress",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "allotted-resource",
+                       "to": "tunnel-xconnect",
+                       "label": "has",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2ONE",
+                       "contains-other-v": "${direction}",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
 }
-]
-}
\ No newline at end of file
index 7dbf239..4a87099 100644 (file)
@@ -162,7 +162,7 @@ public class DataCopyTest {
                
                final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest());
                final Introspector obj = loader.unmarshal("customer", this.getJsonString("nested-case.json"));
-               System.out.println(obj.marshal(true));
+               //System.out.println(obj.marshal(true));
                TransactionalGraphEngine spy = spy(dbEngine);
                TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
                Graph g = graph.newTransaction();
diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/GremlinTraversalTest.java b/aai-core/src/test/java/org/onap/aai/query/builder/GremlinTraversalTest.java
new file mode 100644 (file)
index 0000000..02486b6
--- /dev/null
@@ -0,0 +1,50 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright Â© 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.query.builder;
+
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+
+public class GremlinTraversalTest extends QueryBuilderTestAbstraction {
+       
+       @Override
+       protected QueryBuilder<Edge> getNewEdgeTraversal(Vertex v) {
+               return new GremlinTraversal<>(loader, g, v, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Edge> getNewEdgeTraversal() {
+               return new GremlinTraversal<>(loader, g, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Vertex> getNewVertexTraversal(Vertex v) {
+               return new GremlinTraversal<>(loader, g, v, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Vertex> getNewVertexTraversal() {
+               return new GremlinTraversal<>(loader, g, testEdgeRules);
+       }
+
+               
+}
diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java b/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java
new file mode 100644 (file)
index 0000000..d478d60
--- /dev/null
@@ -0,0 +1,635 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright Â© 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.query.builder;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.aai.AAISetup;
+import org.onap.aai.db.props.AAIProperties;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.LoaderFactory;
+import org.onap.aai.introspection.ModelType;
+import org.onap.aai.serialization.db.EdgeRules;
+import org.onap.aai.serialization.db.EdgeType;
+
+import com.thinkaurelius.titan.core.TitanFactory;
+import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
+
+public abstract class QueryBuilderTestAbstraction extends AAISetup {
+
+       protected Loader loader;
+       protected Graph graph;
+       protected GraphTraversalSource g;
+       
+       protected EdgeRules testEdgeRules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_TraversalQueryTest.json");
+
+       @Before
+       public void configure() throws Exception {
+               loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST);
+               graph = TitanFactory.build().set("storage.backend", "inmemory").open();
+               g = graph.traversal();
+       }
+       
+       
+       @Test
+       public void createEdgeGVnfToVnfcTraversal() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","myvnf").next();
+               Vertex vnfc = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               testEdgeRules.addEdge(g, gvnf, vnfc, "uses");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
+               
+               assertEquals(vnfc, tQ.next());
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
+                               
+               Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
+               Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
+               testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
+               
+               Vertex next = tQ.next();
+               
+               assertEquals(logicalLink, next);
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
+                               
+               Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
+               Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
+               testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link"));
+               
+               Vertex next = tQ.next();
+               
+               assertEquals(logicalLink, next);
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
+                               
+               Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
+               Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
+               testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
+               
+               Vertex next = tQ.next();
+               
+               assertEquals(logicalLink, next);
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexTraversalTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, vnfc1);
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 1 vertexes ", 1, list.size());
+               assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               testEdgeRules.addEdge(g, vce, vnfc1);
+               
+               QueryBuilder<Vertex> tQ1 = getNewVertexTraversal(vce);
+               tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
+               
+               QueryBuilder<Vertex> tQ2 = getNewVertexTraversal(vnfc1);
+               tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
+               
+               List<Vertex> list1 = tQ1.toList();
+               List<Vertex> list2 = tQ2.toList();
+               
+               assertEquals("1 - Has 1 vertexes ", 1, list1.size());
+               assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
+               assertEquals("2 - Has 1 vertexes ", 1, list2.size());
+               assertTrue("2 - traversal results in vce ", list2.contains(vce));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, vce, pserver);
+               
+               QueryBuilder<Vertex> tQ1 = getNewVertexTraversal(vce);
+               tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
+               
+               List<Vertex> list = tQ1.toList();
+
+               assertEquals("1 - Has 1 vertexes ", 1, list.size());
+               assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, vnfc1);
+               testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
+               assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexMultiLabelTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, vnfc1);
+               testEdgeRules.addEdge(g, pserver, vnfc1);
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(vnfc1);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 1 vertexes ", 1, list.size());
+               assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void limitTraversalTest() throws AAIException {
+                               
+               g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
+               tQ.getVerticesByProperty("aai-node-type","vnfc").limit(1);
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 1 vertexes ", 1, list.size());
+       
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void getVertexesByPropertiesTraversalTest() throws AAIException {
+                               
+               g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
+               tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 2 vertexes ", 2, list.size());
+       
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void getVertexesByIndexedPropertyTraversalTest() throws AAIException {
+                               
+               g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
+               tQ.getVerticesByIndexedProperty("aai-node-type","vnfc");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 2 vertexes ", 2, list.size());
+       
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void dedupTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, pserver);
+               testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 1, list.size());
+               assertTrue("result has pserver ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void storeCapTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, pserver);
+               testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf, testEdgeRules);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
+               
+               List<BulkSet<Vertex>> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 1, list.size());
+               assertEquals("result has pserver ",pserver, list.get(0).iterator().next());
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void storeCapUnfoldTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, pserver);
+               testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("result has pserver ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void nextAndHasNextTraversalTest() throws AAIException {
+                               
+               Vertex v1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               Vertex v2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
+               tQ.getVerticesByProperty("aai-node-type","vnfc");
+               
+               List<Vertex> list = new ArrayList<>();
+               
+               assertTrue("Has next 1 ",tQ.hasNext());
+               list.add(tQ.next());
+               assertTrue("Has next 2 ",tQ.hasNext());
+               list.add(tQ.next());
+               assertFalse("Has next 3 ",tQ.hasNext());
+               assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, pserver);
+               testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("result has pserver ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, complex);
+               testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("result has pserver ", list.contains(complex));
+               
+               g.tx().rollback();
+       }
+
+       @Test
+       public void edgeTraversalSingleInRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               Edge e = testEdgeRules.addEdge(g, vce, pserver);
+               
+               QueryBuilder<Edge> tQ1 = getNewEdgeTraversal(vce);
+               tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
+               
+               List<Edge> list = tQ1.toList();
+
+               assertEquals("1 - Has 1 edge ", 1, list.size());
+               assertTrue("1 - traversal results in edge ", list.contains(e));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeTraversalSingleOutRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               Edge e = testEdgeRules.addEdge(g, vce, vnfc1);
+               
+               QueryBuilder<Edge> tQ1 = getNewEdgeTraversal(vce);
+               tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
+               
+               List<Edge> list1 = tQ1.toList();
+               
+               assertEquals("1 - Has 1 edge ", 1, list1.size());
+               assertTrue("1 - traversal results in edge ", list1.contains(e));
+               
+               g.tx().rollback();
+       }
+
+       @Test
+       public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
+               
+               List<Edge> list = tQ.toList();
+       
+               assertEquals("Has 2 edges ", 2, list.size());
+               assertTrue("result has default edge ", list.contains(e1));
+               assertTrue("result has other edge ", list.contains(e2));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
+               
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, complex);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
+               
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
+               
+               List<Edge> list = tQ.toList();
+       
+               assertEquals("Has 2 edges ", 2, list.size());
+               assertTrue("result has default edge ", list.contains(e1));
+               assertTrue("result has other edge ", list.contains(e2));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, vnfc1);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
+               
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
+               
+               List<Edge> list = tQ.toList();
+
+               assertEquals("Has 2 edges ", 2, list.size());
+               assertTrue("result has default edge ", list.contains(e1));
+               assertTrue("result has other edge ", list.contains(e2));
+               
+               g.tx().rollback();
+       }
+
+       @Test (expected = NoEdgeRuleFoundException.class)
+       public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
+
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
+               g.tx().rollback();
+       }
+
+       @Test
+       public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
+
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
+
+               List<Edge> list = tQ.toList();
+
+               assertEquals("Has 1 edges ", 1, list.size());
+               assertFalse("result does not have default edge ", list.contains(e1));
+               assertTrue("result has other edge ", list.contains(e2));
+               g.tx().rollback();
+       }
+
+       @Test
+       public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
+
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
+
+               List<Edge> list = tQ.toList();
+
+               assertEquals("Has 2 edges ", 2, list.size());
+               assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
+               assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
+               g.tx().rollback();
+       }
+
+       @Test (expected = NoEdgeRuleFoundException.class)
+       public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
+
+               Vertex gvnf = getVertex();
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
+
+               List<Edge> list = tQ.toList();
+
+               g.tx().rollback();
+       }
+
+       private Vertex getVertex() throws AAIException {
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               return gvnf;
+       }
+
+       @Test
+       public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
+
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
+
+               List<Edge> list = tQ.toList();
+
+               assertEquals("Has 1 edges ", 1, list.size());
+               assertFalse("result does not have default edge ", list.contains(e1));
+               assertTrue("result has other edge ", list.contains(e2));
+               g.tx().rollback();
+       }
+
+       @Test
+       public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
+
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+
+               Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
+               Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+
+               QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
+               tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
+
+               List<Edge> list = tQ.toList();
+
+               assertEquals("Has 2 edges ", 2, list.size());
+               assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
+               assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
+               g.tx().rollback();
+       }
+
+       protected abstract QueryBuilder<Edge> getNewEdgeTraversal(Vertex v);
+       
+       protected abstract QueryBuilder<Edge> getNewEdgeTraversal();
+       
+       protected abstract QueryBuilder<Vertex> getNewVertexTraversal(Vertex v);
+       
+       protected abstract QueryBuilder<Vertex> getNewVertexTraversal();
+
+               
+}
index fa06e17..41daf17 100644 (file)
  */
 package org.onap.aai.query.builder;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
-import org.mockito.Mock;
-import org.onap.aai.AAISetup;
 import org.onap.aai.db.props.AAIProperties;
 import org.onap.aai.exceptions.AAIException;
-import org.onap.aai.introspection.Loader;
-import org.onap.aai.introspection.LoaderFactory;
-import org.onap.aai.introspection.ModelType;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import static org.junit.Assert.assertEquals;
-
-public class TraversalQueryTest extends AAISetup {
-
-       private Loader loader;
+import org.onap.aai.serialization.db.EdgeType;
 
-       @Mock
-       private GraphTraversalSource g;
+public class TraversalQueryTest extends QueryBuilderTestAbstraction {
 
-       @Before
-       public void configure() throws Exception {
-               loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST);
+       
+       @Override
+       protected QueryBuilder<Edge> getNewEdgeTraversal(Vertex v) {
+               return new TraversalQuery<>(loader, g, v, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Edge> getNewEdgeTraversal() {
+               return new TraversalQuery<>(loader, g, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Vertex> getNewVertexTraversal(Vertex v) {
+               return new TraversalQuery<>(loader, g, v, testEdgeRules);
+       }
+       
+       @Override
+       protected QueryBuilder<Vertex> getNewVertexTraversal() {
+               return new TraversalQuery<>(loader, g, testEdgeRules);
        }
        
        @Test
        public void unionQuery() {
-               TraversalQuery<Vertex> tQ = new TraversalQuery<>(loader, g);
-               TraversalQuery<Vertex> tQ2 = new TraversalQuery<>(loader, g);
-               TraversalQuery<Vertex> tQ3 = new TraversalQuery<>(loader, g);
+               QueryBuilder<Vertex> tQ = new TraversalQuery<>(loader, g);
+               QueryBuilder<Vertex> tQ2 = new TraversalQuery<>(loader, g);
+               QueryBuilder<Vertex> tQ3 = new TraversalQuery<>(loader, g);
                tQ.union(
                                tQ2.getVerticesByProperty("test1", "value1"),
                                tQ3.getVerticesByIndexedProperty("test2", "value2"));
@@ -68,12 +75,12 @@ public class TraversalQueryTest extends AAISetup {
                
                assertEquals("they are equal", expected, tQ.getQuery());
                
+               g.tx().rollback();
        }
 
-       @Ignore
        @Test
        public void traversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
-               TraversalQuery<Vertex> tQ = new TraversalQuery<>(loader, g);
+               QueryBuilder<Vertex> tQ = new TraversalQuery<>(loader, g);
                QueryBuilder<Vertex> builder = tQ.createQueryFromURI(new URI("network/test-objects/test-object/key1")).getQueryBuilder();
                GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "test-object");
                GraphTraversal<Vertex, Vertex> containerExpected = __.<Vertex>start().has("aai-node-type", "test-object");
@@ -81,13 +88,13 @@ public class TraversalQueryTest extends AAISetup {
                assertEquals("query object", expected.toString(), builder.getQuery().toString());
                assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
                
+               g.tx().rollback();
        }
 
-       @Ignore
        @Test
        public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
                
-               TraversalQuery<Vertex> tQ = new TraversalQuery<>(loader, g);
+               QueryBuilder<Vertex> tQ = new TraversalQuery<>(loader, g);
                QueryBuilder<Vertex> builder = tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2")).getQueryBuilder();
                GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface").has("interface-name", "key2");
                GraphTraversal<Vertex, Vertex> containerExpected = __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface");
@@ -95,6 +102,132 @@ public class TraversalQueryTest extends AAISetup {
                assertEquals("query object", expected.toString(), builder.getQuery().toString());
                assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
                
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexTraversalTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, vnfc1);
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 1 vertexes ", 1, list.size());
+               assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexTraversalSingleOutRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               
+               testEdgeRules.addEdge(g, vce, vnfc1);
+               
+               QueryBuilder<Vertex> tQ1 = new TraversalQuery<>(loader, g, vce, testEdgeRules);
+               tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
+               
+               QueryBuilder<Vertex> tQ2 = new TraversalQuery<>(loader, g, vnfc1, testEdgeRules);
+               tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vnf");
+               
+               List<Vertex> list1 = tQ1.toList();
+               List<Vertex> list2 = tQ2.toList();
+               
+               assertEquals("1 - Has 1 vertexes ", 1, list1.size());
+               assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
+               assertEquals("2 - Has 1 vertexes ", 1, list2.size());
+               assertTrue("2 - traversal results in vce ", list2.contains(vce));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexTraversalSingleInRuleTest() throws AAIException {
+                               
+               Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, vce, pserver);
+               
+               QueryBuilder<Vertex> tQ1 = new TraversalQuery<>(loader, g, vce, testEdgeRules);
+               tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
+               
+               List<Vertex> list = tQ1.toList();
+
+               assertEquals("1 - Has 1 vertexes ", 1, list.size());
+               assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexMultiRuleTraversalTest() throws AAIException {
+                               
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
+               Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, vnfc1);
+               testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
+               
+               List<Vertex> list = tQ.toList();
+
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
+               assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexMultiRuleOutTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, pserver);
+               testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("result has pserver ", list.contains(pserver));
+               
+               g.tx().rollback();
+       }
+       
+       @Test
+       public void abstractEdgeToVertexMultiRuleInTraversalTest() throws AAIException {
+                       
+               Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
+               Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
+               
+               testEdgeRules.addEdge(g, gvnf, complex);
+               testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
+               
+               QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
+               tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "complex");
+               
+               List<Vertex> list = tQ.toList();
+       
+               assertEquals("Has 2 vertexes ", 2, list.size());
+               assertTrue("result has pserver ", list.contains(complex));
+               
+               g.tx().rollback();
        }
        
        
index c89150b..4d46c02 100644 (file)
@@ -1,27 +1,40 @@
-/**
+/*-
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * 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
- *
+ * 
+ *      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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
+
 package org.onap.aai.serialization.db;
 
-import com.thinkaurelius.titan.core.TitanFactory;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -41,20 +54,12 @@ import org.onap.aai.introspection.Loader;
 import org.onap.aai.introspection.LoaderFactory;
 import org.onap.aai.introspection.ModelType;
 import org.onap.aai.introspection.Version;
+import org.onap.aai.parsers.query.QueryParser;
 import org.onap.aai.serialization.engines.QueryStyle;
 import org.onap.aai.serialization.engines.TitanDBEngine;
 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
 
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import com.thinkaurelius.titan.core.TitanFactory;
 
 public class DbSerializerTest extends AAISetup {
 
@@ -76,7 +81,7 @@ public class DbSerializerTest extends AAISetup {
        private DBSerializer dbser;
        TransactionalGraphEngine spy;
        TransactionalGraphEngine.Admin adminSpy;
-
+       
        @Before
        public void setup() throws Exception {
                graph = TitanFactory.build().set("storage.backend", "inmemory").open();
@@ -84,11 +89,11 @@ public class DbSerializerTest extends AAISetup {
                dbEngine = new TitanDBEngine(queryStyle, type, loader);
                spy = spy(dbEngine);
                adminSpy = spy(dbEngine.asAdmin());
-
+       
                createGraph();
 
                engine = new TitanDBEngine(queryStyle, type, loader);
-               dbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST");
+               dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
        }
 
        public void createGraph() throws AAIException {
@@ -340,7 +345,7 @@ public class DbSerializerTest extends AAISetup {
                EdgeRules rules = EdgeRules.getInstance();
                rules.addTreeEdge(engine.tx().traversal(), cr, ten);
 
-               Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr);
+               Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr, null);
                assertEquals("has", e.label());
                engine.rollback();
        }
@@ -388,20 +393,61 @@ public class DbSerializerTest extends AAISetup {
                assertTrue(dbser.createEdge(relationship, gvnf));
                assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
                assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
+               engine.rollback();
+       }
+       
+       @Test
+       public void createCousinEdgeThatShouldBeTreeTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
+               engine.startTransaction();
 
-               //rainy day case, edge to nonexistant object
-               Introspector relData2 = loader.introspectorFromName("relationship-data");
-               relData2.setValue("relationship-key", "vnfc.vnfc-name");
-               relData2.setValue("relationship-value", "b-name");
-               Introspector relationship2 = loader.introspectorFromName("relationship");
-               relationship2.setValue("related-to", "vnfc");
-               relationship2.setValue("related-link", "/network/vnfcs/vnfc/b-name");
-               relationship2.setValue("relationship-data",relData2);
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vf = engine.tx().addVertex("aai-node-type","vf-module","vf-module-id","vf-id");
+
+               EdgeRules.getInstance().addTreeEdge(engine.tx().traversal(), gvnf, vf);
+               
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vf-module");
+               relationship.setValue("related-link", dbser.getURIForVertex(vf).toString());
+               //relationship.setValue("relationship-label", "");
+               Introspector relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+               
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf2 = dbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               gvnfObj.setValue("vnf-id", "myvnf-1");
+
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf-1"));
+               
+               try {
+                       dbser.serializeToDb(gvnfObj, gvnf2, uriQuery, null, "test");
+               } catch (AAIException e) {
+                       assertEquals("AAI_6145", e.getCode());
+               } 
+               finally {
+                       engine.rollback();
+               }
+       }
+       
+       @Test
+       public void createEdgeNodeDoesNotExistExceptionTest() throws AAIException, UnsupportedEncodingException {
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+
+               //rainy day case, edge to non-existent object
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "b-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/b-name");
+               relationship.setValue("relationship-data",relData);
 
                thrown.expect(AAIException.class);
                thrown.expectMessage("Node of type vnfc. Could not find object at: /network/vnfcs/vnfc/b-name");
                try {
-                       dbser.createEdge(relationship2, gvnf);
+                       dbser.createEdge(relationship, gvnf);
                } finally {
                        engine.rollback();
                }
@@ -438,4 +484,529 @@ public class DbSerializerTest extends AAISetup {
                assertTrue(engine.tx().traversal().V().has("aai-node-type","tenant").has("tenant-id","453").has("tenant-name","mytenant").hasNext());
                engine.rollback();
        }
+       
+       
+       @Test
+       public void getVertexPropertiesRelationshipHasLabelTest() throws AAIException, UnsupportedEncodingException {
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
+               EdgeRules rules = EdgeRules.getInstance();
+               rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
+               
+               Introspector obj = loader.introspectorFromName("generic-vnf");
+               obj = this.dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
+               
+               assertEquals("edge label between generic-vnf and vnfs is uses", "uses", obj.getWrappedValue("relationship-list").getWrappedListValue("relationship").get(0).getValue("relationship-label"));
+               
+               engine.rollback();
+       }
+       
+       @Test
+       public void getVertexPropertiesRelationshipOldVersionNoEdgeLabelTest() throws AAIException, UnsupportedEncodingException {
+
+               Version version = Version.v11;
+               DBSerializer dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
+               Loader loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
+
+               engine.startTransaction();
+               
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
+               EdgeRules rules = EdgeRules.getInstance();
+               rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
+
+               Introspector obj = loader.introspectorFromName("generic-vnf");
+               obj = dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
+               
+               assertEquals("Relationship does not contain edge-property", false, obj.getWrappedValue("relationship-list").getWrappedListValue("relationship").get(0).hasProperty("relationship-label"));
+               
+               engine.rollback();
+       }
+       
+       @Test
+       public void createEdgeWithValidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               //sunny day case
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "over-uses");
+               
+               assertTrue(localDbser.createEdge(relationship, gvnf));
+               assertTrue(engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+               assertTrue(engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+               engine.rollback();
+       }
+       
+       @Test
+       public void createEdgeWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "NA");
+
+               thrown.expect(AAIException.class);
+               thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
+               try {
+                       dbser.createEdge(relationship, gvnf);
+               } finally {
+                       engine.rollback();
+               }
+       }
+       
+       @Test
+       public void createEdgeWithValidLabelWhenSameEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "re-uses");
+               
+               assertTrue(localDbser.createEdge(relationship, gvnf));
+               assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+               assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void createEdgeWithValidLabelWhenDiffEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "uses");
+               localDbser.createEdge(relationship, gvnf);
+               
+               relationship.setValue("relationship-label", "re-uses");
+               
+               assertTrue(localDbser.createEdge(relationship, gvnf));
+               assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+               assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+               assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
+               assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void createEdgeWithNoLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               localDbser.createEdge(relationship, gvnf);
+               
+               assertTrue(localDbser.createEdge(relationship, gvnf));
+               assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
+               assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(gvnf).both().count().next());
+
+               engine.rollback();
+       }
+       
+       @Test
+       public void deleteEdgeWithNoLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               
+               assertTrue(localDbser.deleteEdge(relationship, gvnf));
+               assertFalse("generic-vnf has no edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
+               assertFalse("vnfc has no edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
+               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void deleteEdgeWithValidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "re-uses");
+               
+               assertTrue(localDbser.deleteEdge(relationship, gvnf));
+               assertTrue("generic-vnf has edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
+               assertTrue("vnfc has edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
+               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void deleteEdgeWithValidInvalidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
+               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+               ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+               Introspector relData = loader.introspectorFromName("relationship-data");
+               relData.setValue("relationship-key", "vnfc.vnfc-name");
+               relData.setValue("relationship-value", "a-name");
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-data",relData);
+               relationship.setValue("relationship-label", "NA");
+               
+               thrown.expect(AAIException.class);
+               thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
+               try {
+                       localDbser.deleteEdge(relationship, gvnf);
+               } finally {
+                       engine.rollback();
+               }
+       }
+       
+       @Test
+       public void serializeToDbWithLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+               
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-label", "re-uses");
+               Introspector relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+               
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               gvnfObj.setValue("vnf-id", "myvnf");
+
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+               
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void serializeToDbWithoutLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+               
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+
+               Introspector relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+               
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               gvnfObj.setValue("vnf-id", "myvnf");
+
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+               
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+               assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+               assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void serializeToDbWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+               
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+
+               Introspector relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-label", "NA");
+               Introspector relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+               
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               gvnfObj.setValue("vnf-id", "myvnf");
+
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+               
+               thrown.expect(AAIException.class);
+               thrown.expectMessage("No EdgeRule found for passed nodeTypes: generic-vnf, vnfc with label NA.");
+               try {
+                       localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               } finally {
+                       engine.rollback();
+               }
+               engine.rollback();
+       }
+       
+       @Test
+       public void serializeToDbWithLabelAndEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               
+               Introspector relationship;
+               Introspector relationshipList;
+               List<Object> relList = new ArrayList<>();
+
+               // create generic-vnf
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("vnf-id", "myvnf");
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+               // create relationship to vnfc          
+               relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relList.add(relationship.getUnderlyingObject());
+               relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", relList);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               
+               // add gvnf to graph
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               // add second relationship
+               relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-label", "re-uses");
+               relList.add(relationship.getUnderlyingObject());
+               relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", relList);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+               assertTrue("generic-vnf has  edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+               assertTrue("vnfc has  edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+               engine.rollback();
+       }
+       
+       @Test
+       public void serializeToDbWithLabelDroppingRelationshipTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+               
+               EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
+               
+               engine.startTransaction();
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
+               
+               Introspector relationship;
+               Introspector relationshipList;
+               List<Object> relList = new ArrayList<>();
+
+               // create generic-vnf
+               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+               gvnfObj.setValue("vnf-id", "myvnf");
+               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+               // create relationship to vnfc          
+               relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relList.add(relationship.getUnderlyingObject());
+               // add second relationship
+               relationship = loader.introspectorFromName("relationship");
+               relationship.setValue("related-to", "vnfc");
+               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+               relationship.setValue("relationship-label", "re-uses");
+               relList.add(relationship.getUnderlyingObject());
+               relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", relList);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               
+               // add gvnf to graph
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               // drop second relationship
+               relList.remove(1);
+               relationshipList = loader.introspectorFromName("relationship-list");
+               relationshipList.setValue("relationship", relList);
+               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+               
+               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+               
+               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+               assertTrue("generic-vnf has  edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+               assertTrue("vnfc has  edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+               assertFalse("generic-vnf no longer has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+               assertFalse("vnfc no longer has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+               engine.rollback();
+       }
+
+       private DBSerializer getDBSerializerWithSpecificEdgeRules(EdgeRules ers)
+                       throws NoSuchFieldException, AAIException, IllegalAccessException {
+               // reflection to set the edge rules to the test one for DBSerializer
+               Field reader = DBSerializer.class.getDeclaredField("edgeRules");
+               reader.setAccessible(true);
+               DBSerializer localDbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST");
+               reader.set(localDbser, ers);
+               return localDbser;
+       }
+
 }
\ No newline at end of file
index e007f02..bc6a721 100644 (file)
@@ -26,7 +26,10 @@ import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.junit.Test;
 import org.onap.aai.AAISetup;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -41,6 +44,7 @@ import org.junit.rules.ExpectedException;
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Version;
 import org.onap.aai.serialization.db.exceptions.EdgeMultiplicityException;
+import org.onap.aai.serialization.db.exceptions.MultipleEdgeRuleFoundException;
 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
 
 import com.google.common.collect.Multimap;
@@ -105,6 +109,35 @@ public class EdgeRulesTest extends AAISetup {
                assertEquals(false, EdgeRules.getInstance(Version.v8).hasEdgeRule("model-element", "model-ver"));
        }
 
+       @Test
+       public void hasEdgeRuleTest() {
+               assertEquals("true: cloud-region | tenant", true, EdgeRules.getInstance().hasEdgeRule("cloud-region", "tenant"));
+               assertEquals("true: tenant | cloud-region", true, EdgeRules.getInstance().hasEdgeRule("tenant", "cloud-region"));
+               assertEquals("true: pserver | complex", true, EdgeRules.getInstance().hasEdgeRule("pserver", "complex"));
+               assertEquals("false: pserver | service", false, EdgeRules.getInstance().hasEdgeRule("pserver", "service"));
+       }
+       
+       @Test
+       public void hasTreeEdgeRuleTest() {
+               assertEquals("true: cloud-region | tenant", true, EdgeRules.getInstance().hasTreeEdgeRule("cloud-region", "tenant"));
+               assertEquals("true: tenant | cloud-region", true, EdgeRules.getInstance().hasTreeEdgeRule("tenant", "cloud-region"));
+               assertEquals("false: pserver | complex", false, EdgeRules.getInstance().hasTreeEdgeRule("pserver", "complex"));
+               assertEquals("true: service-instance | allotted-resource", true, EdgeRules.getInstance().hasTreeEdgeRule("service-instance", "allotted-resource"));
+
+       }
+       
+       @Test
+       public void hasCousinEdgeRuleTest() {
+               assertEquals("false: cloud-region | tenant", false, EdgeRules.getInstance().hasCousinEdgeRule("cloud-region", "tenant", null));
+               assertEquals("false: tenant | cloud-region", false, EdgeRules.getInstance().hasCousinEdgeRule("tenant", "cloud-region", null));
+               assertEquals("true: pserver | complex", true, EdgeRules.getInstance().hasCousinEdgeRule("pserver", "complex", null));
+               assertEquals("true: service-instance | allotted-resource", true, EdgeRules.getInstance().hasCousinEdgeRule("service-instance", "allotted-resource", null));
+               assertEquals("true: logical-link | l-interface", true, EdgeRules.getInstance().hasCousinEdgeRule("logical-link", "l-interface", null));
+               assertEquals("true: logical-link | l-interface : sourceLInterface", true, EdgeRules.getInstance().hasCousinEdgeRule("logical-link", "l-interface", "sourceLInterface"));
+               assertEquals("true: logical-link | l-interface : targetLInterface", true, EdgeRules.getInstance().hasCousinEdgeRule("logical-link", "l-interface", "targetLInterface"));
+               assertEquals("false: logical-link | l-interface : blah", false, EdgeRules.getInstance().hasCousinEdgeRule("logical-link", "l-interface", "blah"));
+       }
+       
        @Test
        public void hasEdgeRuleVertexTest() {
                Graph graph = TinkerGraph.open();
@@ -192,7 +225,7 @@ public class EdgeRulesTest extends AAISetup {
        public void getAllRulesTest() {
                EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
                Multimap<String, EdgeRule> allRules = rules.getAllRules();
-               assertEquals(6, allRules.size());
+               assertEquals(14, allRules.size());
                assertEquals(true, allRules.containsKey("foo|bar"));
                assertEquals(true, allRules.containsKey("foo|bar"));
                assertEquals(true, allRules.containsKey("quux|foo"));
@@ -221,7 +254,6 @@ public class EdgeRulesTest extends AAISetup {
                EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json");
 
                thrown.expect(RuntimeException.class);
-               thrown.expectMessage("org.onap.aai.exceptions.AAIException: Rule between quux and foo is missing property SVC-INFRA.");
                rules.getEdgeRules("foo", "quux");
        }
 
@@ -235,4 +267,85 @@ public class EdgeRulesTest extends AAISetup {
                        rules.getAllRules();
                }
        }
+
+    @Test(expected = NoEdgeRuleFoundException.class)
+    public void noEdgeRuleFoundTest() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance();
+        rules.getEdgeRule(EdgeType.TREE, "a", "b");
+    }
+
+    @Test
+    public void verifyOutDirectionUsingLabel() throws AAIException, NoEdgeRuleFoundException {
+        EdgeRules rules = EdgeRules.getInstance();
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "generic-vnf", "l3-network", "usesL3Network");
+
+        assertEquals("out direction", rule.getDirection(), Direction.OUT);
+    }
+
+    @Test
+    public void verifyOutDirectionLinterfaceToLinterfaceUsingLabel() throws AAIException, NoEdgeRuleFoundException {
+        EdgeRules rules = EdgeRules.getInstance();
+        EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, "l-interface", "l-interface");
+
+        assertEquals("out direction", rule.getDirection(), Direction.OUT);
+    }
+
+    @Test
+    public void verifyOutFlippedDirectionUsingLabel() throws AAIException, NoEdgeRuleFoundException {
+        EdgeRules rules = EdgeRules.getInstance();
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "l3-network", "generic-vnf", "usesL3Network");
+
+        assertEquals("in direction", rule.getDirection(), Direction.IN);
+    }
+
+    @Test(expected = MultipleEdgeRuleFoundException.class)
+    public void multipleEdgeRulesVerifyMultipleEdgeRuleException() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+        rules.getEdgeRule(EdgeType.COUSIN, "foo", "bar");
+    }
+
+    @Test
+    public void multipleEdgeRulesVerifyGetRuleWithLabel() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "foo", "bar", "eatz");
+        assertEquals("in direction", rule.getDirection(), Direction.IN);
+    }
+
+    @Test
+    public void multipleEdgeRulesVerifyGetRuleWithOutLabelDefaults() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "a", "b");
+        assertEquals("in direction", rule.getLabel(), "d");
+    }
+
+    @Test
+    public void multipleEdgeRulesRevVerifyGetRuleWithOutLabelDefaults() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "z", "y");
+        assertEquals("in direction", rule.getLabel(), "w");
+    }
+
+    @Test
+    public void multipleEdgeRulesRevRevVerifyGetRuleWithOutLabelDefaults() throws AAIException {
+        EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+        EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "y", "z");
+        assertEquals("in direction", rule.getLabel(), "w");
+    }
+
+       @Test
+       public void getEdgeRulesWithLabelsTest() throws AAIException {
+               EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               List<String> labels = Arrays.asList("uses","re-uses","over-uses");
+               Map<String, EdgeRule> edgeRules = rules.getEdgeRulesWithLabels(EdgeType.COUSIN, "generic-vnf", "vnfc", labels);
+               assertEquals("Found 3 edge rules", 3, edgeRules.size());
+               assertTrue("Rules for each edge label found", edgeRules.keySet().containsAll(labels));
+       }
+
+       @Test(expected = NoEdgeRuleFoundException.class)
+       public void getEdgeRulesWithLabelsBadLabelTest() throws AAIException {
+               EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
+               List<String> labels = Arrays.asList("bad","re-uses","over-uses");
+               Map<String, EdgeRule> edgeRules = rules.getEdgeRulesWithLabels(EdgeType.COUSIN, "generic-vnf", "vnfc", labels);
+       }
+
 }
diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/util/VersionCheckerTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/util/VersionCheckerTest.java
new file mode 100644 (file)
index 0000000..093be69
--- /dev/null
@@ -0,0 +1,41 @@
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * org.onap.aai\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ */\r
+package org.onap.aai.serialization.db.util;\r
+\r
+import static org.junit.Assert.*;\r
+\r
+import org.junit.Test;\r
+import org.onap.aai.introspection.Version;\r
+\r
+public class VersionCheckerTest {\r
+\r
+       @Test\r
+       public void apiVersionNeedsEdgeLabelTrueTest() {\r
+               assertTrue(VersionChecker.apiVersionNeedsEdgeLabel(Version.v12));\r
+       }\r
+       \r
+       @Test\r
+       public void apiVersionNeedsEdgeLabelFalseTest() {\r
+               assertFalse(VersionChecker.apiVersionNeedsEdgeLabel(Version.v10));\r
+       }\r
+\r
+}\r
diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/RawFormatTest.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/RawFormatTest.java
new file mode 100644 (file)
index 0000000..37a2a4f
--- /dev/null
@@ -0,0 +1,141 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.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.onap.aai.serialization.queryformats;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import java.io.UnsupportedEncodingException;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.aai.AAISetup;
+import org.onap.aai.dbmap.DBConnectionType;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.LoaderFactory;
+import org.onap.aai.introspection.ModelType;
+import org.onap.aai.introspection.Version;
+import org.onap.aai.serialization.db.DBSerializer;
+import org.onap.aai.serialization.db.EdgeRules;
+import org.onap.aai.serialization.engines.QueryStyle;
+import org.onap.aai.serialization.engines.TitanDBEngine;
+import org.onap.aai.serialization.engines.TransactionalGraphEngine;
+import org.onap.aai.serialization.queryformats.RawFormat.Builder;
+import org.onap.aai.serialization.queryformats.exceptions.AAIFormatQueryResultFormatNotSupported;
+import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexException;
+import org.onap.aai.serialization.queryformats.utils.UrlBuilder;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+public class RawFormatTest extends AAISetup {
+
+       @Mock
+       private UrlBuilder urlBuilder;
+
+       private Graph graph;
+       private TransactionalGraphEngine dbEngine;
+       private Loader loader;
+       private RawFormat rawFormat;
+       private final ModelType factoryType = ModelType.MOXY;
+       private final EdgeRules rules = EdgeRules.getInstance();
+       private Version version = Version.getLatest();
+       private Vertex pserver;
+       private Vertex complex;
+
+       private DBSerializer serializer;
+
+       @Before
+       public void setUp() throws Exception {
+
+               MockitoAnnotations.initMocks(this);
+
+               graph = TinkerGraph.open();
+
+               Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname",
+                               "hostname-1");
+               Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex",
+                               "physical-location-id", "physical-location-id-1", "country", "US");
+
+               GraphTraversalSource g = graph.traversal();
+               rules.addEdge(g, pserver1, complex1);
+               
+               pserver = pserver1;
+               complex = complex1;
+               
+               createLoaderEngineSetup();
+
+       }
+
+       @Test
+       public void verifyPserverRelatedToHasEdgeLabel () throws AAIFormatVertexException, AAIException, AAIFormatQueryResultFormatNotSupported {
+               assertTrue(rawFormat.createRelationshipObject(pserver).get(0).getAsJsonObject().get("relationship-label").getAsString().equals("locatedIn"));
+       }
+       
+       @Test
+       public void verifyPserverRelatedToComplexLabel () throws AAIFormatVertexException, AAIException, AAIFormatQueryResultFormatNotSupported {
+               assertTrue(rawFormat.createRelationshipObject(pserver).get(0).getAsJsonObject().get("node-type").getAsString().equals("complex"));
+       }
+       
+       @Test
+       public void verifyComplexRelatedToHasEdgeLabel () throws AAIFormatVertexException, AAIException, AAIFormatQueryResultFormatNotSupported {
+               assertTrue(rawFormat.createRelationshipObject(complex).get(0).getAsJsonObject().get("relationship-label").getAsString().equals("locatedIn"));
+       }
+       
+       @Test
+       public void verifyComplexRelatedToPserverLabel () throws AAIFormatVertexException, AAIException, AAIFormatQueryResultFormatNotSupported {
+               assertTrue(rawFormat.createRelationshipObject(complex).get(0).getAsJsonObject().get("node-type").getAsString().equals("pserver"));
+       }
+
+       public void createLoaderEngineSetup() throws AAIException {
+
+               if (loader == null) {
+                       loader = LoaderFactory.createLoaderForVersion(factoryType, version);
+                       dbEngine = spy(new TitanDBEngine(QueryStyle.TRAVERSAL, DBConnectionType.CACHED, loader));
+                       serializer = new DBSerializer(version, dbEngine, factoryType, "Junit");
+                       rawFormat = new RawFormat.Builder(loader, serializer, urlBuilder).build();
+
+                       TransactionalGraphEngine.Admin spyAdmin = spy(dbEngine.asAdmin());
+
+                       when(dbEngine.tx()).thenReturn(graph);
+                       when(dbEngine.asAdmin()).thenReturn(spyAdmin);
+
+                       when(spyAdmin.getReadOnlyTraversalSource())
+                                       .thenReturn(graph.traversal(GraphTraversalSource.build().with(ReadOnlyStrategy.instance())));
+                       when(spyAdmin.getTraversalSource()).thenReturn(graph.traversal());
+               }
+       }
+}
diff --git a/aai-core/src/test/java/org/onap/aai/util/FormatDateTest.java b/aai-core/src/test/java/org/onap/aai/util/FormatDateTest.java
new file mode 100644 (file)
index 0000000..6635f25
--- /dev/null
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.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.onap.aai.util;
+
+
+import java.time.zone.ZoneRulesException;
+
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+@Ignore
+public class FormatDateTest {
+
+
+       @Test(expected=IllegalArgumentException.class)
+       public void testExceptionThrownWhenInvalidPatternIsPassed()
+       {
+               FormatDate formatDate = new FormatDate("XX/TT/GGGG");
+               formatDate.getDateTime();
+       }
+       
+       @Test
+       public void correctPattern()
+       {
+               FormatDate formatDate = new FormatDate("dd/mm/yyyy");
+               Assert.assertNotNull(formatDate.getDateTime());
+       }
+       
+       @Test(expected=IllegalArgumentException.class)
+       public void invalidPattern()
+       {
+               FormatDate formatDate = new FormatDate("XX/TT/GGGG","GMT");
+               formatDate.getDateTime();
+       }
+       
+       @Test(expected=ZoneRulesException.class)
+       public void invalidZone()
+       {
+               FormatDate formatDate = new FormatDate("dd/mm/yyyy","IST");
+               formatDate.getDateTime();
+       }
+       
+       @Test(expected=IllegalArgumentException.class)
+       public void testExceptionThrownWhenInvalidPatternAndZoneIsPassed()
+       {
+               FormatDate formatDate = new FormatDate("XX/TT/GGGG","IST");
+               formatDate.getDateTime();
+       }
+       
+       @Test
+       public void correctPatternAndZone()
+       {
+               FormatDate formatDate = new FormatDate("dd/mm/yyyy","GMT");
+               Assert.assertNotNull(formatDate.getDateTime());
+       }
+}
index 270d96a..30fe6b6 100644 (file)
                                                <xml-property name="description" value="A keyword provided by A&amp;AI to indicate type of node." />
                                        </xml-properties>
                                </xml-element>
+                               <xml-element java-attribute="relationshipLabel" name="relationship-label" type="java.lang.String">
+                                       <xml-properties>
+                                               <xml-property name="description" value="The edge lable for this relationship." />
+                                       </xml-properties>
+                               </xml-element>
                                <xml-element java-attribute="relatedLink" name="related-link" type="java.lang.String">
                                        <xml-properties>
                                                <xml-property name="description" value="URL to the object in A&amp;AI." />
diff --git a/aai-core/src/test/resources/dbedgerules/DbEdgeRules_TraversalQueryTest.json b/aai-core/src/test/resources/dbedgerules/DbEdgeRules_TraversalQueryTest.json
new file mode 100644 (file)
index 0000000..0b79192
--- /dev/null
@@ -0,0 +1,145 @@
+{
+       "rules": [
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "vnfc",
+                       "to": "generic-vnf",
+                       "label": "re-uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE"
+               },
+               {
+                       "from": "vce",
+                       "to": "vnfc",
+                       "label": "vce-vnfc",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "pserver",
+                       "to": "vce",
+                       "label": "pserver-vce",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "generic-vnf-pserver-A",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "pserver",
+                       "label": "generic-vnf-pserver-B",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE"
+               },
+               {
+                       "from": "complex",
+                       "to": "generic-vnf",
+                       "label": "complex-generic-vnf-A",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "complex",
+                       "to": "generic-vnf",
+                       "label": "complex-generic-vnf-B",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "usesLogicalLink",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "sourceLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "false"
+               },
+               {
+                       "from": "l-interface",
+                       "to": "logical-link",
+                       "label": "targetLInterface",
+                       "direction": "OUT",
+                       "multiplicity": "MANY2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "false"
+               },      
+               {
+                       "from": "pserver",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               }
+       ]
+}
index 957129b..76059ed 100644 (file)
                        "SVC-INFRA": "NONE",
                        "prevent-delete": "NONE"
                },
+               {
+                       "from": "foo",
+                       "to": "bar",
+                       "label": "eatz",
+                       "direction": "IN",
+                       "multiplicity": "One2Many",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE"
+               },
                {
                        "from": "foo",
                        "to": "baz",
                        "delete-other-v": "${direction}",
                        "SVC-INFRA": "NONE",
                        "prevent-delete": "NONE"
+               },              
+               {
+                       "from": "a",
+                       "to": "b",
+                       "label": "c",
+                       "direction": "OUT",
+                       "multiplicity": "One2Many",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default": "false"
+               },
+               {
+                       "from": "a",
+                       "to": "b",
+                       "label": "d",
+                       "direction": "IN",
+                       "multiplicity": "One2Many",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default" : "true"
+               },
+                               {
+                       "from": "z",
+                       "to": "y",
+                       "label": "x",
+                       "direction": "OUT",
+                       "multiplicity": "One2Many",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE"
+               },
+               {
+                       "from": "y",
+                       "to": "z",
+                       "label": "w",
+                       "direction": "IN",
+                       "multiplicity": "One2Many",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "NONE",
+                       "prevent-delete": "NONE",
+                       "default" : "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE",
+                       "default": "true"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "re-uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE"
+               },
+               {
+                       "from": "generic-vnf",
+                       "to": "vnfc",
+                       "label": "over-uses",
+                       "direction": "OUT",
+                       "multiplicity": "ONE2MANY",
+                       "contains-other-v": "NONE",
+                       "delete-other-v": "${direction}",
+                       "SVC-INFRA": "${direction}",
+                       "prevent-delete": "NONE"
                }
        ]
 }
\ No newline at end of file
index 346a825..9d25a6f 100644 (file)
@@ -150,6 +150,13 @@ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
             </xs:appinfo>
           </xs:annotation>
         </xs:element>
+        <xs:element name="relationship-label" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:appinfo>
+              <annox:annotate target="field">@org.onap.aai.annotations.Metadata(description="The edge label for this relationship.")</annox:annotate>
+            </xs:appinfo>
+          </xs:annotation>
+        </xs:element>
         <xs:element name="related-link" type="xs:string" minOccurs="0">
           <xs:annotation>
             <xs:appinfo>
index 9f9b213..008e7f9 100644 (file)
                                                <xml-property name="description" value="A keyword provided by A&amp;AI to indicate type of node." />
                                        </xml-properties>
                                </xml-element>
+                               <xml-element java-attribute="relationshipLabel" name="relationship-label" type="java.lang.String">
+                                       <xml-properties>
+                                               <xml-property name="description" value="The edge label for this relationship." />
+                                       </xml-properties>
+                               </xml-element>
                                <xml-element java-attribute="relatedLink" name="related-link" type="java.lang.String">
                                        <xml-properties>
                                                <xml-property name="description" value="URL to the object in A&amp;AI." />