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/01/31 06:26:19 UTC

incubator-atlas git commit: ATLAS-1506: updated AtlasObjectId to support unqiueAttributes to identity the object

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 2763ff303 -> 224eaffe7


ATLAS-1506: updated AtlasObjectId to support unqiueAttributes to identity the object


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

Branch: refs/heads/master
Commit: 224eaffe78d0e5844755f0015eee35732eeb5028
Parents: 2763ff3
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Mon Jan 30 17:04:44 2017 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Mon Jan 30 22:26:13 2017 -0800

----------------------------------------------------------------------
 .../atlas/model/instance/AtlasObjectId.java     | 46 ++++++++++++---
 .../apache/atlas/type/AtlasBuiltInTypes.java    | 23 ++++++--
 .../atlas/type/TestAtlasObjectIdType.java       | 61 ++++++++++++++------
 3 files changed, 100 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/224eaffe/intg/src/main/java/org/apache/atlas/model/instance/AtlasObjectId.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasObjectId.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasObjectId.java
index 4896e9d..738f22f 100644
--- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasObjectId.java
+++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasObjectId.java
@@ -29,6 +29,7 @@ import javax.xml.bind.annotation.XmlSeeAlso;
 
 import org.apache.atlas.model.PList;
 import org.apache.atlas.model.SearchFilter.SortType;
+import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
 import org.codehaus.jackson.annotate.JsonAutoDetect;
 import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY;
 import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE;
@@ -47,29 +48,41 @@ import org.codehaus.jackson.map.annotate.JsonSerialize;
 public class AtlasObjectId  implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    public static final String KEY_TYPENAME = "typeName";
-    public static final String KEY_GUID     = "guid";
+    public static final String KEY_TYPENAME          = "typeName";
+    public static final String KEY_GUID              = "guid";
+    public static final String KEY_UNIQUE_ATTRIBUTES = "uniqueAttributes";
 
-    private String typeName;
-    private String guid;
+    private String              typeName;
+    private String              guid;
+    private Map<String, Object> uniqueAttributes;
 
     public AtlasObjectId() {
-        this(null, null);
+        this(null, null, null);
     }
 
     public AtlasObjectId(String typeName) {
-        this(typeName, null);
+        this(typeName, null, null);
     }
 
     public AtlasObjectId(String typeName, String guid) {
+        this(typeName, guid, null);
+    }
+
+    public AtlasObjectId(String typeName, Map<String, Object> uniqueAttributes) {
+        this(typeName, null, uniqueAttributes);
+    }
+
+    public AtlasObjectId(String typeName, String guid, Map<String, Object> uniqueAttributes) {
         setTypeName(typeName);
         setGuid(guid);
+        setUniqueAttributes(uniqueAttributes);
     }
 
     public AtlasObjectId(AtlasObjectId other) {
         if (other != null) {
             setTypeName(other.getTypeName());
             setGuid(other.getGuid());
+            setUniqueAttributes(other.getUniqueAttributes());
         }
     }
 
