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/22 01:00:54 UTC

incubator-atlas git commit: ATLAS-1571: fix for incorrect v1->v2 conversion of enum-type value

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 485573fca -> 2904f4c42


ATLAS-1571: fix for incorrect v1->v2 conversion of enum-type value


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

Branch: refs/heads/master
Commit: 2904f4c425d414293e6910bba7f1bac0bca4ab55
Parents: 485573f
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Tue Feb 21 15:49:46 2017 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Tue Feb 21 16:20:29 2017 -0800

----------------------------------------------------------------------
 .../org/apache/atlas/type/AtlasEnumType.java    | 20 ++++++
 .../converters/AtlasEnumFormatConverter.java    | 64 +++++++++++++++++++-
 2 files changed, 82 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/2904f4c4/intg/src/main/java/org/apache/atlas/type/AtlasEnumType.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasEnumType.java b/intg/src/main/java/org/apache/atlas/type/AtlasEnumType.java
index db169d0..1cd27b3 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasEnumType.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasEnumType.java
@@ -91,4 +91,24 @@ public class AtlasEnumType extends AtlasType {
 
         return null;
     }
+
+    public AtlasEnumElementDef getEnumElementDef(String value) {
+        if (value != null) {
+            return elementDefs.get(value.toLowerCase());
+        }
+
+        return null;
+    }
+
+    public AtlasEnumElementDef getEnumElementDef(Number ordinal) {
+        if (ordinal != null) {
+            for (AtlasEnumElementDef elementDef : elementDefs.values()) {
+                if (elementDef.getOrdinal().longValue() == ordinal.longValue()) {
+                    return elementDef;
+                }
+            }
+        }
+
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/2904f4c4/repository/src/main/java/org/apache/atlas/repository/converters/AtlasEnumFormatConverter.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasEnumFormatConverter.java b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasEnumFormatConverter.java
index 2bf15f2..d71d543 100644
--- a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasEnumFormatConverter.java
+++ b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasEnumFormatConverter.java
@@ -20,8 +20,13 @@ package org.apache.atlas.repository.converters;
 
 import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.model.TypeCategory;
+import org.apache.atlas.model.typedef.AtlasEnumDef.AtlasEnumElementDef;
+import org.apache.atlas.type.AtlasEnumType;
 import org.apache.atlas.type.AtlasType;
 import org.apache.atlas.type.AtlasTypeRegistry;
+import org.apache.atlas.typesystem.types.EnumValue;
+
+import java.util.Map;
 
 
 public class AtlasEnumFormatConverter extends AtlasAbstractFormatConverter {
@@ -31,12 +36,67 @@ public class AtlasEnumFormatConverter extends AtlasAbstractFormatConverter {
 
     @Override
     public Object fromV1ToV2(Object v1Obj, AtlasType type, ConverterContext ctx) throws AtlasBaseException {
-        return type.getNormalizedValue(v1Obj);
+        String ret = null;
+
+        if (v1Obj == null || !(type instanceof AtlasEnumType)) {
+            return ret;
+        }
+
+        Object v1Value = null;
+
+        if (v1Obj instanceof EnumValue) {
+            EnumValue enumValue = (EnumValue)v1Obj;
+
+            v1Value = enumValue.value;
+
+            if (v1Value == null) {
+                v1Value = enumValue.ordinal;
+            }
+        } else if (v1Obj instanceof Map) {
+            Map mapValue = (Map)v1Obj;
+
+            v1Value = mapValue.get("value");
+
+            if (v1Value == null) {
+                v1Value = mapValue.get("ordinal");
+            }
+        }
+
+        if (v1Value == null) { // could be 'value' or 'ordinal'
+            v1Value = v1Obj;
+        }
+
+        AtlasEnumElementDef elementDef;
+
+        if (v1Value instanceof Number) {
+            elementDef = ((AtlasEnumType)type).getEnumElementDef((Number) v1Value);
+        } else {
+            elementDef = ((AtlasEnumType)type).getEnumElementDef(v1Value.toString());
+        }
+
+        if (elementDef != null) {
+            ret = elementDef.getValue();
+        }
+
+        return ret;
     }
 
     @Override
     public Object fromV2ToV1(Object v2Obj, AtlasType type, ConverterContext ctx) throws AtlasBaseException {
-        return type.getNormalizedValue(v2Obj);
+        EnumValue ret = null;
+
+        if (v2Obj == null || !(type instanceof AtlasEnumType)) {
+            return ret;
+        }
+
+        AtlasEnumType       enumType   = (AtlasEnumType) type;
+        AtlasEnumElementDef elementDef = enumType.getEnumElementDef(v2Obj.toString());
+
+        if (elementDef != null) {
+            ret = new EnumValue(elementDef.getValue(), elementDef.getOrdinal());
+        }
+
+        return ret;
     }
 }