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 <[email protected]>
Authored: Fri Feb 3 20:58:50 2017 -0800
Committer: Madhan Neethiraj <[email protected]>
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;
+    }
 }

Reply via email to