Allow ingestion of edge schema at deploy time 75/36275/1
authorsblimkie <steven.blimkie@amdocs.com>
Fri, 16 Mar 2018 19:29:41 +0000 (15:29 -0400)
committersblimkie <steven.blimkie@amdocs.com>
Fri, 16 Mar 2018 19:29:41 +0000 (15:29 -0400)
Gizmo to optionally allow a deployer to drop in a custom
edge schema at deploy time.

Change-Id: I5b7ccca79bc4fdb79629d308f517d4446adeb971
Issue-ID: AAI-889
Signed-off-by: sblimkie <steven.blimkie@amdocs.com>
src/main/java/org/onap/schema/RelationshipSchemaLoader.java
src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java
src/test/java/org/onap/schema/RelationshipSchemaTest.java
src/test/resources/model/DbEdgeRules_v11.json [deleted file]

index 761f6ad..0e10fc3 100644 (file)
@@ -29,8 +29,10 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.SortedSet;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -48,6 +50,7 @@ import org.onap.crud.exception.CrudException;
 import org.onap.crud.logging.CrudServiceMsgs;
 import org.onap.crud.util.CrudServiceConstants;
 import org.onap.crud.util.FileWatcher;
+import org.springframework.core.io.Resource;
 import org.springframework.core.io.UrlResource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 import org.springframework.core.io.support.ResourcePatternResolver;
@@ -71,7 +74,7 @@ public class RelationshipSchemaLoader {
   }
 
   public synchronized static void loadModels(String version) throws CrudException {
-    String pattern = String.format(".*(%s)" + fileExt, version);
+    String pattern = String.format("DbEdgeRules.*(%s)" + fileExt, version);
     load(Pattern.compile(pattern), Pattern.compile(edgePropsFiles + version + fileExt));
   }
 
@@ -111,20 +114,31 @@ public class RelationshipSchemaLoader {
   private static void load(Pattern rulesPattern, Pattern edgePropsPattern) throws CrudException {
     ClassLoader cl = RelationshipSchemaLoader.class.getClassLoader();
     ResourcePatternResolver rulesResolver = new PathMatchingResourcePatternResolver(cl);
-    List<Object> rulesFiles;
+    List<Object> rulesFiles = new ArrayList<Object>();
+    Set<String> existingFiles = new HashSet<String>();
     String rulesDir = CrudServiceConstants.CRD_HOME_MODEL;
     try {
 
-      // getResources method returns objects of type "Resource"
-      // 1. We are getting all the objects from the classpath which has
-      // "DbEdgeRules" in the name.
-      // 2. We run them through a filter and return only the objects which match
-      // the supplied pattern "p"
-      // 3. We then collect the objects in a list. At this point we have a list
-      // of the kind of files we require.
-      rulesFiles = Arrays.stream(rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt))
-          .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList());
-
+      // Allow additional DBEdgeRule files to be dropped in manually (in addition to those found on the classpath)
+      File[] edgeRuleFileList = new File(rulesDir).listFiles((d, name) -> rulesPattern.matcher(name).matches());
+      for (File file : edgeRuleFileList) {
+        rulesFiles.add(file);
+        existingFiles.add(filename(file));
+      }
+      
+      // Get DBEdgeRules from the jar on the classpath.  Don't include any that conflict with files which 
+      // were dropped manually.
+      Resource[] rawResourceList = rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt);
+      List<Resource> prunedResourceList = new ArrayList<Resource>();
+      for (Resource resource : rawResourceList) {
+        if (!existingFiles.contains(filename(resource))) {
+          prunedResourceList.add(resource);
+        }
+      }
+      
+      rulesFiles.addAll(Arrays.stream(prunedResourceList.toArray(new Resource[prunedResourceList.size()]))
+          .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList()));
+      
       // This gets all the objects of type "File" from external directory (not
       // on the classpath)
       // 1. From an external directory (one not on the classpath) we get all the
