Repository: atlas Updated Branches: refs/heads/master 5e496e5e1 -> 8d86dd2c6
ATLAS-2457: updated classification to support multiple validity-periods Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/8d86dd2c Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/8d86dd2c Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/8d86dd2c Branch: refs/heads/master Commit: 8d86dd2c61af199045289b6f94ff794ded16d5d3 Parents: 5e496e5 Author: Madhan Neethiraj <mad...@apache.org> Authored: Thu Feb 22 10:37:08 2018 -0800 Committer: Madhan Neethiraj <mad...@apache.org> Committed: Thu Feb 22 11:45:05 2018 -0800 ---------------------------------------------------------------------- .../org/apache/atlas/repository/Constants.java | 8 ++--- .../model/instance/AtlasClassification.java | 33 ++++++++++++++------ .../store/graph/v1/EntityGraphMapper.java | 12 ++++--- .../store/graph/v1/EntityGraphRetriever.java | 12 +++---- .../integration/EntityV2JerseyResourceIT.java | 6 ++-- 5 files changed, 44 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/8d86dd2c/common/src/main/java/org/apache/atlas/repository/Constants.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/atlas/repository/Constants.java b/common/src/main/java/org/apache/atlas/repository/Constants.java index b6c639a..813fc87 100644 --- a/common/src/main/java/org/apache/atlas/repository/Constants.java +++ b/common/src/main/java/org/apache/atlas/repository/Constants.java @@ -116,11 +116,9 @@ public final class Constants { public static final String ATTRIBUTE_NAME_VERSION = "version"; public static final String TEMP_STRUCT_NAME_PREFIX = "__tempQueryResultStruct"; - public static final String CLASSIFICATION_ENTITY_GUID = INTERNAL_PROPERTY_KEY_PREFIX + "entityGuid"; - public static final String CLASSIFICATION_PROPAGATE_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "propagate"; - public static final String CLASSIFICATION_VALIDITY_PERIOD_STARTTIME_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "vp_startTime"; - public static final String CLASSIFICATION_VALIDITY_PERIOD_ENDTIME_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "vp_endTime"; - public static final String CLASSIFICATION_VALIDITY_PERIOD_TIMEZONE_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "vp_timeZone"; + public static final String CLASSIFICATION_ENTITY_GUID = INTERNAL_PROPERTY_KEY_PREFIX + "entityGuid"; + public static final String CLASSIFICATION_PROPAGATE_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "propagate"; + public static final String CLASSIFICATION_VALIDITY_PERIODS_KEY = INTERNAL_PROPERTY_KEY_PREFIX + "validityPeriods"; private Constants() { } http://git-wip-us.apache.org/repos/asf/atlas/blob/8d86dd2c/intg/src/main/java/org/apache/atlas/model/instance/AtlasClassification.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasClassification.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasClassification.java index 3d2ecef..008314b 100644 --- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasClassification.java +++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasClassification.java @@ -19,10 +19,12 @@ package org.apache.atlas.model.instance; import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -51,9 +53,9 @@ import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ public class AtlasClassification extends AtlasStruct implements Serializable { private static final long serialVersionUID = 1L; - private String entityGuid = null; - private boolean propagate = true; - private TimeBoundary validityPeriod = null; + private String entityGuid = null; + private boolean propagate = true; + private List<TimeBoundary> validityPeriods = null; public AtlasClassification() { @@ -99,12 +101,25 @@ public class AtlasClassification extends AtlasStruct implements Serializable { this.propagate = propagate; } - public TimeBoundary getValidityPeriod() { - return validityPeriod; + public List<TimeBoundary> getValidityPeriods() { + return validityPeriods; } - public void setValidityPeriod(TimeBoundary validityPeriod) { - this.validityPeriod = validityPeriod; + public void setValidityPeriods(List<TimeBoundary> validityPeriods) { + this.validityPeriods = validityPeriods; + } + + @JsonIgnore + public void addValityPeriod(TimeBoundary validityPeriod) { + List<TimeBoundary> vpList = this.validityPeriods; + + if (vpList == null) { + vpList = new ArrayList<>(); + + this.validityPeriods = vpList; + } + + vpList.add(validityPeriod); } @Override @@ -115,7 +130,7 @@ public class AtlasClassification extends AtlasStruct implements Serializable { AtlasClassification that = (AtlasClassification) o; return propagate == that.propagate && Objects.equals(entityGuid, that.entityGuid) && - Objects.equals(validityPeriod, that.validityPeriod); + Objects.equals(validityPeriods, that.validityPeriods); } @Override @@ -129,7 +144,7 @@ public class AtlasClassification extends AtlasStruct implements Serializable { super.toString(sb); sb.append("entityGuid='").append(entityGuid).append('\''); sb.append(", propagate=").append(propagate); - sb.append(", validityPeriod=").append(validityPeriod); + sb.append(", validityPeriods=").append(validityPeriods); sb.append('}'); return sb.toString(); } http://git-wip-us.apache.org/repos/asf/atlas/blob/8d86dd2c/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java index 46b487b..0ba06b9 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java @@ -54,6 +54,7 @@ import org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdg import org.apache.atlas.type.AtlasType; import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.type.AtlasTypeUtil; +import org.apache.atlas.utils.AtlasJson; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.IteratorUtils; import org.apache.commons.collections.MapUtils; @@ -1591,12 +1592,13 @@ public class EntityGraphMapper { private AtlasEdge mapClassification(EntityOperation operation, final EntityMutationContext context, AtlasClassification classification, AtlasEntityType entityType, AtlasVertex parentInstanceVertex, AtlasVertex traitInstanceVertex) throws AtlasBaseException { + if (classification.getValidityPeriods() != null) { + String strValidityPeriods = AtlasJson.toJson(classification.getValidityPeriods()); - TimeBoundary validityPeriod = classification.getValidityPeriod(); - - AtlasGraphUtilsV1.setProperty(traitInstanceVertex, Constants.CLASSIFICATION_VALIDITY_PERIOD_STARTTIME_KEY, validityPeriod != null ? validityPeriod.getStartTime() : null); - AtlasGraphUtilsV1.setProperty(traitInstanceVertex, Constants.CLASSIFICATION_VALIDITY_PERIOD_ENDTIME_KEY, validityPeriod != null ? validityPeriod.getEndTime() : null); - AtlasGraphUtilsV1.setProperty(traitInstanceVertex, Constants.CLASSIFICATION_VALIDITY_PERIOD_TIMEZONE_KEY, validityPeriod != null ? validityPeriod.getTimeZone() : null); + AtlasGraphUtilsV1.setProperty(traitInstanceVertex, Constants.CLASSIFICATION_VALIDITY_PERIODS_KEY, strValidityPeriods); + } else { + // if 'null', don't update existing value in the classification + } // map all the attributes to this newly created AtlasVertex mapAttributes(classification, traitInstanceVertex, operation, context); http://git-wip-us.apache.org/repos/asf/atlas/blob/8d86dd2c/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java index 45c7d39..1833b72 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java @@ -51,6 +51,7 @@ import org.apache.atlas.type.AtlasStructType.AtlasAttribute; import org.apache.atlas.type.AtlasType; import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.type.AtlasTypeUtil; +import org.apache.atlas.utils.AtlasJson; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -102,7 +103,8 @@ public final class EntityGraphRetriever { private final String CREATE_TIME = "createTime"; private final String QUALIFIED_NAME = "qualifiedName"; - private static final GraphHelper graphHelper = GraphHelper.getInstance(); + private static final List<TimeBoundary> TIME_BOUNDARIES_LIST = new ArrayList<>(); + private static final GraphHelper graphHelper = GraphHelper.getInstance(); private final AtlasTypeRegistry typeRegistry; @@ -218,12 +220,10 @@ public final class EntityGraphRetriever { ret.setEntityGuid(AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_ENTITY_GUID, String.class)); ret.setPropagate(AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_PROPAGATE_KEY, Boolean.class)); - String vpStartTime = AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_VALIDITY_PERIOD_STARTTIME_KEY, String.class); - String vpEndTime = AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_VALIDITY_PERIOD_ENDTIME_KEY, String.class); - String vpTimeZone = AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_VALIDITY_PERIOD_TIMEZONE_KEY, String.class); + String strValidityPeriods = AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_VALIDITY_PERIODS_KEY, String.class); - if (vpStartTime != null || vpEndTime != null || vpTimeZone != null) { - ret.setValidityPeriod(new TimeBoundary(vpStartTime, vpEndTime, vpTimeZone)); + if (strValidityPeriods != null) { + ret.setValidityPeriods(AtlasJson.fromJson(strValidityPeriods, TIME_BOUNDARIES_LIST.getClass())); } mapAttributes(classificationVertex, ret, null); http://git-wip-us.apache.org/repos/asf/atlas/blob/8d86dd2c/webapp/src/test/java/org/apache/atlas/web/integration/EntityV2JerseyResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/integration/EntityV2JerseyResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/integration/EntityV2JerseyResourceIT.java index 1d666a6..483e4e2 100755 --- a/webapp/src/test/java/org/apache/atlas/web/integration/EntityV2JerseyResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/integration/EntityV2JerseyResourceIT.java @@ -463,7 +463,7 @@ public class EntityV2JerseyResourceIT extends BaseResourceIT { TimeBoundary validityPeriod = new TimeBoundary("2018/03/01 00:00:00", "2018/04/01 00:00:00", "GMT"); classification.setEntityGuid(tableGuid); - classification.setValidityPeriod(validityPeriod); + classification.addValityPeriod(validityPeriod); atlasClientV2.addClassifications(tableGuid, Collections.singletonList(classification)); @@ -481,7 +481,9 @@ public class EntityV2JerseyResourceIT extends BaseResourceIT { foundClassification = true; assertEquals(entityClassification.getTypeName(), piiTrait.getName()); - assertEquals(entityClassification.getValidityPeriod(), validityPeriod); + assertNotNull(entityClassification.getValidityPeriods()); + assertEquals(entityClassification.getValidityPeriods().size(), 1); + assertEquals(entityClassification.getValidityPeriods().get(0), validityPeriod); assertEquals(entityClassification, classification); break;