You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/02/04 19:19:27 UTC

incubator-atlas git commit: ATLAS-1522: v1 to v2 entity converter fixes

Repository: incubator-atlas
Updated Branches:
  refs/heads/master d8c2a10e0 -> 4f4ab9b98


ATLAS-1522: v1 to v2 entity converter fixes


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

Branch: refs/heads/master
Commit: 4f4ab9b98d2f0cfa9b6e9fddac0e993c2b1203c1
Parents: d8c2a10
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Fri Feb 3 20:58:50 2017 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Fri Feb 3 20:58:50 2017 -0800

----------------------------------------------------------------------
 .../adapters/AtlasEntityFormatConverter.java    | 67 ++++++++++----------
 .../web/adapters/AtlasFormatConverter.java      | 25 ++------
 .../web/adapters/AtlasInstanceRestAdapters.java |  5 +-
 .../adapters/AtlasStructFormatConverter.java    | 15 ++---
 .../org/apache/atlas/web/rest/EntityREST.java   | 38 +++++------
 5 files changed, 69 insertions(+), 81 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/4f4ab9b9/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasEntityFormatConverter.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasEntityFormatConverter.java b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasEntityFormatConverter.java
index 8f85052..6818899 100644
--- a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasEntityFormatConverter.java
+++ b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasEntityFormatConverter.java
@@ -54,7 +54,7 @@ public class AtlasEntityFormatConverter extends AtlasStructFormatConverter {
 
     @Override
     public Object fromV1ToV2(Object v1Obj, AtlasType type, ConverterContext context) throws AtlasBaseException {
-        Object ret = null;
+        AtlasObjectId ret = null;
 
         if (v1Obj != null) {
             AtlasEntityType entityType = (AtlasEntityType) type;
@@ -64,43 +64,46 @@ public class AtlasEntityFormatConverter extends AtlasStructFormatConverter {
 
                 ret = new AtlasObjectId(id.getTypeName(), id._getId());
             } else if (v1Obj instanceof IReferenceableInstance) {
-                IReferenceableInstance entity    = (IReferenceableInstance) v1Obj;
-                Map<String, Object>    v1Attribs = null;
+                IReferenceableInstance entRef = (IReferenceableInstance) v1Obj;
 
-                ret = new AtlasObjectId(entity.getTypeName(), entity.getId()._getId());
+                ret = new AtlasObjectId(entRef.getTypeName(), entRef.getId()._getId());
 
-                try {
-                    v1Attribs = entity.getValuesMap();
-                } catch (AtlasException excp) {
-                    LOG.error("IReferenceableInstance.getValuesMap() failed", excp);
-                }
+                if (!context.entityExists(ret.getGuid())) {
+                    Map<String, Object> v1Attribs = null;
 
-                AtlasEntityWithAssociations ret1 =  new AtlasEntityWithAssociations(entity.getTypeName(), super.fromV1ToV2(entityType, v1Attribs, context));
-                ret1.setGuid(entity.getId()._getId());
-                ret1.setStatus(convertState(entity.getId().getState()));
-                AtlasSystemAttributes systemAttributes = entity.getSystemAttributes();
-                ret1.setCreatedBy(systemAttributes.createdBy);
-                ret1.setCreateTime(systemAttributes.createdTime);
-                ret1.setUpdatedBy(systemAttributes.modifiedBy);
-                ret1.setUpdateTime(systemAttributes.modifiedTime);
-                ret1.setVersion(new Long(entity.getId().version));
-
-                if (CollectionUtils.isNotEmpty(entity.getTraits())) {
-                    List<AtlasClassification> classifications = new ArrayList<>();
-                    AtlasFormatConverter      traitConverter  = converterRegistry.getConverter(TypeCategory.CLASSIFICATION);
-
-                    for (String traitName : entity.getTraits()) {
-                        IStruct             trait          = entity.getTrait(traitName);
-                        AtlasType           classifiType   = typeRegistry.getType(traitName);
-                        AtlasClassification classification = (AtlasClassification) traitConverter.fromV1ToV2(trait, classifiType, context);
-
-                        classifications.add(classification);
+                    try {
+                        v1Attribs = entRef.getValuesMap();
+                    } catch (AtlasException excp) {
+                        LOG.error("IReferenceableInstance.getValuesMap() failed", excp);
                     }
 
-                    ret1.setClassifications(classifications);
-                }
+                    AtlasEntityWithAssociations entity = new AtlasEntityWithAssociations(entRef.getTypeName(),
+                                                                      super.fromV1ToV2(entityType, v1Attribs, context));
+                    entity.setGuid(entRef.getId()._getId());
+                    entity.setStatus(convertState(entRef.getId().getState()));
+                    entity.setCreatedBy(entRef.getSystemAttributes().createdBy);
+                    entity.setCreateTime(entRef.getSystemAttributes().createdTime);
+                    entity.setUpdatedBy(entRef.getSystemAttributes().modifiedBy);
+                    entity.setUpdateTime(entRef.getSystemAttributes().modifiedTime);
+                    entity.setVersion(new Long(entRef.getId().version));
+
+                    if (CollectionUtils.isNotEmpty(entRef.getTraits())) {
+                        List<AtlasClassification> classifications = new ArrayList<>();
+                        AtlasFormatConverter traitConverter = converterRegistry.getConverter(TypeCategory.CLASSIFICATION);
+
+                        for (String traitName : entRef.getTraits()) {
+                            IStruct trait = entRef.getTrait(traitName);
+                            AtlasType classifiType = typeRegistry.getType(traitName);
+                            AtlasClassification classification = (AtlasClassification) traitConverter.fromV1ToV2(trait, classifiType, context);
+
+                            classifications.add(classification);
+                        }
+
+                        entity.setClassifications(classifications);
+                    }
 
-                context.addEntity(ret1);
+                    context.addEntity(entity);
+                }
             } else {
                 throw new AtlasBaseException(AtlasErrorCode.UNEXPECTED_TYPE, "IReferenceableInstance",
                                              v1Obj.getClass().getCanonicalName());

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/4f4ab9b9/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasFormatConverter.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasFormatConverter.java b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasFormatConverter.java
index 1272543..a4799e8 100644
--- a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasFormatConverter.java
+++ b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasFormatConverter.java
@@ -46,18 +46,14 @@ public interface AtlasFormatConverter {
         }
 
         public void addEntity(AtlasEntity entity) {
-            if (entities == null) {
-                entities = new HashMap<>();
+            if (entity instanceof AtlasEntityWithAssociations) {
+                this.addEntity((AtlasEntityWithAssociations)entity);
+            } else {
+                this.addEntity(new AtlasEntityWithAssociations(entity));
             }
-            entities.put(entity.getGuid(), new AtlasEntityWithAssociations(entity));
         }
 
-        public boolean exists(AtlasEntityWithAssociations entity) {
-            return entities != null ? entities.containsKey(entity.getGuid()) : false;
-        }
-
-        public AtlasEntity getById(String guid) {
-
+        public AtlasEntityWithAssociations getById(String guid) {
             if( entities != null) {
                 return entities.get(guid);
             }
@@ -65,17 +61,10 @@ public interface AtlasFormatConverter {
             return null;
         }
 
+        public boolean entityExists(String guid) { return entities != null && entities.containsKey(guid); }
+
         public Map<String, AtlasEntityWithAssociations> getEntities() {
             return entities;
         }
-
-        public void addEntities(Map<String, AtlasEntity> entities) {
-            if (this.entities == null) {
-                this.entities = new HashMap<>(entities.size());
-            }
-            for (String entityId : entities.keySet()) {
-                this.entities.put(entityId, new AtlasEntityWithAssociations(entities.get(entityId)));
-            }
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/4f4ab9b9/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasInstanceRestAdapters.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasInstanceRestAdapters.java b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasInstanceRestAdapters.java
index 692f917..7f5a056 100644
--- a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasInstanceRestAdapters.java
+++ b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasInstanceRestAdapters.java
@@ -129,13 +129,16 @@ public class AtlasInstanceRestAdapters {
     public Map<String, AtlasEntityWithAssociations> getAtlasEntity(IReferenceableInstance referenceable) throws AtlasBaseException {
 
         AtlasFormatConverter converter  = instanceFormatters.getConverter(TypeCategory.ENTITY);
-        AtlasEntityType entityType = typeRegistry.getEntityTypeByName(referenceable.getTypeName());
+        AtlasEntityType      entityType = typeRegistry.getEntityTypeByName(referenceable.getTypeName());
+
         if (entityType == null) {
             throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, TypeCategory.ENTITY.name(), referenceable.getTypeName());
         }
 
         AtlasFormatConverter.ConverterContext ctx = new AtlasFormatConverter.ConverterContext();
+
         converter.fromV1ToV2(referenceable, entityType, ctx);
+
         return ctx.getEntities();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/4f4ab9b9/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasStructFormatConverter.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasStructFormatConverter.java b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasStructFormatConverter.java
index 4d2e123..f486cda 100644
--- a/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasStructFormatConverter.java
+++ b/webapp/src/main/java/org/apache/atlas/web/adapters/AtlasStructFormatConverter.java
@@ -157,24 +157,17 @@ public class AtlasStructFormatConverter extends AtlasAbstractFormatConverter {
             ret = new HashMap<>();
 
             for (AtlasStructType.AtlasAttribute attr : structType.getAllAttributes().values()) {
-                AtlasType            attrType      = attr.getAttributeType();
+                AtlasType attrType = attr.getAttributeType();
 
                 if (attrType == null) {
                     LOG.warn("ignored attribute {}.{}: failed to find AtlasType", structType.getTypeName(), attr.getName());
                     continue;
                 }
 
-                Object v1Value = attributes.get(attr.getName());
-                Object v2Value = null;
+                AtlasFormatConverter attrConverter = converterRegistry.getConverter(attrType.getTypeCategory());
+                Object               v1Value       = attributes.get(attr.getName());
+                Object               v2Value       = attrConverter.fromV1ToV2(v1Value, attrType, context);
 
-                AtlasFormatConverter attrConverter = null;
-                if (attrType.getTypeCategory() == TypeCategory.ENTITY && !attr.isContainedAttribute()) {
-                    attrConverter = new AtlasObjectIdConverter(converterRegistry, typeRegistry);
-                    v2Value = attrConverter.fromV1ToV2(v1Value, attrType, context);
-                } else {
-                    attrConverter = converterRegistry.getConverter(attrType.getTypeCategory());
-                    v2Value = attrConverter.fromV1ToV2(v1Value, attrType, context);
-                }
                 ret.put(attr.getAttributeDef().getName(), v2Value);
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/4f4ab9b9/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java b/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
index d82e5ba..9c0ccf6 100644
--- a/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
+++ b/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
@@ -84,13 +84,11 @@ public class EntityREST {
     @Path("/guid/{guid}")
     @Produces(Servlets.JSON_MEDIA_TYPE)
     public List<AtlasEntityWithAssociations> getById(@PathParam("guid") String guid) throws AtlasBaseException {
-        List<AtlasEntityWithAssociations> entityList = new ArrayList<>();
-
         try {
-            ITypedReferenceableInstance ref = metadataService.getEntityDefinition(guid);
-            Map<String, AtlasEntityWithAssociations> entityRet = restAdapters.getAtlasEntity(ref);
-            entityList.addAll(entityRet.values());
-            return entityList;
+            ITypedReferenceableInstance              ref      = metadataService.getEntityDefinition(guid);
+            Map<String, AtlasEntityWithAssociations> entities = restAdapters.getAtlasEntity(ref);
+
+            return getOrderedEntityList(entities, guid);
         } catch (AtlasException e) {
             throw toAtlasBaseException(e);
         }
@@ -106,20 +104,9 @@ public class EntityREST {
     @Path("/guid/{guid}/associations")
     @Produces(Servlets.JSON_MEDIA_TYPE)
     public List<AtlasEntityWithAssociations> getWithAssociationsByGuid(@PathParam("guid") String guid) throws AtlasBaseException {
-
-        List<AtlasEntityWithAssociations> entityList = new ArrayList<>();
-        try {
-            ITypedReferenceableInstance ref = metadataService.getEntityDefinition(guid);
-            Map<String, AtlasEntityWithAssociations> entityRet = restAdapters.getAtlasEntity(ref);
-            entityList.addAll(entityRet.values());
-            return entityList;
-        } catch (AtlasException e) {
-            throw toAtlasBaseException(e);
-        }
+        return this.getById(guid);
     }
 
-
-
     /**
      * Delete an entity identified by its GUID
      *
@@ -212,7 +199,6 @@ public class EntityREST {
         return entityList;
     }
 
-
     /**
      * Gets the list of classifications for a given entity represented by a guid.
      *
@@ -373,4 +359,18 @@ public class EntityREST {
             throw new AtlasBaseException(AtlasErrorCode.ATTRIBUTE_UNIQUE_INVALID, entityType.getTypeName(), attributeName);
         }
     }
+
+    private List<AtlasEntityWithAssociations> getOrderedEntityList(Map<String, AtlasEntityWithAssociations> entities, String firstItemGuid) {
+        List<AtlasEntityWithAssociations> ret = new ArrayList<>(entities.size());
+
+        for (AtlasEntityWithAssociations entity : entities.values()) {
+            if (StringUtils.equals(entity.getGuid(), firstItemGuid)) {
+                ret.add(0, entity);
+            } else {
+                ret.add(entity);
+            }
+        }
+
+        return ret;
+    }
 }