Repository: atlas Updated Branches: refs/heads/master 5fed48d96 -> 570f24231
ATLAS-2656: updated entity notifications to replace AtlasEntity with AtlasEntityHeader Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/570f2423 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/570f2423 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/570f2423 Branch: refs/heads/master Commit: 570f24231b69b119fd79b8481d65e3e122cdc51f Parents: 5fed48d Author: Madhan Neethiraj <mad...@apache.org> Authored: Mon May 7 22:40:07 2018 -0700 Committer: Madhan Neethiraj <mad...@apache.org> Committed: Tue May 8 17:03:15 2018 -0700 ---------------------------------------------------------------------- addons/models/1000-Hadoop/1020-fs_model.json | 3 + addons/models/1000-Hadoop/1030-hive_model.json | 2 + addons/models/1000-Hadoop/1060-hbase_model.json | 3 +- addons/models/1000-Hadoop/1070-kafka_model.json | 1 + addons/models/1000-Hadoop/1080-storm_model.json | 3 +- .../model/notification/EntityNotification.java | 85 +++++++++++ .../atlas/model/typedef/AtlasStructDef.java | 19 ++- .../org/apache/atlas/type/AtlasTypeUtil.java | 16 +-- .../java/org/apache/atlas/utils/AtlasJson.java | 2 +- .../notification/EntityNotificationV2.java | 129 ----------------- .../test/java/org/apache/atlas/TestUtilsV2.java | 140 +++++++++---------- .../converters/AtlasInstanceConverter.java | 7 - .../store/graph/v1/AtlasStructDefStoreV1.java | 2 + .../store/graph/v1/EntityGraphRetriever.java | 12 +- .../store/graph/AtlasTypeDefGraphStoreTest.java | 4 +- .../store/graph/v1/AtlasEntityStoreV1Test.java | 2 +- .../EntityNotificationListenerV2.java | 115 ++++++++------- .../atlas/web/integration/BaseResourceIT.java | 4 +- .../integration/TypedefsJerseyResourceIT.java | 2 +- 19 files changed, 266 insertions(+), 285 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/addons/models/1000-Hadoop/1020-fs_model.json ---------------------------------------------------------------------- diff --git a/addons/models/1000-Hadoop/1020-fs_model.json b/addons/models/1000-Hadoop/1020-fs_model.json index 1d7e9d3..21d261c 100644 --- a/addons/models/1000-Hadoop/1020-fs_model.json +++ b/addons/models/1000-Hadoop/1020-fs_model.json @@ -94,6 +94,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": false, + "includeInNotification": true, "isUnique": false }, { @@ -167,6 +168,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": true, + "includeInNotification": true, "isUnique": false }, { @@ -191,6 +193,7 @@ "cardinality": "SINGLE", "isIndexable": false, "isOptional": true, + "includeInNotification": true, "isUnique": false } ] http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/addons/models/1000-Hadoop/1030-hive_model.json ---------------------------------------------------------------------- diff --git a/addons/models/1000-Hadoop/1030-hive_model.json b/addons/models/1000-Hadoop/1030-hive_model.json index 68a5c84..552dfe4 100644 --- a/addons/models/1000-Hadoop/1030-hive_model.json +++ b/addons/models/1000-Hadoop/1030-hive_model.json @@ -152,6 +152,7 @@ "cardinality": "SINGLE", "isIndexable": false, "isOptional": true, + "includeInNotification": true, "isUnique": false }, { @@ -418,6 +419,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": false, + "includeInNotification": true, "isUnique": false }, { http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/addons/models/1000-Hadoop/1060-hbase_model.json ---------------------------------------------------------------------- diff --git a/addons/models/1000-Hadoop/1060-hbase_model.json b/addons/models/1000-Hadoop/1060-hbase_model.json index ec8dd4a..392412a 100644 --- a/addons/models/1000-Hadoop/1060-hbase_model.json +++ b/addons/models/1000-Hadoop/1060-hbase_model.json @@ -16,6 +16,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": false, + "includeInNotification": true, "isUnique": false }, { @@ -207,4 +208,4 @@ "propagateTags": "NONE" } ] -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/addons/models/1000-Hadoop/1070-kafka_model.json ---------------------------------------------------------------------- diff --git a/addons/models/1000-Hadoop/1070-kafka_model.json b/addons/models/1000-Hadoop/1070-kafka_model.json index 9ddc379..b5a5965 100644 --- a/addons/models/1000-Hadoop/1070-kafka_model.json +++ b/addons/models/1000-Hadoop/1070-kafka_model.json @@ -16,6 +16,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": false, + "isInNotification": true, "isUnique": false }, { http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/addons/models/1000-Hadoop/1080-storm_model.json ---------------------------------------------------------------------- diff --git a/addons/models/1000-Hadoop/1080-storm_model.json b/addons/models/1000-Hadoop/1080-storm_model.json index b008c7a..7ca7a8f 100644 --- a/addons/models/1000-Hadoop/1080-storm_model.json +++ b/addons/models/1000-Hadoop/1080-storm_model.json @@ -48,6 +48,7 @@ "cardinality": "SINGLE", "isIndexable": true, "isOptional": true, + "includeInNotification": true, "isUnique": false }, { @@ -164,4 +165,4 @@ "propagateTags": "NONE" } ] -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/main/java/org/apache/atlas/model/notification/EntityNotification.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/notification/EntityNotification.java b/intg/src/main/java/org/apache/atlas/model/notification/EntityNotification.java index f70eb3f..6cdae89 100644 --- a/intg/src/main/java/org/apache/atlas/model/notification/EntityNotification.java +++ b/intg/src/main/java/org/apache/atlas/model/notification/EntityNotification.java @@ -20,14 +20,17 @@ package org.apache.atlas.model.notification; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.apache.atlas.model.instance.AtlasEntityHeader; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; +import java.util.Objects; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; +import static org.apache.atlas.model.notification.EntityNotification.EntityNotificationType.ENTITY_NOTIFICATION_V2; /** * Base type of hook message. @@ -83,4 +86,86 @@ public class EntityNotification implements Serializable { return sb; } + + /** + * Entity v2 notification + */ + @JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) + @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) + @JsonIgnoreProperties(ignoreUnknown=true) + @XmlRootElement + @XmlAccessorType(XmlAccessType.PROPERTY) + public static class EntityNotificationV2 extends EntityNotification implements Serializable { + private static final long serialVersionUID = 1L; + + public enum OperationType { + ENTITY_CREATE, ENTITY_UPDATE, ENTITY_DELETE, + CLASSIFICATION_ADD, CLASSIFICATION_DELETE, CLASSIFICATION_UPDATE + } + + private AtlasEntityHeader entity; + private OperationType operationType; + + public EntityNotificationV2() { + super(ENTITY_NOTIFICATION_V2); + } + + public EntityNotificationV2(AtlasEntityHeader entity, OperationType operationType) { + super(ENTITY_NOTIFICATION_V2); + + setEntity(entity); + setOperationType(operationType); + } + + public AtlasEntityHeader getEntity() { + return entity; + } + + public void setEntity(AtlasEntityHeader entity) { + this.entity = entity; + } + + public OperationType getOperationType() { + return operationType; + } + + public void setOperationType(OperationType operationType) { + this.operationType = operationType; + } + + @Override + public boolean equals(Object o) { + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } + EntityNotificationV2 that = (EntityNotificationV2) o; + return Objects.equals(type, that.type) && + Objects.equals(entity, that.entity) && + operationType == that.operationType; + } + + @Override + public int hashCode() { + return Objects.hash(type, entity, operationType); + } + + @Override + public StringBuilder toString(StringBuilder sb) { + if (sb == null) { + sb = new StringBuilder(); + } + + sb.append("EntityNotificationV1{"); + super.toString(sb); + sb.append(", entity="); + if (entity != null) { + entity.toString(sb); + } else { + sb.append(entity); + } + sb.append(", operationType=").append(operationType); + sb.append("}"); + + return sb; + } + } } http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/main/java/org/apache/atlas/model/typedef/AtlasStructDef.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasStructDef.java b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasStructDef.java index a4c707a..9791911 100644 --- a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasStructDef.java +++ b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasStructDef.java @@ -272,6 +272,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { private int valuesMaxCount; private boolean isUnique; private boolean isIndexable; + private boolean includeInNotification; private String defaultValue; private String description; @@ -280,17 +281,17 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { public AtlasAttributeDef() { this(null, null); } public AtlasAttributeDef(String name, String typeName) { - this(name, typeName, false, Cardinality.SINGLE, COUNT_NOT_SET, COUNT_NOT_SET, false, false, null); + this(name, typeName, false, Cardinality.SINGLE, COUNT_NOT_SET, COUNT_NOT_SET, false, false, false, null); } public AtlasAttributeDef(String name, String typeName, boolean isOptional, Cardinality cardinality, - int valuesMinCount, int valuesMaxCount, boolean isUnique, boolean isIndexable, List<AtlasConstraintDef> constraints) { - this(name, typeName, isOptional, cardinality, valuesMinCount, valuesMaxCount, isUnique, isIndexable, null, constraints, null); + int valuesMinCount, int valuesMaxCount, boolean isUnique, boolean isIndexable, boolean includeInNotification, List<AtlasConstraintDef> constraints) { + this(name, typeName, isOptional, cardinality, valuesMinCount, valuesMaxCount, isUnique, isIndexable, includeInNotification, null, constraints, null); } public AtlasAttributeDef(String name, String typeName, boolean isOptional, Cardinality cardinality, - int valuesMinCount, int valuesMaxCount, boolean isUnique, boolean isIndexable, String defaultValue, + int valuesMinCount, int valuesMaxCount, boolean isUnique, boolean isIndexable, boolean includeInNotification, String defaultValue, List<AtlasConstraintDef> constraints, String description) { setName(name); setTypeName(typeName); @@ -300,6 +301,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { setValuesMaxCount(valuesMaxCount); setIsUnique(isUnique); setIsIndexable(isIndexable); + setIncludeInNotification(includeInNotification); setDefaultValue(defaultValue); setConstraints(constraints); setDescription(description); @@ -315,6 +317,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { setValuesMaxCount(other.getValuesMaxCount()); setIsUnique(other.getIsUnique()); setIsIndexable(other.getIsIndexable()); + setIncludeInNotification(other.getIncludeInNotification()); setDefaultValue(other.getDefaultValue()); setConstraints(other.getConstraints()); setDescription((other.getDescription())); @@ -379,6 +382,10 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { return isIndexable; } + public boolean getIncludeInNotification() { return includeInNotification; } + + public void setIncludeInNotification(Boolean isInNotification) { this.includeInNotification = isInNotification == null ? Boolean.FALSE : isInNotification; } + public String getDefaultValue(){ return defaultValue; } @@ -440,6 +447,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { sb.append(", valuesMaxCount=").append(valuesMaxCount); sb.append(", isUnique=").append(isUnique); sb.append(", isIndexable=").append(isIndexable); + sb.append(", includeInNotification=").append(includeInNotification); sb.append(", defaultValue=").append(defaultValue); sb.append(", constraints=["); if (CollectionUtils.isNotEmpty(constraints)) { @@ -468,6 +476,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { valuesMaxCount == that.valuesMaxCount && isUnique == that.isUnique && isIndexable == that.isIndexable && + includeInNotification == that.includeInNotification && Objects.equals(name, that.name) && Objects.equals(typeName, that.typeName) && cardinality == that.cardinality && @@ -478,7 +487,7 @@ public class AtlasStructDef extends AtlasBaseTypeDef implements Serializable { @Override public int hashCode() { - return Objects.hash(name, typeName, isOptional, cardinality, valuesMinCount, valuesMaxCount, isUnique, isIndexable, defaultValue, constraints, description); + return Objects.hash(name, typeName, isOptional, cardinality, valuesMinCount, valuesMaxCount, isUnique, isIndexable, includeInNotification, defaultValue, constraints, description); } @Override http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java b/intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java index 1b6af94..6c0fdbf 100644 --- a/intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java +++ b/intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java @@ -143,35 +143,35 @@ public class AtlasTypeUtil { public static AtlasAttributeDef createOptionalAttrDef(String name, AtlasType dataType) { return new AtlasAttributeDef(name, dataType.getTypeName(), true, Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createOptionalAttrDef(String name, String dataType) { return new AtlasAttributeDef(name, dataType, true, Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createRequiredAttrDef(String name, String dataType) { return new AtlasAttributeDef(name, dataType, false, Cardinality.SINGLE, 1, 1, - false, true, + false, true, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createListRequiredAttrDef(String name, String dataType) { return new AtlasAttributeDef(name, dataType, false, Cardinality.LIST, 1, Integer.MAX_VALUE, - false, true, + false, true, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createOptionalListAttrDef(String name, String dataType) { return new AtlasAttributeDef(name, dataType, true, Cardinality.LIST, 1, Integer.MAX_VALUE, - false, true, + false, true, false, Collections.<AtlasConstraintDef>emptyList()); } @@ -199,21 +199,21 @@ public class AtlasTypeUtil { public static AtlasAttributeDef createUniqueRequiredAttrDef(String name, AtlasType dataType) { return new AtlasAttributeDef(name, dataType.getTypeName(), false, Cardinality.SINGLE, 1, 1, - true, true, + true, true, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createUniqueRequiredAttrDef(String name, String typeName) { return new AtlasAttributeDef(name, typeName, false, Cardinality.SINGLE, 1, 1, - true, true, + true, true, false, Collections.<AtlasConstraintDef>emptyList()); } public static AtlasAttributeDef createRequiredAttrDef(String name, AtlasType dataType) { return new AtlasAttributeDef(name, dataType.getTypeName(), false, Cardinality.SINGLE, 1, 1, - false, true, + false, true, false, Collections.<AtlasConstraintDef>emptyList()); } http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java index 7d65bb6..1c13860 100644 --- a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java +++ b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.atlas.model.discovery.AtlasSearchResult.AtlasFullTextResult; import org.apache.atlas.model.notification.EntityNotification; import org.apache.atlas.model.notification.EntityNotification.EntityNotificationType; +import org.apache.atlas.model.notification.EntityNotification.EntityNotificationV2; import org.apache.atlas.model.notification.HookNotification; import org.apache.atlas.model.notification.HookNotification.HookNotificationType; import org.apache.atlas.model.notification.HookNotification.EntityCreateRequestV2; @@ -39,7 +40,6 @@ import org.apache.atlas.v1.model.instance.Id; import org.apache.atlas.v1.model.instance.Referenceable; import org.apache.atlas.v1.model.instance.Struct; import org.apache.atlas.v1.model.notification.EntityNotificationV1; -import org.apache.atlas.v1.model.notification.EntityNotificationV2; import org.apache.atlas.v1.model.notification.HookNotificationV1.*; import org.apache.commons.collections.MapUtils; import org.slf4j.Logger; http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/main/java/org/apache/atlas/v1/model/notification/EntityNotificationV2.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/v1/model/notification/EntityNotificationV2.java b/intg/src/main/java/org/apache/atlas/v1/model/notification/EntityNotificationV2.java deleted file mode 100644 index a8dfd23..0000000 --- a/intg/src/main/java/org/apache/atlas/v1/model/notification/EntityNotificationV2.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.atlas.v1.model.notification; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.instance.AtlasEntity; -import org.apache.atlas.model.notification.EntityNotification; -import org.apache.atlas.model.typedef.AtlasBaseTypeDef; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import java.io.Serializable; -import java.util.List; -import java.util.Objects; - -import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; -import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; -import static org.apache.atlas.model.notification.EntityNotification.EntityNotificationType.ENTITY_NOTIFICATION_V2; - -/** - * Entity v2 notification - */ -@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown=true) -@XmlRootElement -@XmlAccessorType(XmlAccessType.PROPERTY) -public class EntityNotificationV2 extends EntityNotification implements Serializable { - private static final long serialVersionUID = 1L; - - public enum OperationType { - ENTITY_CREATE, ENTITY_UPDATE, ENTITY_DELETE, - CLASSIFICATION_ADD, CLASSIFICATION_DELETE, CLASSIFICATION_UPDATE - } - - private AtlasEntity entity; - private OperationType operationType; - private List<AtlasClassification> classifications; - - public EntityNotificationV2() { } - - public EntityNotificationV2(AtlasEntity entity, OperationType operationType, List<AtlasClassification> classifications) { - setEntity(entity); - setOperationType(operationType); - setClassifications(classifications); - setType(ENTITY_NOTIFICATION_V2); - } - - public AtlasEntity getEntity() { - return entity; - } - - public void setEntity(AtlasEntity entity) { - this.entity = entity; - } - - public OperationType getOperationType() { - return operationType; - } - - public void setOperationType(OperationType operationType) { - this.operationType = operationType; - } - - public List<AtlasClassification> getClassifications() { - return classifications; - } - - public void setClassifications(List<AtlasClassification> classifications) { - this.classifications = classifications; - } - - @Override - public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } - EntityNotificationV2 that = (EntityNotificationV2) o; - return Objects.equals(entity, that.entity) && - operationType == that.operationType && - Objects.equals(classifications, that.classifications); - } - - @Override - public int hashCode() { - return Objects.hash(entity, operationType, classifications); - } - - @Override - public StringBuilder toString(StringBuilder sb) { - if (sb == null) { - sb = new StringBuilder(); - } - - sb.append("EntityNotificationV1{"); - super.toString(sb); - sb.append(", entity="); - if (entity != null) { - entity.toString(sb); - } else { - sb.append(entity); - } - sb.append(", operationType=").append(operationType); - sb.append(", classifications=["); - AtlasBaseTypeDef.dumpObjects(classifications, sb); - sb.append("]"); - sb.append("}"); - - return sb; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/intg/src/test/java/org/apache/atlas/TestUtilsV2.java ---------------------------------------------------------------------- diff --git a/intg/src/test/java/org/apache/atlas/TestUtilsV2.java b/intg/src/test/java/org/apache/atlas/TestUtilsV2.java index 94242ad..836710c 100755 --- a/intg/src/test/java/org/apache/atlas/TestUtilsV2.java +++ b/intg/src/test/java/org/apache/atlas/TestUtilsV2.java @@ -92,7 +92,7 @@ public final class TestUtilsV2 { AtlasTypeUtil.createClassTypeDef(DEPARTMENT_TYPE, "Department"+_description, Collections.<String>emptySet(), AtlasTypeUtil.createUniqueRequiredAttrDef("name", "string"), new AtlasAttributeDef("employees", String.format("array<%s>", "Employee"), true, - AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, + AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef(AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); }})); @@ -114,11 +114,11 @@ public final class TestUtilsV2 { AtlasTypeUtil.createOptionalAttrDef("orgLevel", "OrgLevel"), new AtlasAttributeDef("department", "Department", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, new ArrayList<AtlasConstraintDef>()), new AtlasAttributeDef("manager", "Manager", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasConstraintDef>() {{ add(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, new HashMap<String, Object>() {{ @@ -127,7 +127,7 @@ public final class TestUtilsV2 { }}), new AtlasAttributeDef("mentor", EMPLOYEE_TYPE, true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), AtlasTypeUtil.createOptionalAttrDef("shares", "long"), AtlasTypeUtil.createOptionalAttrDef("salary", "double") @@ -141,7 +141,7 @@ public final class TestUtilsV2 { AtlasEntityDef managerTypeDef = AtlasTypeUtil.createClassTypeDef("Manager", "Manager"+_description, Collections.singleton("Employee"), new AtlasAttributeDef("subordinates", String.format("array<%s>", "Employee"), false, AtlasAttributeDef.Cardinality.SET, - 1, 10, false, false, + 1, 10, false, false, false, Collections.<AtlasConstraintDef>emptyList())); AtlasClassificationDef securityClearanceTypeDef = @@ -160,25 +160,25 @@ public final class TestUtilsV2 { public static AtlasTypesDef defineInverseReferenceTestTypes() { AtlasEntityDef aDef = AtlasTypeUtil.createClassTypeDef("A", Collections.<String>emptySet(), AtlasTypeUtil.createUniqueRequiredAttrDef("name", "string"), - new AtlasAttributeDef("b", "B", true, Cardinality.SINGLE, 0, 1, false, false, Collections.<AtlasConstraintDef>emptyList()), // 1-1 - new AtlasAttributeDef("oneB", "B", true, Cardinality.SINGLE, 0, 1, false, false, Collections.<AtlasConstraintDef>emptyList()), // 1-* - new AtlasAttributeDef("manyB", AtlasBaseTypeDef.getArrayTypeName("B"), true, Cardinality.SINGLE, 0, 1, false, false, Collections.<AtlasConstraintDef>emptyList()), - new AtlasAttributeDef("mapToB", AtlasBaseTypeDef.getMapTypeName("string", "B"), true, Cardinality.SINGLE, 0, 1, false, false, + new AtlasAttributeDef("b", "B", true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>emptyList()), // 1-1 + new AtlasAttributeDef("oneB", "B", true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>emptyList()), // 1-* + new AtlasAttributeDef("manyB", AtlasBaseTypeDef.getArrayTypeName("B"), true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>emptyList()), + new AtlasAttributeDef("mapToB", AtlasBaseTypeDef.getMapTypeName("string", "B"), true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>singletonList(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, Collections.<String, Object>singletonMap(AtlasConstraintDef.CONSTRAINT_PARAM_ATTRIBUTE, "mappedFromA"))))); // *-* AtlasEntityDef bDef = AtlasTypeUtil.createClassTypeDef("B", Collections.<String>emptySet(), AtlasTypeUtil.createUniqueRequiredAttrDef("name", "string"), - new AtlasAttributeDef("a", "A", true, Cardinality.SINGLE, 0, 1, false, false, + new AtlasAttributeDef("a", "A", true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>singletonList(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, Collections.<String, Object>singletonMap(AtlasConstraintDef.CONSTRAINT_PARAM_ATTRIBUTE, "b")))), - new AtlasAttributeDef("manyA", AtlasBaseTypeDef.getArrayTypeName("A"), true, Cardinality.SINGLE, 0, 1, false, false, + new AtlasAttributeDef("manyA", AtlasBaseTypeDef.getArrayTypeName("A"), true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>singletonList(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, Collections.<String, Object>singletonMap(AtlasConstraintDef.CONSTRAINT_PARAM_ATTRIBUTE, "oneB")))), - new AtlasAttributeDef("manyToManyA", AtlasBaseTypeDef.getArrayTypeName("A"), true, Cardinality.SINGLE, 0, 1, false, false, + new AtlasAttributeDef("manyToManyA", AtlasBaseTypeDef.getArrayTypeName("A"), true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>singletonList(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, Collections.<String, Object>singletonMap(AtlasConstraintDef.CONSTRAINT_PARAM_ATTRIBUTE, "manyB")))), - new AtlasAttributeDef("mappedFromA", "A", true, Cardinality.SINGLE, 0, 1, false, false, Collections.<AtlasConstraintDef>emptyList())); + new AtlasAttributeDef("mappedFromA", "A", true, Cardinality.SINGLE, 0, 1, false, false, false, Collections.<AtlasConstraintDef>emptyList())); AtlasTypesDef ret = new AtlasTypesDef(Collections.<AtlasEnumDef>emptyList(), Collections.<AtlasStructDef>emptyList(), Collections.<AtlasClassificationDef>emptyList(), Arrays.asList(aDef, bDef)); @@ -208,7 +208,7 @@ public final class TestUtilsV2 { AtlasTypeUtil.createUniqueRequiredAttrDef("name", "string"), AtlasTypeUtil.createOptionalAttrDef("dep-code", "string"), new AtlasAttributeDef("employees", String.format("array<%s>", "Employee"), true, - AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, + AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef(AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); }})); @@ -234,11 +234,11 @@ public final class TestUtilsV2 { AtlasTypeUtil.createOptionalAttrDef("empCode", "string"), new AtlasAttributeDef("department", "Department", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("manager", "Manager", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasConstraintDef>() {{ add(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, new HashMap<String, Object>() {{ @@ -247,7 +247,7 @@ public final class TestUtilsV2 { }}), new AtlasAttributeDef("mentor", EMPLOYEE_TYPE, true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), AtlasTypeUtil.createOptionalAttrDef("shares", "long"), AtlasTypeUtil.createOptionalAttrDef("salary", "double") @@ -257,7 +257,7 @@ public final class TestUtilsV2 { AtlasEntityDef managerTypeDef = AtlasTypeUtil.createClassTypeDef("Manager", "Manager"+_description, Collections.singleton("Employee"), new AtlasAttributeDef("subordinates", String.format("array<%s>", "Employee"), false, AtlasAttributeDef.Cardinality.SET, - 1, 10, false, false, + 1, 10, false, false, false, Collections.<AtlasConstraintDef>emptyList())); AtlasClassificationDef securityClearanceTypeDef = @@ -296,7 +296,7 @@ public final class TestUtilsV2 { AtlasTypeUtil.createRequiredAttrDef("name", "string"), AtlasTypeUtil.createRequiredAttrDef("dep-code", "string"), new AtlasAttributeDef("employees", String.format("array<%s>", "Person"), true, - AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, + AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef(AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); }})); @@ -308,11 +308,11 @@ public final class TestUtilsV2 { AtlasTypeUtil.createOptionalAttrDef("address", "Address"), new AtlasAttributeDef("department", "Department", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("manager", "Manager", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasConstraintDef>() {{ add(new AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, new HashMap<String, Object>() {{ @@ -321,7 +321,7 @@ public final class TestUtilsV2 { }}), new AtlasAttributeDef("mentor", "Person", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), AtlasTypeUtil.createOptionalAttrDef("birthday", "date"), AtlasTypeUtil.createOptionalAttrDef("hasPets", "boolean"), @@ -645,7 +645,7 @@ public final class TestUtilsV2 { new AtlasAttributeDef("table", TABLE_TYPE, true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_INVERSE_REF, new HashMap<String, Object>() {{ @@ -660,23 +660,23 @@ public final class TestUtilsV2 { AtlasAttributeDef[] attributeDefinitions = new AtlasAttributeDef[]{ new AtlasAttributeDef("location", "string", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("inputFormat", "string", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("outputFormat", "string", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("compressed", "boolean", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("numBuckets", "int", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), }; @@ -688,32 +688,32 @@ public final class TestUtilsV2 { new AtlasAttributeDef("values", "array<string>", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("table", TABLE_TYPE, true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("createTime", "long", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("lastAccessTime", "long", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("sd", STORAGE_DESC_TYPE, false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("columns", String.format("array<%s>", COLUMN_TYPE), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("parameters", String.format("map<%s,%s>", "string", "string"), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList())}; AtlasEntityDef partClsDef = @@ -724,7 +724,7 @@ public final class TestUtilsV2 { new AtlasEntityDef(PROCESS_TYPE, PROCESS_TYPE + _description, "1.0", Arrays.asList(new AtlasAttributeDef("outputs", "array<" + TABLE_TYPE + ">", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList())), Collections.<String>emptySet()); @@ -737,19 +737,19 @@ public final class TestUtilsV2 { // enum new AtlasAttributeDef("tableType", "tableType", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), // array of strings new AtlasAttributeDef("columnNames", String.format("array<%s>", "string"), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), // array of classes new AtlasAttributeDef("columns", String.format("array<%s>", COLUMN_TYPE), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef(AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); }}), @@ -757,20 +757,20 @@ public final class TestUtilsV2 { new AtlasAttributeDef("partitions", String.format("array<%s>", "partition_struct_type"), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), // map of primitives new AtlasAttributeDef("parametersMap", String.format("map<%s,%s>", "string", "string"), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), //map of classes - new AtlasAttributeDef(COLUMNS_MAP, String.format("map<%s,%s>", "string", COLUMN_TYPE), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); @@ -781,26 +781,26 @@ public final class TestUtilsV2 { String.format("map<%s,%s>", "string", "partition_struct_type"), true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), // struct reference new AtlasAttributeDef("serde1", "serdeType", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("serde2", "serdeType", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), // class reference new AtlasAttributeDef("database", DATABASE_TYPE, false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), //class reference as composite new AtlasAttributeDef("databaseComposite", DATABASE_TYPE, true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, false, + false, false, false, new ArrayList<AtlasStructDef.AtlasConstraintDef>() {{ add(new AtlasStructDef.AtlasConstraintDef( AtlasConstraintDef.CONSTRAINT_TYPE_OWNED_REF)); @@ -840,86 +840,86 @@ public final class TestUtilsV2 { new AtlasAttributeDef("mapOfArrayOfStrings", "map<string,array<string>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfArrayOfBooleans", "map<string,array<boolean>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfArrayOfInts", "map<string,array<int>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfArrayOfFloats", "map<string,array<float>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfArrayOfDates", "map<string,array<date>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfMapOfStrings", "map<string,map<string,string>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfMapOfBooleans", "map<string,map<string,boolean>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfMapOfInts", "map<string,map<string,int>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfMapOfFloats", "map<string,map<string,float>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("mapOfMapOfDates", "map<string,map<string,date>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfArrayOfStrings", "array<array<string>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfArrayOfBooleans", "array<array<boolean>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfArrayOfInts", "array<array<int>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfArrayOfFloats", "array<array<float>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfArrayOfDates", "array<array<date>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfMapOfStrings", "array<map<string,string>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfMapOfBooleans", "array<map<string,boolean>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfMapOfInts", "array<map<string,int>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfMapOfFloats", "array<map<string,float>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()), new AtlasAttributeDef("arrayOfMapOfDates", "array<map<string,date>>", false, AtlasAttributeDef.Cardinality.SINGLE, 1, 1, - false, false, + false, false, false, Collections.<AtlasConstraintDef>emptyList()) ); @@ -1179,7 +1179,7 @@ public final class TestUtilsV2 { public static List<AtlasEntityDef> getEntityWithValidSuperType() { AtlasEntityDef developerTypeDef = AtlasTypeUtil.createClassTypeDef("Developer", "Developer_description", Collections.singleton("Employee"), new AtlasAttributeDef("language", String.format("array<%s>", "string"), false, AtlasAttributeDef.Cardinality.SET, - 1, 10, false, false, + 1, 10, false, false, false, Collections.<AtlasConstraintDef>emptyList())); List<AtlasEntityDef> ret = Arrays.asList(developerTypeDef); @@ -1192,7 +1192,7 @@ public final class TestUtilsV2 { public static List<AtlasEntityDef> getEntityWithName(String name) { AtlasEntityDef developerTypeDef = AtlasTypeUtil.createClassTypeDef(name, "Developer_description", Collections.<String>emptySet(), new AtlasAttributeDef("language", String.format("array<%s>", "string"), false, AtlasAttributeDef.Cardinality.SET, - 1, 10, false, false, + 1, 10, false, false, false, Collections.<AtlasConstraintDef>emptyList())); List<AtlasEntityDef> ret = Arrays.asList(developerTypeDef); @@ -1205,7 +1205,7 @@ public final class TestUtilsV2 { public static AtlasEntityDef getSingleEntityWithName(String name) { AtlasEntityDef developerTypeDef = AtlasTypeUtil.createClassTypeDef(name, "Developer_description", Collections.<String>emptySet(), new AtlasAttributeDef("language", String.format("array<%s>", "string"), false, AtlasAttributeDef.Cardinality.SET, - 1, 10, false, false, + 1, 10, false, false, false, Collections.<AtlasConstraintDef>emptyList())); return developerTypeDef; http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java index eb58b5e..7eda7e2 100644 --- a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java +++ b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java @@ -56,13 +56,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import static org.apache.atlas.EntityAuditEvent.EntityAuditAction.TAG_ADD; -import static org.apache.atlas.EntityAuditEvent.EntityAuditAction.TAG_DELETE; -import static org.apache.atlas.EntityAuditEvent.EntityAuditAction.TAG_UPDATE; -import static org.apache.atlas.model.audit.EntityAuditEventV2.EntityAuditAction.CLASSIFICATION_DELETE; -import static org.apache.atlas.model.audit.EntityAuditEventV2.EntityAuditAction.CLASSIFICATION_UPDATE; -import static org.apache.atlas.v1.model.notification.EntityNotificationV2.OperationType.CLASSIFICATION_ADD; - @Singleton @Component public class AtlasInstanceConverter { http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasStructDefStoreV1.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasStructDefStoreV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasStructDefStoreV1.java index 44fb95f..cf1d307 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasStructDefStoreV1.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasStructDefStoreV1.java @@ -480,6 +480,7 @@ public class AtlasStructDefStoreV1 extends AtlasAbstractDefStoreV1<AtlasStructDe attribInfo.put("dataType", attributeDef.getTypeName()); attribInfo.put("isUnique", attributeDef.getIsUnique()); attribInfo.put("isIndexable", attributeDef.getIsIndexable()); + attribInfo.put("includeInNotification", attributeDef.getIncludeInNotification()); attribInfo.put("isComposite", attribute.isOwnedRef()); attribInfo.put("reverseAttributeName", attribute.getInverseRefAttributeName()); attribInfo.put("defaultValue", attributeDef.getDefaultValue()); @@ -522,6 +523,7 @@ public class AtlasStructDefStoreV1 extends AtlasAbstractDefStoreV1<AtlasStructDe ret.setTypeName((String) attribInfo.get("dataType")); ret.setIsUnique((Boolean) attribInfo.get("isUnique")); ret.setIsIndexable((Boolean) attribInfo.get("isIndexable")); + ret.setIncludeInNotification((Boolean) attribInfo.get("includeInNotification")); ret.setDefaultValue((String) attribInfo.get("defaultValue")); ret.setDescription((String) attribInfo.get("description")); http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/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 c7a61a2..0d65471 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 @@ -118,12 +118,12 @@ public final class EntityGraphRetriever { private static final String TERM_RELATION_NAME = "AtlasGlossarySemanticAssignment"; private static final String GLOSSARY_TERM_DISPLAY_NAME_ATTR = "AtlasGlossaryTerm.displayName"; - private final String NAME = "name"; - private final String DISPLAY_NAME = "displayName"; - private final String DESCRIPTION = "description"; - private final String OWNER = "owner"; - private final String CREATE_TIME = "createTime"; - private final String QUALIFIED_NAME = "qualifiedName"; + public static final String NAME = "name"; + public static final String DISPLAY_NAME = "displayName"; + public static final String DESCRIPTION = "description"; + public static final String OWNER = "owner"; + public static final String CREATE_TIME = "createTime"; + public static final String QUALIFIED_NAME = "qualifiedName"; private static final TypeReference<List<TimeBoundary>> TIME_BOUNDARIES_LIST_TYPE = new TypeReference<List<TimeBoundary>>() {}; private static final GraphHelper graphHelper = GraphHelper.getInstance(); http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/repository/src/test/java/org/apache/atlas/repository/store/graph/AtlasTypeDefGraphStoreTest.java ---------------------------------------------------------------------- diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/AtlasTypeDefGraphStoreTest.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/AtlasTypeDefGraphStoreTest.java index 26f3165..9fcef6f 100644 --- a/repository/src/test/java/org/apache/atlas/repository/store/graph/AtlasTypeDefGraphStoreTest.java +++ b/repository/src/test/java/org/apache/atlas/repository/store/graph/AtlasTypeDefGraphStoreTest.java @@ -570,7 +570,7 @@ public class AtlasTypeDefGraphStoreTest { AtlasClassificationDef aTag = new AtlasClassificationDef("testTag"); AtlasAttributeDef attributeDef = new AtlasAttributeDef("testAttribute", "string", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, true, + false, true, false, Collections.<AtlasStructDef.AtlasConstraintDef>emptyList()); aTag.addAttribute(attributeDef); @@ -592,7 +592,7 @@ public class AtlasTypeDefGraphStoreTest { aTag = new AtlasClassificationDef("testTag"); attributeDef = new AtlasAttributeDef("testAttribute", "int", true, AtlasAttributeDef.Cardinality.SINGLE, 0, 1, - false, true, + false, true, false, Collections.<AtlasStructDef.AtlasConstraintDef>emptyList()); aTag.addAttribute(attributeDef); typesDef.setClassificationDefs(Arrays.asList(aTag)); http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java ---------------------------------------------------------------------- diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java index b46a1b7..0913e6f 100644 --- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java +++ b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java @@ -1007,7 +1007,7 @@ public class AtlasEntityStoreV1Test { private AtlasClassificationDef getTagWithName(AtlasTypesDef typesDef, String tagName, String attributeType) { AtlasClassificationDef aTag = new AtlasClassificationDef(tagName); AtlasAttributeDef attributeDef = new AtlasAttributeDef("testAttribute", attributeType, true, - AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, true, + AtlasAttributeDef.Cardinality.SINGLE, 0, 1, false, true, false, Collections.emptyList()); aTag.addAttribute(attributeDef); http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/webapp/src/main/java/org/apache/atlas/notification/EntityNotificationListenerV2.java ---------------------------------------------------------------------- diff --git a/webapp/src/main/java/org/apache/atlas/notification/EntityNotificationListenerV2.java b/webapp/src/main/java/org/apache/atlas/notification/EntityNotificationListenerV2.java index ab17ae4..9de49d4 100644 --- a/webapp/src/main/java/org/apache/atlas/notification/EntityNotificationListenerV2.java +++ b/webapp/src/main/java/org/apache/atlas/notification/EntityNotificationListenerV2.java @@ -23,10 +23,13 @@ import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.listener.EntityChangeListenerV2; import org.apache.atlas.model.instance.AtlasClassification; import org.apache.atlas.model.instance.AtlasEntity; +import org.apache.atlas.model.instance.AtlasEntityHeader; +import org.apache.atlas.model.notification.EntityNotification.EntityNotificationV2; +import org.apache.atlas.model.notification.EntityNotification.EntityNotificationV2.OperationType; import org.apache.atlas.type.AtlasClassificationType; +import org.apache.atlas.type.AtlasEntityType; +import org.apache.atlas.type.AtlasStructType.AtlasAttribute; import org.apache.atlas.type.AtlasTypeRegistry; -import org.apache.atlas.v1.model.notification.EntityNotificationV2; -import org.apache.atlas.v1.model.notification.EntityNotificationV2.OperationType; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.configuration.Configuration; @@ -34,26 +37,25 @@ import org.springframework.stereotype.Component; import javax.inject.Inject; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import static org.apache.atlas.notification.NotificationEntityChangeListener.ATLAS_ENTITY_NOTIFICATION_PROPERTY; import static org.apache.atlas.notification.NotificationInterface.NotificationType.ENTITIES; import static org.apache.atlas.repository.graph.GraphHelper.isInternalType; -import static org.apache.atlas.v1.model.notification.EntityNotificationV2.OperationType.*; +import static org.apache.atlas.model.notification.EntityNotification.EntityNotificationV2.OperationType.*; +import static org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever.CREATE_TIME; +import static org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever.DESCRIPTION; +import static org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever.NAME; +import static org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever.OWNER; +import static org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever.QUALIFIED_NAME; @Component public class EntityNotificationListenerV2 implements EntityChangeListenerV2 { - private final AtlasTypeRegistry typeRegistry; - private final NotificationInterface notificationInterface; - private final Configuration configuration; - private final Map<String, List<String>> notificationAttributesCache = new HashMap<>(); + private final AtlasTypeRegistry typeRegistry; + private final NotificationInterface notificationInterface; @Inject public EntityNotificationListenerV2(AtlasTypeRegistry typeRegistry, @@ -61,7 +63,6 @@ public class EntityNotificationListenerV2 implements EntityChangeListenerV2 { Configuration configuration) { this.typeRegistry = typeRegistry; this.notificationInterface = notificationInterface; - this.configuration = configuration; } @Override @@ -109,9 +110,7 @@ public class EntityNotificationListenerV2 implements EntityChangeListenerV2 { continue; } - filterNotificationAttributes(entity); - - messages.add(new EntityNotificationV2(entity, operationType, getAllClassifications(entity))); + messages.add(new EntityNotificationV2(toNotificationHeader(entity), operationType)); } if (!messages.isEmpty()) { @@ -123,14 +122,60 @@ public class EntityNotificationListenerV2 implements EntityChangeListenerV2 { } } - private List<AtlasClassification> getAllClassifications(AtlasEntity entity) { - List<AtlasClassification> ret = getAllClassifications(entity.getClassifications(), typeRegistry); + private AtlasEntityHeader toNotificationHeader(AtlasEntity entity) { + AtlasEntityHeader ret = new AtlasEntityHeader(entity.getTypeName(), entity.getGuid(), new HashMap<>()); + Object name = entity.getAttribute(NAME); + Object displayText = name != null ? name : entity.getAttribute(QUALIFIED_NAME); + + ret.setGuid(entity.getGuid()); + ret.setStatus(entity.getStatus()); + setAttribute(ret, NAME, name); + setAttribute(ret, DESCRIPTION, entity.getAttribute(DESCRIPTION)); + setAttribute(ret, OWNER, entity.getAttribute(OWNER)); + setAttribute(ret, CREATE_TIME, entity.getAttribute(CREATE_TIME)); + + if (displayText != null) { + ret.setDisplayText(displayText.toString()); + } + + AtlasEntityType entityType = typeRegistry.getEntityTypeByName(entity.getTypeName()); + + if (entityType != null) { + for (AtlasAttribute attribute : entityType.getAllAttributes().values()) { + if (attribute.getAttributeDef().getIsUnique() || attribute.getAttributeDef().getIncludeInNotification()) { + Object attrValue = entity.getAttribute(attribute.getName()); + + if (attrValue != null) { + ret.setAttribute(attribute.getName(), attrValue); + } + } + } + + if (CollectionUtils.isNotEmpty(entity.getClassifications())) { + List<AtlasClassification> classifications = new ArrayList<>(entity.getClassifications().size()); + List<String> classificationNames = new ArrayList<>(entity.getClassifications().size()); + + for (AtlasClassification classification : getAllClassifications(entity.getClassifications())) { + classifications.add(classification); + classificationNames.add(classification.getTypeName()); + } + + ret.setClassifications(classifications); + ret.setClassificationNames(classificationNames); + } + } return ret; } - private static List<AtlasClassification> getAllClassifications(List<AtlasClassification> classifications, AtlasTypeRegistry typeRegistry) { - List<AtlasClassification> ret = new LinkedList<>(); + private void setAttribute(AtlasEntityHeader entity, String attrName, Object attrValue) { + if (attrValue != null) { + entity.setAttribute(attrName, attrValue); + } + } + + private List<AtlasClassification> getAllClassifications(List<AtlasClassification> classifications) { + List<AtlasClassification> ret = new ArrayList<>(); if (CollectionUtils.isNotEmpty(classifications)) { for (AtlasClassification classification : classifications) { @@ -172,36 +217,4 @@ public class EntityNotificationListenerV2 implements EntityChangeListenerV2 { return ret; } - - private void filterNotificationAttributes(AtlasEntity entity) { - Map<String, Object> attributesMap = entity.getAttributes(); - List<String> notificationAttrs = getNotificationAttributes(entity.getTypeName()); - - if (MapUtils.isNotEmpty(attributesMap) && CollectionUtils.isNotEmpty(notificationAttrs)) { - Collection<String> attributesToRemove = CollectionUtils.subtract(attributesMap.keySet(), notificationAttrs); - - for (String attributeToRemove : attributesToRemove) { - attributesMap.remove(attributeToRemove); - } - } - } - - private List<String> getNotificationAttributes(String entityType) { - List<String> ret = null; - - if (notificationAttributesCache.containsKey(entityType)) { - ret = notificationAttributesCache.get(entityType); - } else if (configuration != null) { - String attributesToIncludeKey = ATLAS_ENTITY_NOTIFICATION_PROPERTY + "." + entityType + "." + "attributes.include"; - String[] notificationAttributes = configuration.getStringArray(attributesToIncludeKey); - - if (notificationAttributes != null) { - ret = Arrays.asList(notificationAttributes); - } - - notificationAttributesCache.put(entityType, ret); - } - - return ret; - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java index 6f6a7ee..efa5139 100755 --- a/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java @@ -379,7 +379,7 @@ public abstract class BaseResourceIT { AtlasBaseTypeDef.getArrayTypeName(HIVE_TABLE_TYPE_V2), true, Cardinality.SET, - 0, -1, false, true, Collections.singletonList(isCompositeSourceConstraint)) + 0, -1, false, true, false, Collections.singletonList(isCompositeSourceConstraint)) ); AtlasEntityDef columnClsDef = AtlasTypeUtil @@ -409,7 +409,7 @@ public abstract class BaseResourceIT { DATABASE_TYPE_V2, true, Cardinality.SINGLE, - 0, 1, false, true, Collections.singletonList(isCompositeTargetConstraint)), + 0, 1, false, true, false, Collections.singletonList(isCompositeTargetConstraint)), //some tests don't set the columns field or set it to null... AtlasTypeUtil.createOptionalAttrDef("columns", AtlasBaseTypeDef.getArrayTypeName(COLUMN_TYPE_V2)), http://git-wip-us.apache.org/repos/asf/atlas/blob/570f2423/webapp/src/test/java/org/apache/atlas/web/integration/TypedefsJerseyResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/integration/TypedefsJerseyResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/integration/TypedefsJerseyResourceIT.java index 5ee8d30..219b4e3 100644 --- a/webapp/src/test/java/org/apache/atlas/web/integration/TypedefsJerseyResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/integration/TypedefsJerseyResourceIT.java @@ -314,7 +314,7 @@ public class TypedefsJerseyResourceIT extends BaseResourceIT { new AtlasAttributeDef("database", "database", false, Cardinality.SINGLE, 1, 1, - true, true, + true, true, false, Collections.<AtlasConstraintDef>emptyList())); atlasTypesDef.getEntityDefs().add(tableTypeDefinition);