Repository: atlas
Updated Branches:
  refs/heads/branch-1.0 943e5c711 -> ee22f0b14


ATLAS-2984: export should include type defintions of relationships referenced 
by entities

(cherry picked from commit e4921452ebea5b338c07bbc6f886c44c8843f64b)


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/ee22f0b1
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/ee22f0b1
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/ee22f0b1

Branch: refs/heads/branch-1.0
Commit: ee22f0b140f04aa4339b1935f654a380f74e8fc4
Parents: 943e5c7
Author: Madhan Neethiraj <mad...@apache.org>
Authored: Thu Nov 29 13:10:58 2018 -0800
Committer: Madhan Neethiraj <mad...@apache.org>
Committed: Thu Nov 29 20:34:18 2018 -0800

----------------------------------------------------------------------
 .../atlas/repository/impexp/ExportService.java  | 30 ++++++++++++++++++++
 .../repository/impexp/ExportTypeProcessor.java  | 24 ++++++++++++++++
 .../impexp/ImportTypeDefProcessor.java          |  1 +
 3 files changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/ee22f0b1/repository/src/main/java/org/apache/atlas/repository/impexp/ExportService.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ExportService.java
 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ExportService.java
index 3558d2a..5632520 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ExportService.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ExportService.java
@@ -32,6 +32,7 @@ import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
 import org.apache.atlas.model.typedef.AtlasClassificationDef;
 import org.apache.atlas.model.typedef.AtlasEntityDef;
 import org.apache.atlas.model.typedef.AtlasEnumDef;
+import org.apache.atlas.model.typedef.AtlasRelationshipDef;
 import org.apache.atlas.model.typedef.AtlasStructDef;
 import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
 import org.apache.atlas.model.typedef.AtlasTypesDef;
@@ -43,6 +44,7 @@ import org.apache.atlas.type.AtlasClassificationType;
 import org.apache.atlas.type.AtlasEntityType;
 import org.apache.atlas.type.AtlasEnumType;
 import org.apache.atlas.type.AtlasMapType;
+import org.apache.atlas.type.AtlasRelationshipType;
 import org.apache.atlas.type.AtlasStructType;
 import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
 import org.apache.atlas.type.AtlasType;
@@ -175,6 +177,12 @@ public class ExportService {
 
             typesDef.getEnumDefs().add(enumDef);
         }
+
+        for (String relationshipType : context.relationshipTypes) {
+            AtlasRelationshipDef relationshipDef = 
typeRegistry.getRelationshipDefByName(relationshipType);
+
+            typesDef.getRelationshipDefs().add(relationshipDef);
+        }
     }
 
     private AtlasExportResult.OperationStatus[] 
processItems(AtlasExportRequest request, ExportContext context) {
@@ -611,6 +619,8 @@ public class ExportService {
             addStructType((AtlasStructType)type, context);
         } else if (type instanceof AtlasEnumType) {
             addEnumType((AtlasEnumType)type, context);
+        } else if (type instanceof AtlasRelationshipType) {
+            addRelationshipType((AtlasRelationshipType)type, context);
         }
     }
 
