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;

Reply via email to