@@ -77,6 +90,7 @@ public class AtlasObjectId  implements Serializable {
         if (objIdMap != null) {
             Object t = objIdMap.get(KEY_TYPENAME);
             Object g = objIdMap.get(KEY_GUID);
+            Object u = objIdMap.get(KEY_UNIQUE_ATTRIBUTES);
 
             if (t != null) {
                 setTypeName(t.toString());
@@ -85,6 +99,10 @@ public class AtlasObjectId  implements Serializable {
             if (g != null) {
                 setGuid(g.toString());
             }
+
+            if (u != null && u instanceof Map) {
+                setUniqueAttributes((Map)u);
+            }
         }
     }
 
@@ -104,6 +122,14 @@ public class AtlasObjectId  implements Serializable {
         this.guid = guid;
     }
 
+    public Map<String, Object> getUniqueAttributes() {
+        return uniqueAttributes;
+    }
+
+    public void setUniqueAttributes(Map<String, Object> uniqueAttributes) {
+        this.uniqueAttributes = uniqueAttributes;
+    }
+
     public StringBuilder toString(StringBuilder sb) {
         if (sb == null) {
             sb = new StringBuilder();
@@ -112,6 +138,9 @@ public class AtlasObjectId  implements Serializable {
         sb.append("AtlasObjectId{");
         sb.append("typeName='").append(typeName).append('\'');
         sb.append(", guid='").append(guid).append('\'');
+        sb.append(", uniqueAttributes={");
+        AtlasBaseTypeDef.dumpObjects(uniqueAttributes, sb);
+        sb.append('}');
         sb.append('}');
 
         return sb;
@@ -123,12 +152,13 @@ public class AtlasObjectId  implements Serializable {
         if (o == null || getClass() != o.getClass()) return false;
         AtlasObjectId that = (AtlasObjectId) o;
         return Objects.equals(typeName, that.typeName) &&
-                Objects.equals(guid, that.guid);
+                Objects.equals(guid, that.guid) &&
+                Objects.equals(uniqueAttributes, that.uniqueAttributes);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(typeName, guid);
+        return Objects.hash(typeName, guid, uniqueAttributes);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/224eaffe/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
index a25f3f6..6d24d7e 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import org.apache.atlas.model.TypeCategory;
 import org.apache.atlas.model.instance.AtlasObjectId;
 import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 
 
@@ -526,9 +527,7 @@ public class AtlasBuiltInTypes {
             if (obj == null || obj instanceof AtlasObjectId) {
                 return true;
             } else if (obj instanceof Map) {
-                Map map = (Map)obj;
-
-                return map.containsKey(AtlasObjectId.KEY_TYPENAME) && map.containsKey(AtlasObjectId.KEY_GUID);
+                return isValidMap((Map)obj);
             }
 
             return getNormalizedValue(obj) != null;
@@ -542,7 +541,7 @@ public class AtlasBuiltInTypes {
                 } else if (obj instanceof Map) {
                     Map map = (Map) obj;
 
-                    if (map.containsKey(AtlasObjectId.KEY_TYPENAME) && map.containsKey(AtlasObjectId.KEY_GUID)) {
+                    if (isValidMap(map)) {
                         return new AtlasObjectId(map);
                     }
                 }
@@ -550,5 +549,21 @@ public class AtlasBuiltInTypes {
 
             return null;
         }
+
+        private boolean isValidMap(Map map) {
+            if (map.containsKey(AtlasObjectId.KEY_TYPENAME)) {
+                if (map.containsKey(AtlasObjectId.KEY_GUID)) {
+                    return true;
+                } else {
+                    Object uniqueAttributes = map.get(AtlasObjectId.KEY_UNIQUE_ATTRIBUTES);
+
+                    if (uniqueAttributes instanceof Map && MapUtils.isNotEmpty((Map)uniqueAttributes)) {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/224eaffe/intg/src/test/java/org/apache/atlas/type/TestAtlasObjectIdType.java
----------------------------------------------------------------------
diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasObjectIdType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasObjectIdType.java
index 7d55233..2a3ba55 100644
--- a/intg/src/test/java/org/apache/atlas/type/TestAtlasObjectIdType.java
+++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasObjectIdType.java
@@ -37,27 +37,46 @@ public class TestAtlasObjectIdType {
     private final Object[] invalidValues;
 
     {
-        Map<String, String> objectId1 = new HashMap<>();
-        Map<Object, Object> objectId2 = new HashMap<>();
-        Map<Object, Object> objectId3 = new HashMap<>();
-        Map<Object, Object> objectId4 = new HashMap<>();
-        Map<Object, Object> objectId5 = new HashMap<>();
-
-        objectId1.put(AtlasObjectId.KEY_TYPENAME, "testType");
-        objectId1.put(AtlasObjectId.KEY_GUID, "guid-1234");
-        objectId2.put(AtlasObjectId.KEY_TYPENAME, "testType");
-        objectId2.put(AtlasObjectId.KEY_GUID, 1234);
-        objectId3.put(AtlasObjectId.KEY_TYPENAME, "testType"); // no guid
-        objectId4.put(AtlasObjectId.KEY_GUID, "guid-1234");    // no typeName
-        objectId4.put(AtlasObjectId.KEY_TYPENAME + "-invalid", "testType");
-        objectId5.put(AtlasObjectId.KEY_GUID + "-invalid", "guid-1234");
+        Map<String, String> validObj1 = new HashMap<>();
+        Map<Object, Object> validObj2 = new HashMap<>();
+        Map<Object, Object> validObj3 = new HashMap<>();
 
+        Map<Object, Object> invalidObj1 = new HashMap<>();
+        Map<Object, Object> invalidObj2 = new HashMap<>();
+        Map<Object, Object> invalidObj3 = new HashMap<>();
+        Map<Object, Object> invalidObj4 = new HashMap<>();
+        Map<Object, Object> invalidObj5 = new HashMap<>();
+
+        validObj1.put(AtlasObjectId.KEY_TYPENAME, "testType");
+        validObj1.put(AtlasObjectId.KEY_GUID, "guid-1234");
+        validObj2.put(AtlasObjectId.KEY_TYPENAME, "testType");
+        validObj2.put(AtlasObjectId.KEY_GUID, 1234);
+
+        Map<String, Object> uniqAttribs = new HashMap<String, Object>();
+        uniqAttribs.put("name", "testTypeInstance-1");
+
+        validObj3.put(AtlasObjectId.KEY_TYPENAME, "testType");
+        validObj3.put(AtlasObjectId.KEY_UNIQUE_ATTRIBUTES, uniqAttribs);
+
+        invalidObj1.put(AtlasObjectId.KEY_TYPENAME, "testType"); // no guid
+
+        invalidObj2.put(AtlasObjectId.KEY_GUID, "guid-1234");    // no typeName or uniqueAttribute
+        invalidObj2.put(AtlasObjectId.KEY_TYPENAME + "-invalid", "testType");
+
+        invalidObj3.put(AtlasObjectId.KEY_GUID + "-invalid", "guid-1234"); // no guid or typename or uniqueAttribute
+
+        invalidObj4.put(AtlasObjectId.KEY_TYPENAME, "testType");    // empty uniqueAttribute
+        invalidObj4.put(AtlasObjectId.KEY_UNIQUE_ATTRIBUTES, new HashMap<String, Object>());
+
+        invalidObj5.put(AtlasObjectId.KEY_TYPENAME, "testType");    // non-map uniqueAttribute
+        invalidObj5.put(AtlasObjectId.KEY_UNIQUE_ATTRIBUTES, new ArrayList<String>());
 
         validValues = new Object[] {
-            null, objectId1, objectId2, new AtlasObjectId(), new AtlasObjectId("testType", "guid-1234"), };
+            null, validObj1, validObj2, validObj3, new AtlasObjectId(), new AtlasObjectId("testType", "guid-1234"), };
 
         invalidValues = new Object[] {
-            objectId3, objectId4, objectId5, Byte.valueOf((byte)1), Short.valueOf((short)1), Integer.valueOf(1),
+            invalidObj1, invalidObj2, invalidObj3, invalidObj4, invalidObj5,
+            Byte.valueOf((byte)1), Short.valueOf((short)1), Integer.valueOf(1),
             Long.valueOf(1L), Float.valueOf(1), Double.valueOf(1), BigInteger.valueOf(1), BigDecimal.valueOf(1), "1",
             "", "12ab", "abcd", "-12ab",
         };
@@ -99,8 +118,14 @@ public class TestAtlasObjectIdType {
             } else if (value instanceof Map) {
                 assertEquals(normalizedValue.getTypeName(), ((Map)value).get(AtlasObjectId.KEY_TYPENAME).toString(),
                              "value=" + value);
-                assertEquals(normalizedValue.getGuid(), ((Map)value).get(AtlasObjectId.KEY_GUID).toString(),
-                             "value=" + value);
+                if (((Map)value).get(AtlasObjectId.KEY_GUID) == null) {
+                    assertEquals(normalizedValue.getGuid(), ((Map)value).get(AtlasObjectId.KEY_GUID),  "value=" + value);
+                } else {
+                    assertEquals(normalizedValue.getGuid().toString(), ((Map) value).get(AtlasObjectId.KEY_GUID).toString(), "value=" + value);
+                }
+
+                assertEquals(normalizedValue.getUniqueAttributes(), ((Map)value).get(AtlasObjectId.KEY_UNIQUE_ATTRIBUTES),
+                        "value=" + value);
             }
         }
     }