@@ -619,6 +629,7 @@ public class ExportService {
             context.entityTypes.add(entityType.getTypeName());
 
             addAttributeTypes(entityType, context);
+            addRelationshipTypes(entityType, context);
 
             if (CollectionUtils.isNotEmpty(entityType.getAllSuperTypes())) {
                 for (String superType : entityType.getAllSuperTypes()) {
@@ -656,12 +667,30 @@ public class ExportService {
         }
     }
 
+    private void addRelationshipType(AtlasRelationshipType relationshipType, 
ExportContext context) {
+        if 
(!context.relationshipTypes.contains(relationshipType.getTypeName())) {
+            context.relationshipTypes.add(relationshipType.getTypeName());
+
+            addAttributeTypes(relationshipType, context);
+            addEntityType(relationshipType.getEnd1Type(), context);
+            addEntityType(relationshipType.getEnd2Type(), context);
+        }
+    }
+
     private void addAttributeTypes(AtlasStructType structType, ExportContext 
context) {
         for (AtlasAttributeDef attributeDef : 
structType.getStructDef().getAttributeDefs()) {
             addType(attributeDef.getTypeName(), context);
         }
     }
 
+    private void addRelationshipTypes(AtlasEntityType entityType, 
ExportContext context) {
+        for (List<AtlasRelationshipType> relationshipTypes : 
entityType.getRelationshipAttributesType().values()) {
+            for (AtlasRelationshipType relationshipType : relationshipTypes) {
+                addRelationshipType(relationshipType, context);
+            }
+        }
+    }
+
     private List<Map<String, Object>> executeGremlinQuery(String query, 
ExportContext context) {
         try {
             return (List<Map<String, Object>>) 
atlasGraph.executeGremlinScript(context.scriptEngine, context.bindings, query, 
false);
@@ -724,6 +753,7 @@ public class ExportService {
         final Set<String>                     classificationTypes = new 
HashSet<>();
         final Set<String>                     structTypes         = new 
HashSet<>();
         final Set<String>                     enumTypes           = new 
HashSet<>();
+        final Set<String>                     relationshipTypes   = new 
HashSet<>();
         final AtlasExportResult               result;
         private final ZipSink                 sink;
 

http://git-wip-us.apache.org/repos/asf/atlas/blob/ee22f0b1/repository/src/main/java/org/apache/atlas/repository/impexp/ExportTypeProcessor.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ExportTypeProcessor.java
 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ExportTypeProcessor.java
index 6b5db61..f528b17 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ExportTypeProcessor.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ExportTypeProcessor.java
@@ -28,6 +28,7 @@ import org.apache.atlas.type.AtlasClassificationType;
 import org.apache.atlas.type.AtlasEntityType;
 import org.apache.atlas.type.AtlasEnumType;
 import org.apache.atlas.type.AtlasMapType;
+import org.apache.atlas.type.AtlasRelationshipType;
 import org.apache.atlas.type.AtlasStructType;
 import org.apache.atlas.type.AtlasType;
 import org.apache.atlas.type.AtlasTypeRegistry;
@@ -35,6 +36,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.List;
+
 class ExportTypeProcessor {
     private static final Logger LOG = 
LoggerFactory.getLogger(ExportTypeProcessor.class);
 
@@ -106,6 +109,8 @@ class ExportTypeProcessor {
             addStructType((AtlasStructType)type, context);
         } else if (type instanceof AtlasEnumType) {
             addEnumType((AtlasEnumType)type, context);
+        } else if (type instanceof AtlasRelationshipType) {
+            addRelationshipType((AtlasRelationshipType)type, context);
         }
     }
 
@@ -114,6 +119,7 @@ class ExportTypeProcessor {
             context.entityTypes.add(entityType.getTypeName());
 
             addAttributeTypes(entityType, context);
+            addRelationshipTypes(entityType, context);
 
             if (CollectionUtils.isNotEmpty(entityType.getAllSuperTypes())) {
                 for (String superType : entityType.getAllSuperTypes()) {
@@ -151,9 +157,27 @@ class ExportTypeProcessor {
         }
     }
 
+    private void addRelationshipType(AtlasRelationshipType relationshipType, 
ExportService.ExportContext context) {
+        if 
(!context.relationshipTypes.contains(relationshipType.getTypeName())) {
+            context.relationshipTypes.add(relationshipType.getTypeName());
+
+            addAttributeTypes(relationshipType, context);
+            addEntityType(relationshipType.getEnd1Type(), context);
+            addEntityType(relationshipType.getEnd2Type(), context);
+        }
+    }
+
     private void addAttributeTypes(AtlasStructType structType, 
ExportService.ExportContext context) {
         for (AtlasStructDef.AtlasAttributeDef attributeDef : 
structType.getStructDef().getAttributeDefs()) {
             addType(attributeDef.getTypeName(), context);
         }
     }
+
+    private void addRelationshipTypes(AtlasEntityType entityType, 
ExportService.ExportContext context) {
+        for (List<AtlasRelationshipType> relationshipTypes : 
entityType.getRelationshipAttributesType().values()) {
+            for (AtlasRelationshipType relationshipType : relationshipTypes) {
+                addRelationshipType(relationshipType, context);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/ee22f0b1/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTypeDefProcessor.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTypeDefProcessor.java
 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTypeDefProcessor.java
index ab66460..c217937 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTypeDefProcessor.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTypeDefProcessor.java
@@ -75,5 +75,6 @@ public class ImportTypeDefProcessor {
         result.incrementMeticsCounter("typedef:enum", 
typeDefinitionMap.getEnumDefs().size());
         result.incrementMeticsCounter("typedef:entitydef", 
typeDefinitionMap.getEntityDefs().size());
         result.incrementMeticsCounter("typedef:struct", 
typeDefinitionMap.getStructDefs().size());
+        result.incrementMeticsCounter("typedef:relationship", 
typeDefinitionMap.getRelationshipDefs().size());
     }
 }

Reply via email to