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;
}
}