@@ -135,7 +149,7 @@ public class RelationshipSchemaLoader {
       // this list
       // to the previous collection (rulesFiles)
       rulesFiles
-          .addAll(Arrays.stream(new File(rulesDir).listFiles((d, name) -> edgePropsPattern.matcher(name).matches()))
+          .addAll(Arrays.stream(new File(rulesDir).listFiles( (d, name) -> edgePropsPattern.matcher(name).matches()  ))
               .collect(Collectors.toList()));
 
       if (rulesFiles.isEmpty()) {
index 565a215..22fead0 100644 (file)
@@ -45,12 +45,14 @@ public class RelationshipSchemaLoaderTest {
 
     @Test
     public void loadModels() throws Exception {
+        RelationshipSchemaLoader.resetVersionContextMap();
         RelationshipSchemaLoader.loadModels();
         assertFalse( RelationshipSchemaLoader.getVersionContextMap().keySet().isEmpty());
     }
 
     @Test
     public void loadModelsWithAVersion() throws Exception {
+        RelationshipSchemaLoader.resetVersionContextMap();
         RelationshipSchemaLoader.loadModels("v11");
         assertEquals(1, RelationshipSchemaLoader.getVersionContextMap().keySet().size());
         assertEquals("v11",  RelationshipSchemaLoader.getLatestSchemaVersion());
@@ -58,14 +60,25 @@ public class RelationshipSchemaLoaderTest {
 
     @Test
     public void getSchemaForVersion() throws Exception {
+        RelationshipSchemaLoader.resetVersionContextMap();
         RelationshipSchemaLoader.loadModels("v11");
         String version = RelationshipSchemaLoader.getLatestSchemaVersion();
         RelationshipSchema g = RelationshipSchemaLoader.getSchemaForVersion(version);
         assertNotNull(g.lookupRelationType("org.onap.relationships.inventory.BelongsTo"));
     }
 
+    public void getSchemaForVersionManualFile() throws Exception {
+      RelationshipSchemaLoader.resetVersionContextMap();
+      RelationshipSchemaLoader.loadModels("v10");
+      String version = RelationshipSchemaLoader.getLatestSchemaVersion();
+      RelationshipSchema g = RelationshipSchemaLoader.getSchemaForVersion(version);
+      assertNotNull(g.lookupRelationType("locatedIn"));
+    }
+
+
     @Test
     public void getSchemaForVersionFail() throws Exception {
+        RelationshipSchemaLoader.resetVersionContextMap();
         RelationshipSchemaLoader.loadModels();
         try {
             RelationshipSchemaLoader.getSchemaForVersion("v1");
@@ -76,6 +89,7 @@ public class RelationshipSchemaLoaderTest {
 
     @Test
     public void setVersionContextMap() throws Exception {
+        RelationshipSchemaLoader.resetVersionContextMap();
         ArrayList<String> jsonString = new ArrayList<String>();
         String rules = "{" +
                 "\"rules\": [" +
index 7d54a30..ce8559a 100644 (file)
@@ -24,6 +24,8 @@ import org.apache.commons.io.IOUtils;
 import org.junit.Test;
 import org.onap.crud.exception.CrudException;
 
+import com.att.aft.dme2.internal.apache.commons.lang.ArrayUtils;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -60,17 +62,17 @@ public class RelationshipSchemaTest {
     public void shouldContainValidTypes() throws Exception {
         Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
         loadRelations(versionContextMap);
-        assertTrue(versionContextMap.get("v11").isValidType("groupsResourcesIn"));
-        assertTrue(versionContextMap.get("v11").isValidType("uses"));
-        assertFalse(versionContextMap.get("v11").isValidType("notValidType"));
+        assertTrue(versionContextMap.get("v10").isValidType("groupsResourcesIn"));
+        assertTrue(versionContextMap.get("v10").isValidType("uses"));
+        assertFalse(versionContextMap.get("v10").isValidType("notValidType"));
     }
 
     @Test
     public void shouldLookUpByRelation() throws Exception {
         Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
         loadRelations(versionContextMap);
-        assertNotNull(versionContextMap.get("v11").lookupRelation("availability-zone:complex:groupsResourcesIn"));
-        assertTrue(versionContextMap.get("v11")
+        assertNotNull(versionContextMap.get("v10").lookupRelation("availability-zone:complex:groupsResourcesIn"));
+        assertTrue(versionContextMap.get("v10")
                 .lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("prevent-delete"));
     }
 
@@ -78,8 +80,8 @@ public class RelationshipSchemaTest {
     public void shouldLookUpByRelationType() throws Exception {
         Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
         loadRelations(versionContextMap);
-        assertNotNull(versionContextMap.get("v11").lookupRelationType("groupsResourcesIn"));
-        assertTrue(versionContextMap.get("v11")
+        assertNotNull(versionContextMap.get("v10").lookupRelationType("groupsResourcesIn"));
+        assertTrue(versionContextMap.get("v10")
                 .lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("prevent-delete"));
     }
 
@@ -88,7 +90,14 @@ public class RelationshipSchemaTest {
         File dir = new File(classLoader.getResource("model").getFile());
         File[] allFiles = dir.listFiles((d, name) ->
                 (propsFilePattern.matcher(name).matches() || rulesFilePattern.matcher(name).matches()));
-
+        
+        // Special handling for the v12 file, as it is used for a special test
+        for (File f : allFiles) {
+          if (f.getName().equals("edge_properties_v11.json")) {
+            allFiles = (File[]) ArrayUtils.removeElement(allFiles, f);
+          }
+        }
+        
         Arrays.stream(allFiles).sorted(Comparator.comparing(File::getName))
                 .collect(Collectors.groupingBy(f -> myMatcher(versionPattern, f.getName())))
                 .forEach((e, f) -> map.put(e, jsonFilesLoader(f)));
@@ -104,7 +113,9 @@ public class RelationshipSchemaTest {
         }
 
         try {
-            rsSchema = new RelationshipSchema(fileContents);
+            if (fileContents.size() == 2) {
+                rsSchema = new RelationshipSchema(fileContents);
+            }
         } catch (CrudException e) {
             e.printStackTrace();
         } catch (IOException e) {
diff --git a/src/test/resources/model/DbEdgeRules_v11.json b/src/test/resources/model/DbEdgeRules_v11.json
deleted file mode 100644 (file)
index d24acd7..0000000
+++ /dev/null
@@ -1,1962 +0,0 @@
-{
-       "rules": [
-               {
-                       "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" : "auth-info-item",
-                       "to" : "tenant",
-                       "label" : "defaultTenant",
-                       "direction" : "OUT",
-                       "multiplicity" : "One2One",
-                       "isParent" : "false",
-                       "usesResource" : "false",
-                       "hasDelTarget" : "false",
-                       "SVC-INFRA" : "false"
-               },
-               {
-                       "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": "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": "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": "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": "tenant",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "!${direction}",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "auth-info-item",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "!${direction}",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "image",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "flavor",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "availability-zone",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "volume-group",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "from": "cloud-region",
-                       "to": "group-assignment",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "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": "complex",
-                       "to": "ctag-pool",
-                       "label": "hasCtagPool",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "customer",
-                       "to": "service-subscription",
-                       "label": "subscribesTo",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "!${direction}",
-                       "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": "generic-vnf",
-                       "to": "l-interface",
-                       "label": "hasLInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "generic-vnf",
-                       "to": "lag-interface",
-                       "label": "hasLAGInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "image",
-                       "to": "metadatum",
-                       "label": "hasMetaDatum",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "l-interface",
-                       "to": "l3-interface-ipv4-address-list",
-                       "label": "hasIpAddress",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "l-interface",
-                       "to": "l-interface",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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"
-               },
-               {
-                       "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": "l-interface",
-                       "to": "vlan",
-                       "label": "hasVlan",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "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-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": "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": "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": "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": "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": "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": "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": "l3-network",
-                       "to": "subnet",
-                       "label": "hasSubnet",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "l3-network",
-                       "to": "ctag-assignment",
-                       "label": "hasCtagAssignment",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "l3-network",
-                       "to": "segmentation-assignment",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "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": "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": "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": "lag-interface",
-                       "to": "l-interface",
-                       "label": "hasLInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "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": "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": "model",
-                       "to": "model-ver",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "model-ver",
-                       "to": "model-element",
-                       "label": "startsWith",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "model-ver",
-                       "to": "metadatum",
-                       "label": "hasMetaData",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "model-element",
-                       "to": "model-constraint",
-                       "label": "uses",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "model-constraint",
-                       "to": "constrained-element-set",
-                       "label": "uses",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "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": "named-query",
-                       "to": "named-query-element",
-                       "label": "startsWith",
-                       "direction": "OUT",
-                       "multiplicity": "One2One",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "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": "named-query-element",
-                       "to": "property-constraint",
-                       "label": "uses",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "newvce",
-                       "to": "l-interface",
-                       "label": "hasLInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "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": "p-interface",
-                       "to": "l-interface",
-                       "label": "hasLInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "port-group",
-                       "to": "cvlan-tag",
-                       "label": "hasCTag",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "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": "lag-interface",
-                       "label": "hasLAGInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "pserver",
-                       "to": "p-interface",
-                       "label": "hasPinterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "pnf",
-                       "to": "p-interface",
-                       "label": "hasPinterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "pnf",
-                       "to": "lag-interface",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "pnf",
-                       "to": "zone",
-                       "label": "isMemberOf",
-                       "direction": "OUT",
-                       "multiplicity": "Many2One",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "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": "service-subscription",
-                       "to": "service-instance",
-                       "label": "hasInstance",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "!${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "site-pair-set",
-                       "to": "routing-instance",
-                       "label": "hasRoutingInstance",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "routing-instance",
-                       "to": "site-pair",
-                       "label": "hasSitePair",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "site-pair",
-                       "to": "class-of-service",
-                       "label": "hasClassOfService",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "tenant",
-                       "to": "vserver",
-                       "label": "owns",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "!${direction}",
-                       "prevent-delete": "${direction}"
-               },
-               {
-                       "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": "complex",
-                       "label": "locatedIn",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "!${direction}"
-               },
-               {
-                       "from": "vce",
-                       "to": "port-group",
-                       "label": "hasPortGroup",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "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": "vlan",
-                       "to": "l3-interface-ipv4-address-list",
-                       "label": "hasIpAddress",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "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": "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": "vpls-pe",
-                       "to": "p-interface",
-                       "label": "hasPinterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "vpls-pe",
-                       "to": "lag-interface",
-                       "label": "hasLAGinterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "vserver",
-                       "to": "image",
-                       "label": "hasImage",
-                       "direction": "OUT",
-                       "multiplicity": "Many2One",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "!${direction}"
-               },
-               {
-                       "from": "vserver",
-                       "to": "l-interface",
-                       "label": "hasLInterface",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "vserver",
-                       "to": "volume",
-                       "label": "hasVolume",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "vserver",
-                       "to": "snapshot",
-                       "label": "uses",
-                       "direction": "OUT",
-                       "multiplicity": "One2One",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "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": "service-instance",
-                       "to": "metadatum",
-                       "label": "hasMetaData",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "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": "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": "service-instance",
-                       "label": "dependsOn",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "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": "connector",
-                       "to": "metadatum",
-                       "label": "hasMetaData",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "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": "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": "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": "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": "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": "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": "ipsec-configuration",
-                       "to": "vig-server",
-                       "label": "hasVigServer",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "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": "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": "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": "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": "vf-module",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "${direction}",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "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": "vpn-binding",
-                       "to": "route-target",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "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": "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": "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": "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": "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": "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": "instance-group",
-                       "label": "isMemberOf",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "NONE",
-                       "delete-other-v": "NONE",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "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": "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": "generic-vnf",
-                       "to": "entitlement",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "vce",
-                       "to": "entitlement",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "SVC-INFRA": "NONE",
-                       "prevent-delete": "NONE"
-               },
-               {
-                       "from": "vce",
-                       "to": "license",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2Many",
-                       "contains-other-v": "${direction}",
-                       "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": "service-instance",
-                       "to": "allotted-resource",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "Many2Many",
-                       "contains-other-v": "${direction}",
-                       "delete-other-v": "NONE",
-                       "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": "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": "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": "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": "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": "p-interface",
-                       "to": "sriov-pf",
-                       "label": "has",
-                       "direction": "OUT",
-                       "multiplicity": "One2One",
-                       "contains-other-v": "${direction}",
-                       "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"
-               }
-       ]
-}