You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ap...@apache.org on 2018/05/25 03:52:56 UTC
[18/20] atlas git commit: ATLAS-2490: updates to make usage of v1/v2
in class names consistent
http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStream.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStream.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStream.java
deleted file mode 100644
index d6d6272..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStream.java
+++ /dev/null
@@ -1,88 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.repository.store.graph.v1;
-
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-
-import java.util.Iterator;
-
-public class AtlasEntityStream implements EntityStream {
- protected final AtlasEntitiesWithExtInfo entitiesWithExtInfo;
- protected final EntityStream entityStream;
- private Iterator<AtlasEntity> iterator;
-
-
- public AtlasEntityStream(AtlasEntity entity) {
- this(new AtlasEntitiesWithExtInfo(entity));
- }
-
- public AtlasEntityStream(AtlasEntityWithExtInfo entityWithExtInfo) {
- this(new AtlasEntitiesWithExtInfo(entityWithExtInfo));
- }
-
- public AtlasEntityStream(AtlasEntitiesWithExtInfo entitiesWithExtInfo) {
- this.entitiesWithExtInfo = entitiesWithExtInfo;
- this.iterator = this.entitiesWithExtInfo.getEntities().iterator();
- this.entityStream = null;
- }
-
- public AtlasEntityStream(AtlasEntity entity, EntityStream entityStream) {
- this.entitiesWithExtInfo = new AtlasEntitiesWithExtInfo(entity);
- this.iterator = this.entitiesWithExtInfo.getEntities().iterator();
- this.entityStream = entityStream;
- }
-
- public AtlasEntityStream(AtlasEntityWithExtInfo entityWithExtInfo, EntityStream entityStream) {
- this.entitiesWithExtInfo = new AtlasEntitiesWithExtInfo(entityWithExtInfo);
- this.iterator = this.entitiesWithExtInfo.getEntities().iterator();
- this.entityStream = entityStream;
- }
-
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- @Override
- public AtlasEntity next() {
- return iterator.hasNext() ? iterator.next() : null;
- }
-
- @Override
- public void reset() {
- this.iterator = entitiesWithExtInfo.getEntities().iterator();
- }
-
- @Override
- public AtlasEntity getByGuid(String guid) {
- return entityStream != null ? entityStream.getByGuid(guid) : entitiesWithExtInfo.getEntity(guid);
- }
-
- @Override
- public String toString() {
- StringBuffer sb = new StringBuffer("AtlasEntityStream{");
-
- sb.append("entitiesWithExtInfo=").append(entitiesWithExtInfo);
- sb.append(", iterator=").append(iterator);
- sb.append('}');
-
- return sb.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStreamForImport.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStreamForImport.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStreamForImport.java
deleted file mode 100644
index 90ae15d..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStreamForImport.java
+++ /dev/null
@@ -1,72 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.repository.store.graph.v1;
-
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-
-public class AtlasEntityStreamForImport extends AtlasEntityStream implements EntityImportStream {
- private int currentPosition = 0;
-
- public AtlasEntityStreamForImport(AtlasEntityWithExtInfo entityWithExtInfo, EntityStream entityStream) {
- super(entityWithExtInfo, entityStream);
- }
-
- @Override
- public AtlasEntityWithExtInfo getNextEntityWithExtInfo() {
- currentPosition++;
- AtlasEntity entity = next();
-
- return entity != null ? new AtlasEntityWithExtInfo(entity, super.entitiesWithExtInfo) : null;
- }
-
- @Override
- public AtlasEntity getByGuid(String guid) {
- AtlasEntity ent = super.entitiesWithExtInfo.getEntity(guid);
-
- if(ent == null && entityStream != null) {
- return entityStream.getByGuid(guid);
- }
-
- return ent;
- }
-
- @Override
- public int size() {
- return 1;
- }
-
- @Override
- public void setPosition(int position) {
- // not applicable for a single entity stream
- }
-
- @Override
- public int getPosition() {
- return currentPosition;
- }
-
- @Override
- public void setPositionUsingEntityGuid(String guid) {
- }
-
- @Override
- public void onImportComplete(String guid) {
-
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEnumDefStoreV1.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEnumDefStoreV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEnumDefStoreV1.java
deleted file mode 100644
index dcb36dd..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEnumDefStoreV1.java
+++ /dev/null
@@ -1,325 +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.repository.store.graph.v1;
-
-import org.apache.atlas.AtlasErrorCode;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.typedef.AtlasEnumDef;
-import org.apache.atlas.model.typedef.AtlasEnumDef.AtlasEnumElementDef;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.typesystem.types.DataTypes.TypeCategory;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.atlas.authorize.AtlasPrivilege;
-import org.apache.atlas.authorize.AtlasTypeAccessRequest;
-import org.apache.atlas.authorize.AtlasAuthorizationUtils;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * EnumDef store in v1 format.
- */
-class AtlasEnumDefStoreV1 extends AtlasAbstractDefStoreV1<AtlasEnumDef> {
- private static final Logger LOG = LoggerFactory.getLogger(AtlasEnumDefStoreV1.class);
-
- public AtlasEnumDefStoreV1(AtlasTypeDefGraphStoreV1 typeDefStore, AtlasTypeRegistry typeRegistry) {
- super(typeDefStore, typeRegistry);
- }
-
- @Override
- public AtlasVertex preCreate(AtlasEnumDef enumDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.preCreate({})", enumDef);
- }
-
- validateType(enumDef);
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByName(enumDef.getName());
-
- if (vertex != null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_ALREADY_EXISTS, enumDef.getName());
- }
-
- vertex = typeDefStore.createTypeVertex(enumDef);
-
- toVertex(enumDef, vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.preCreate({}): {}", enumDef, vertex);
- }
-
- return vertex;
- }
-
- @Override
- public AtlasEnumDef create(AtlasEnumDef enumDef, AtlasVertex preCreateResult) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.create({}, {})", enumDef, preCreateResult);
- }
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_CREATE, enumDef), "create enum-def ", enumDef.getName());
-
- AtlasVertex vertex = (preCreateResult == null) ? preCreate(enumDef) : preCreateResult;
-
- AtlasEnumDef ret = toEnumDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEntityDefStoreV1.create({}, {}): {}", enumDef, preCreateResult, ret);
- }
-
- return ret;
- }
-
- @Override
- public List<AtlasEnumDef> getAll() throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.getAll()");
- }
-
- List<AtlasEnumDef> ret = new ArrayList<>();
-
- Iterator<AtlasVertex> vertices = typeDefStore.findTypeVerticesByCategory(TypeCategory.ENUM);
- while (vertices.hasNext()) {
- ret.add(toEnumDef(vertices.next()));
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.getAll(): count={}", ret.size());
- }
-
- return ret;
- }
-
- @Override
- public AtlasEnumDef getByName(String name) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.getByName({})", name);
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- vertex.getProperty(Constants.TYPE_CATEGORY_PROPERTY_KEY, TypeCategory.class);
-
- AtlasEnumDef ret = toEnumDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.getByName({}): {}", name, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasEnumDef getByGuid(String guid) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.getByGuid({})", guid);
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- AtlasEnumDef ret = toEnumDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.getByGuid({}): {}", guid, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasEnumDef update(AtlasEnumDef enumDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.update({})", enumDef);
- }
-
- validateType(enumDef);
-
- AtlasEnumDef ret = StringUtils.isNotBlank(enumDef.getGuid()) ? updateByGuid(enumDef.getGuid(), enumDef)
- : updateByName(enumDef.getName(), enumDef);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.update({}): {}", enumDef, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasEnumDef updateByName(String name, AtlasEnumDef enumDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.updateByName({}, {})", name, enumDef);
- }
-
- AtlasEnumDef existingDef = typeRegistry.getEnumDefByName(name);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_UPDATE, existingDef), "update enum-def ", name);
-
- validateType(enumDef);
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- typeDefStore.updateTypeVertex(enumDef, vertex);
-
- toVertex(enumDef, vertex);
-
- AtlasEnumDef ret = toEnumDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.updateByName({}, {}): {}", name, enumDef, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasEnumDef updateByGuid(String guid, AtlasEnumDef enumDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasEnumDefStoreV1.updateByGuid({})", guid);
- }
-
- AtlasEnumDef existingDef = typeRegistry.getEnumDefByGuid(guid);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_UPDATE, existingDef), "update enum-def ", (existingDef != null ? existingDef.getName() : guid));
-
- validateType(enumDef);
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- typeDefStore.updateTypeVertex(enumDef, vertex);
-
- toVertex(enumDef, vertex);
-
- AtlasEnumDef ret = toEnumDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasEnumDefStoreV1.updateByGuid({}): {}", guid, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasVertex preDeleteByName(String name) throws AtlasBaseException {
- AtlasVertex vertex = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- AtlasEnumDef existingDef = typeRegistry.getEnumDefByName(name);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_DELETE, existingDef), "delete enum-def ", (existingDef != null ? existingDef.getName() : name));
-
- return vertex;
- }
-
- @Override
- public AtlasVertex preDeleteByGuid(String guid) throws AtlasBaseException {
- AtlasVertex vertex = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.ENUM);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- AtlasEnumDef existingDef = typeRegistry.getEnumDefByGuid(guid);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_DELETE, existingDef), "delete enum-def ", (existingDef != null ? existingDef.getName() : guid));
-
- return vertex;
- }
-
- private void toVertex(AtlasEnumDef enumDef, AtlasVertex vertex) throws AtlasBaseException {
- if (CollectionUtils.isEmpty(enumDef.getElementDefs())) {
- throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, enumDef.getName(), "values");
- }
-
- List<String> values = new ArrayList<>(enumDef.getElementDefs().size());
-
- for (AtlasEnumElementDef element : enumDef.getElementDefs()) {
- // Validate the enum element
- if (StringUtils.isEmpty(element.getValue()) || null == element.getOrdinal()) {
- throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, enumDef.getName(), "elementValue");
- }
-
- String elemKey = AtlasGraphUtilsV1.getTypeDefPropertyKey(enumDef, element.getValue());
-
- AtlasGraphUtilsV1.setProperty(vertex, elemKey, element.getOrdinal());
-
- if (StringUtils.isNotBlank(element.getDescription())) {
- String descKey = AtlasGraphUtilsV1.getTypeDefPropertyKey(elemKey, "description");
-
- AtlasGraphUtilsV1.setProperty(vertex, descKey, element.getDescription());
- }
-
- values.add(element.getValue());
- }
- AtlasGraphUtilsV1.setProperty(vertex, AtlasGraphUtilsV1.getTypeDefPropertyKey(enumDef), values);
- }
-
- private AtlasEnumDef toEnumDef(AtlasVertex vertex) {
- AtlasEnumDef ret = null;
-
- if (vertex != null && typeDefStore.isTypeVertex(vertex, TypeCategory.ENUM)) {
- ret = toEnumDef(vertex, new AtlasEnumDef(), typeDefStore);
- }
-
- return ret;
- }
-
- private static AtlasEnumDef toEnumDef(AtlasVertex vertex, AtlasEnumDef enumDef, AtlasTypeDefGraphStoreV1 typeDefStore) {
- AtlasEnumDef ret = enumDef != null ? enumDef : new AtlasEnumDef();
-
- typeDefStore.vertexToTypeDef(vertex, ret);
-
- List<AtlasEnumElementDef> elements = new ArrayList<>();
- List<String> elemValues = vertex.getProperty(AtlasGraphUtilsV1.getTypeDefPropertyKey(ret), List.class);
- for (String elemValue : elemValues) {
- String elemKey = AtlasGraphUtilsV1.getTypeDefPropertyKey(ret, elemValue);
- String descKey = AtlasGraphUtilsV1.getTypeDefPropertyKey(elemKey, "description");
-
- Integer ordinal = AtlasGraphUtilsV1.getProperty(vertex, elemKey, Integer.class);
- String desc = AtlasGraphUtilsV1.getProperty(vertex, descKey, String.class);
-
- elements.add(new AtlasEnumElementDef(elemValue, desc, ordinal));
- }
- ret.setElementDefs(elements);
-
- return ret;
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
deleted file mode 100644
index 3e6f819..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
+++ /dev/null
@@ -1,514 +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.repository.store.graph.v1;
-
-
-import org.apache.atlas.ApplicationProperties;
-import org.apache.atlas.AtlasErrorCode;
-import org.apache.atlas.SortOrder;
-import org.apache.atlas.discovery.SearchProcessor;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.TypeCategory;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graph.AtlasGraphProvider;
-import org.apache.atlas.repository.graph.GraphHelper;
-import org.apache.atlas.repository.graphdb.AtlasEdge;
-import org.apache.atlas.repository.graphdb.AtlasElement;
-import org.apache.atlas.repository.graphdb.AtlasGraphQuery;
-import org.apache.atlas.repository.graphdb.AtlasIndexQuery;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasStructType;
-import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
-import org.apache.atlas.type.AtlasType;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
-import static org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_PROPERTY;
-import static org.apache.atlas.repository.graphdb.AtlasGraphQuery.SortOrder.*;
-
-/**
- * Utility methods for Graph.
- */
-public class AtlasGraphUtilsV1 {
- private static final Logger LOG = LoggerFactory.getLogger(AtlasGraphUtilsV1.class);
-
- public static final String PROPERTY_PREFIX = Constants.INTERNAL_PROPERTY_KEY_PREFIX + "type.";
- public static final String SUPERTYPE_EDGE_LABEL = PROPERTY_PREFIX + ".supertype";
- public static final String ENTITYTYPE_EDGE_LABEL = PROPERTY_PREFIX + ".entitytype";
- public static final String RELATIONSHIPTYPE_EDGE_LABEL = PROPERTY_PREFIX + ".relationshipType";
- public static final String VERTEX_TYPE = "typeSystem";
-
- private static boolean USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES = false;
- private static String INDEX_SEARCH_PREFIX;
-
- static {
- try {
- Configuration conf = ApplicationProperties.get();
-
- USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES = conf.getBoolean("atlas.use.index.query.to.find.entity.by.unique.attributes", USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES);
- INDEX_SEARCH_PREFIX = conf.getString(INDEX_SEARCH_VERTEX_PREFIX_PROPERTY, INDEX_SEARCH_VERTEX_PREFIX_DEFAULT);
- } catch (Exception excp) {
- LOG.error("Error reading configuration", excp);
- } finally {
- LOG.info("atlas.use.index.query.to.find.entity.by.unique.attributes=" + USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES);
- }
- }
-
- public static String getTypeDefPropertyKey(AtlasBaseTypeDef typeDef) {
- return getTypeDefPropertyKey(typeDef.getName());
- }
-
- public static String getTypeDefPropertyKey(AtlasBaseTypeDef typeDef, String child) {
- return getTypeDefPropertyKey(typeDef.getName(), child);
- }
-
- public static String getTypeDefPropertyKey(String typeName) {
- return PROPERTY_PREFIX + typeName;
- }
-
- public static String getTypeDefPropertyKey(String typeName, String child) {
- return PROPERTY_PREFIX + typeName + "." + child;
- }
-
- public static String getIdFromVertex(AtlasVertex vertex) {
- return vertex.getProperty(Constants.GUID_PROPERTY_KEY, String.class);
- }
-
- public static String getIdFromEdge(AtlasEdge edge) {
- return edge.getProperty(Constants.GUID_PROPERTY_KEY, String.class);
- }
-
- public static String getTypeName(AtlasElement element) {
- return element.getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY, String.class);
- }
-
- public static String getEdgeLabel(String fromNode, String toNode) {
- return PROPERTY_PREFIX + "edge." + fromNode + "." + toNode;
- }
-
- public static String getEdgeLabel(String property) {
- return GraphHelper.EDGE_LABEL_PREFIX + property;
- }
-
- public static String getAttributeEdgeLabel(AtlasStructType fromType, String attributeName) throws AtlasBaseException {
- return getEdgeLabel(getQualifiedAttributePropertyKey(fromType, attributeName));
- }
-
- public static String getQualifiedAttributePropertyKey(AtlasStructType fromType, String attributeName) throws AtlasBaseException {
- switch (fromType.getTypeCategory()) {
- case ENTITY:
- case STRUCT:
- case CLASSIFICATION:
- return fromType.getQualifiedAttributeName(attributeName);
- default:
- throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_TYPE, fromType.getTypeCategory().name());
- }
- }
-
- public static boolean isEntityVertex(AtlasVertex vertex) {
- return StringUtils.isNotEmpty(getIdFromVertex(vertex)) && StringUtils.isNotEmpty(getTypeName(vertex));
- }
-
- public static boolean isReference(AtlasType type) {
- return isReference(type.getTypeCategory());
- }
-
- public static boolean isReference(TypeCategory typeCategory) {
- return typeCategory == TypeCategory.STRUCT ||
- typeCategory == TypeCategory.ENTITY ||
- typeCategory == TypeCategory.OBJECT_ID_TYPE;
- }
-
- public static String encodePropertyKey(String key) {
- String ret = AtlasStructType.AtlasAttribute.encodePropertyKey(key);
-
- return ret;
- }
-
- public static String decodePropertyKey(String key) {
- String ret = AtlasStructType.AtlasAttribute.decodePropertyKey(key);
-
- return ret;
- }
-
- /**
- * Adds an additional value to a multi-property.
- *
- * @param propertyName
- * @param value
- */
- public static AtlasVertex addProperty(AtlasVertex vertex, String propertyName, Object value) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> addProperty({}, {}, {})", toString(vertex), propertyName, value);
- }
- propertyName = encodePropertyKey(propertyName);
- vertex.addProperty(propertyName, value);
- return vertex;
- }
-
- public static <T extends AtlasElement> void setProperty(T element, String propertyName, Object value) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> setProperty({}, {}, {})", toString(element), propertyName, value);
- }
-
- propertyName = encodePropertyKey(propertyName);
-
- Object existingValue = element.getProperty(propertyName, Object.class);
-
- if (value == null || (value instanceof Collection && ((Collection)value).isEmpty())) {
- if (existingValue != null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Removing property {} from {}", propertyName, toString(element));
- }
-
- element.removeProperty(propertyName);
- }
- } else {
- if (!value.equals(existingValue)) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting property {} in {}", propertyName, toString(element));
- }
-
- if ( value instanceof Date) {
- Long encodedValue = ((Date) value).getTime();
- element.setProperty(propertyName, encodedValue);
- } else {
- element.setProperty(propertyName, value);
- }
- }
- }
- }
-
- public static <T extends AtlasElement, O> O getProperty(T element, String propertyName, Class<O> returnType) {
- Object property = element.getProperty(encodePropertyKey(propertyName), returnType);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("getProperty({}, {}) ==> {}", toString(element), propertyName, returnType.cast(property));
- }
-
- return returnType.cast(property);
- }
-
- public static AtlasVertex getVertexByUniqueAttributes(AtlasEntityType entityType, Map<String, Object> attrValues) throws AtlasBaseException {
- AtlasVertex vertex = findByUniqueAttributes(entityType, attrValues);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.INSTANCE_BY_UNIQUE_ATTRIBUTE_NOT_FOUND, entityType.getTypeName(),
- attrValues.toString());
- }
-
- return vertex;
- }
-
- public static String getGuidByUniqueAttributes(AtlasEntityType entityType, Map<String, Object> attrValues) throws AtlasBaseException {
- AtlasVertex vertexByUniqueAttributes = getVertexByUniqueAttributes(entityType, attrValues);
- return getIdFromVertex(vertexByUniqueAttributes);
- }
-
- public static AtlasVertex findByUniqueAttributes(AtlasEntityType entityType, Map<String, Object> attrValues) {
- AtlasVertex vertex = null;
-
- final Map<String, AtlasAttribute> uniqueAttributes = entityType.getUniqAttributes();
-
- if (MapUtils.isNotEmpty(uniqueAttributes) && MapUtils.isNotEmpty(attrValues)) {
- for (AtlasAttribute attribute : uniqueAttributes.values()) {
- Object attrValue = attrValues.get(attribute.getName());
-
- if (attrValue == null) {
- continue;
- }
-
- if (canUseIndexQuery(entityType, attribute.getName())) {
- vertex = AtlasGraphUtilsV1.getAtlasVertexFromIndexQuery(entityType, attribute, attrValue);
- } else {
- vertex = AtlasGraphUtilsV1.findByTypeAndPropertyName(entityType.getTypeName(), attribute.getVertexPropertyName(), attrValue);
-
- // if no instance of given typeName is found, try to find an instance of type's sub-type
- if (vertex == null && !entityType.getAllSubTypes().isEmpty()) {
- vertex = AtlasGraphUtilsV1.findBySuperTypeAndPropertyName(entityType.getTypeName(), attribute.getVertexPropertyName(), attrValue);
- }
- }
-
- if (vertex != null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("findByUniqueAttributes(type={}, attrName={}, attrValue={}: found vertex {}",
- entityType.getTypeName(), attribute.getName(), attrValue, vertex);
- }
-
- break;
- }
- }
- }
-
- return vertex;
- }
-
- public static AtlasVertex findByGuid(String guid) {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance().query()
- .has(Constants.GUID_PROPERTY_KEY, guid);
-
- Iterator<AtlasVertex> results = query.vertices().iterator();
-
- AtlasVertex vertex = results.hasNext() ? results.next() : null;
-
- return vertex;
- }
-
- public static String getTypeNameFromGuid(String guid) {
- String ret = null;
-
- if (StringUtils.isNotEmpty(guid)) {
- AtlasVertex vertex = AtlasGraphUtilsV1.findByGuid(guid);
-
- ret = (vertex != null) ? AtlasGraphUtilsV1.getTypeName(vertex) : null;
- }
-
- return ret;
- }
-
- public static boolean typeHasInstanceVertex(String typeName) throws AtlasBaseException {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance()
- .query()
- .has(Constants.TYPE_NAME_PROPERTY_KEY, AtlasGraphQuery.ComparisionOperator.EQUAL, typeName);
-
- Iterator<AtlasVertex> results = query.vertices().iterator();
-
- boolean hasInstanceVertex = results != null && results.hasNext();
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("typeName {} has instance vertex {}", typeName, hasInstanceVertex);
- }
-
- return hasInstanceVertex;
- }
-
- public static AtlasVertex findByTypeAndPropertyName(String typeName, String propertyName, Object attrVal) {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance().query()
- .has(Constants.ENTITY_TYPE_PROPERTY_KEY, typeName)
- .has(Constants.STATE_PROPERTY_KEY, AtlasEntity.Status.ACTIVE.name())
- .has(propertyName, attrVal);
-
- Iterator<AtlasVertex> results = query.vertices().iterator();
-
- AtlasVertex vertex = results.hasNext() ? results.next() : null;
-
- return vertex;
- }
-
- public static AtlasVertex findBySuperTypeAndPropertyName(String typeName, String propertyName, Object attrVal) {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance().query()
- .has(Constants.SUPER_TYPES_PROPERTY_KEY, typeName)
- .has(Constants.STATE_PROPERTY_KEY, AtlasEntity.Status.ACTIVE.name())
- .has(propertyName, attrVal);
-
- Iterator<AtlasVertex> results = query.vertices().iterator();
-
- AtlasVertex vertex = results.hasNext() ? results.next() : null;
-
- return vertex;
- }
-
- public static List<String> findEntityGUIDsByType(String typename, SortOrder sortOrder) {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance().query()
- .has(Constants.ENTITY_TYPE_PROPERTY_KEY, typename);
- if (sortOrder != null) {
- AtlasGraphQuery.SortOrder qrySortOrder = sortOrder == SortOrder.ASCENDING ? ASC : DESC;
- query.orderBy(Constants.QUALIFIED_NAME, qrySortOrder);
- }
-
- Iterator<AtlasVertex> results = query.vertices().iterator();
- ArrayList<String> ret = new ArrayList<>();
-
- if (!results.hasNext()) {
- return Collections.emptyList();
- }
-
- while (results.hasNext()) {
- ret.add(getIdFromVertex(results.next()));
- }
-
- return ret;
- }
-
- public static List<String> findEntityGUIDsByType(String typename) {
- return findEntityGUIDsByType(typename, null);
- }
-
- public static boolean relationshipTypeHasInstanceEdges(String typeName) throws AtlasBaseException {
- AtlasGraphQuery query = AtlasGraphProvider.getGraphInstance()
- .query()
- .has(Constants.TYPE_NAME_PROPERTY_KEY, AtlasGraphQuery.ComparisionOperator.EQUAL, typeName);
-
- Iterator<AtlasEdge> results = query.edges().iterator();
-
- boolean hasInstanceEdges = results != null && results.hasNext();
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("relationshipType {} has instance edges {}", typeName, hasInstanceEdges);
- }
-
- return hasInstanceEdges;
- }
-
- private static String toString(AtlasElement element) {
- if (element instanceof AtlasVertex) {
- return toString((AtlasVertex) element);
- } else if (element instanceof AtlasEdge) {
- return toString((AtlasEdge)element);
- }
-
- return element.toString();
- }
-
- public static String toString(AtlasVertex vertex) {
- if(vertex == null) {
- return "vertex[null]";
- } else {
- if (LOG.isDebugEnabled()) {
- return getVertexDetails(vertex);
- } else {
- return String.format("vertex[id=%s]", vertex.getId().toString());
- }
- }
- }
-
-
- public static String toString(AtlasEdge edge) {
- if(edge == null) {
- return "edge[null]";
- } else {
- if (LOG.isDebugEnabled()) {
- return getEdgeDetails(edge);
- } else {
- return String.format("edge[id=%s]", edge.getId().toString());
- }
- }
- }
-
- public static String getVertexDetails(AtlasVertex vertex) {
- return String.format("vertex[id=%s type=%s guid=%s]",
- vertex.getId().toString(), getTypeName(vertex), getIdFromVertex(vertex));
- }
-
- public static String getEdgeDetails(AtlasEdge edge) {
- return String.format("edge[id=%s label=%s from %s -> to %s]", edge.getId(), edge.getLabel(),
- toString(edge.getOutVertex()), toString(edge.getInVertex()));
- }
-
- public static AtlasEntity.Status getState(AtlasElement element) {
- String state = getStateAsString(element);
- return state == null ? null : AtlasEntity.Status.valueOf(state);
- }
-
- public static String getStateAsString(AtlasElement element) {
- return element.getProperty(Constants.STATE_PROPERTY_KEY, String.class);
- }
-
- private static boolean canUseIndexQuery(AtlasEntityType entityType, String attributeName) {
- boolean ret = false;
-
- if (USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES) {
- final String typeAndSubTypesQryStr = entityType.getTypeAndAllSubTypesQryStr();
-
- ret = typeAndSubTypesQryStr.length() <= SearchProcessor.MAX_QUERY_STR_LENGTH_TYPES;
-
- if (ret) {
- Set<String> indexSet = AtlasGraphProvider.getGraphInstance().getVertexIndexKeys();
- try {
- ret = indexSet.contains(entityType.getQualifiedAttributeName(attributeName));
- }
- catch (AtlasBaseException ex) {
- ret = false;
- }
- }
- }
-
- return ret;
- }
-
- private static AtlasVertex getAtlasVertexFromIndexQuery(AtlasEntityType entityType, AtlasAttribute attribute, Object attrVal) {
- String propertyName = attribute.getVertexPropertyName();
- AtlasIndexQuery query = getIndexQuery(entityType, propertyName, attrVal.toString());
-
- for (Iterator<AtlasIndexQuery.Result> iter = query.vertices(); iter.hasNext(); ) {
- AtlasIndexQuery.Result result = iter.next();
- AtlasVertex vertex = result.getVertex();
-
- // skip non-entity vertices, if any got returned
- if (vertex == null || !vertex.getPropertyKeys().contains(Constants.GUID_PROPERTY_KEY)) {
- continue;
- }
-
- // verify the typeName
- String typeNameInVertex = getTypeName(vertex);
-
- if (!entityType.getTypeAndAllSubTypes().contains(typeNameInVertex)) {
- LOG.warn("incorrect vertex type from index-query: expected='{}'; found='{}'", entityType.getTypeName(), typeNameInVertex);
-
- continue;
- }
-
- if (attrVal.getClass() == String.class) {
- String s = (String) attrVal;
- String vertexVal = vertex.getProperty(propertyName, String.class);
-
- if (!s.equalsIgnoreCase(vertexVal)) {
- LOG.warn("incorrect match from index-query for property {}: expected='{}'; found='{}'", propertyName, s, vertexVal);
-
- continue;
- }
- }
-
- return vertex;
- }
-
- return null;
- }
-
- private static AtlasIndexQuery getIndexQuery(AtlasEntityType entityType, String propertyName, String value) {
- StringBuilder sb = new StringBuilder();
-
- sb.append(INDEX_SEARCH_PREFIX + "\"").append(Constants.TYPE_NAME_PROPERTY_KEY).append("\":").append(entityType.getTypeAndAllSubTypesQryStr())
- .append(" AND ")
- .append(INDEX_SEARCH_PREFIX + "\"").append(propertyName).append("\":").append(AtlasAttribute.escapeIndexQueryValue(value))
- .append(" AND ")
- .append(INDEX_SEARCH_PREFIX + "\"").append(Constants.STATE_PROPERTY_KEY).append("\":ACTIVE");
-
- return AtlasGraphProvider.getGraphInstance().indexQuery(Constants.VERTEX_INDEX, sb.toString());
- }
-
- public static String getIndexSearchPrefix() {
- return INDEX_SEARCH_PREFIX;
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java
deleted file mode 100644
index e287c0d..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java
+++ /dev/null
@@ -1,508 +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.repository.store.graph.v1;
-
-import org.apache.atlas.ApplicationProperties;
-import org.apache.atlas.AtlasErrorCode;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.typedef.AtlasRelationshipDef;
-import org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory;
-import org.apache.atlas.model.typedef.AtlasRelationshipDef.PropagateTags;
-import org.apache.atlas.model.typedef.AtlasRelationshipEndDef;
-import org.apache.atlas.query.AtlasDSL;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graphdb.AtlasEdge;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.type.AtlasRelationshipType;
-import org.apache.atlas.type.AtlasType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.typesystem.types.DataTypes.TypeCategory;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.atlas.authorize.AtlasPrivilege;
-import org.apache.atlas.authorize.AtlasTypeAccessRequest;
-import org.apache.atlas.authorize.AtlasAuthorizationUtils;
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * RelationshipDef store in v1 format.
- */
-public class AtlasRelationshipDefStoreV1 extends AtlasAbstractDefStoreV1<AtlasRelationshipDef> {
- private static final Logger LOG = LoggerFactory.getLogger(AtlasRelationshipDefStoreV1.class);
-
- @Inject
- public AtlasRelationshipDefStoreV1(AtlasTypeDefGraphStoreV1 typeDefStore, AtlasTypeRegistry typeRegistry) {
- super(typeDefStore, typeRegistry);
- }
-
- @Override
- public AtlasVertex preCreate(AtlasRelationshipDef relationshipDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.preCreate({})", relationshipDef);
- }
-
- validateType(relationshipDef);
-
- AtlasType type = typeRegistry.getType(relationshipDef.getName());
-
- if (type.getTypeCategory() != org.apache.atlas.model.TypeCategory.RELATIONSHIP) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_MATCH_FAILED, relationshipDef.getName(), TypeCategory.RELATIONSHIP.name());
- }
-
- AtlasVertex relationshipDefVertex = typeDefStore.findTypeVertexByName(relationshipDef.getName());
-
- if (relationshipDefVertex != null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_ALREADY_EXISTS, relationshipDef.getName());
- }
-
- relationshipDefVertex = typeDefStore.createTypeVertex(relationshipDef);
-
- updateVertexPreCreate(relationshipDef, (AtlasRelationshipType) type, relationshipDefVertex);
-
- final AtlasRelationshipEndDef endDef1 = relationshipDef.getEndDef1();
- final AtlasRelationshipEndDef endDef2 = relationshipDef.getEndDef2();
- final String type1 = endDef1.getType();
- final String type2 = endDef2.getType();
- final String name1 = endDef1.getName();
- final String name2 = endDef2.getName();
- final AtlasVertex end1TypeVertex = typeDefStore.findTypeVertexByName(type1);
- final AtlasVertex end2TypeVertex = typeDefStore.findTypeVertexByName(type2);
-
- if (end1TypeVertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END_TYPE_NAME_NOT_FOUND, relationshipDef.getName(), type1);
- }
-
- if (end2TypeVertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END_TYPE_NAME_NOT_FOUND, relationshipDef.getName(), type2);
- }
-
- // create an edge between the relationshipDef and each of the entityDef vertices.
- AtlasEdge edge1 = typeDefStore.getOrCreateEdge(relationshipDefVertex, end1TypeVertex, AtlasGraphUtilsV1.RELATIONSHIPTYPE_EDGE_LABEL);
-
- /*
- Where edge1 and edge2 have the same names and types we do not need a second edge.
- We are not invoking the equals method on the AtlasRelationshipedDef, as we only want 1 edge even if propagateTags or other properties are different.
- */
-
- if (type1.equals(type2) && name1.equals(name2)) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("AtlasRelationshipDefStoreV1.preCreate({}): created relationshipDef vertex {}," +
- " and one edge as {}, because end1 and end2 have the same type and name", relationshipDef, relationshipDefVertex, edge1);
- }
-
- } else {
- AtlasEdge edge2 = typeDefStore.getOrCreateEdge(relationshipDefVertex, end2TypeVertex, AtlasGraphUtilsV1.RELATIONSHIPTYPE_EDGE_LABEL);
- if (LOG.isDebugEnabled()) {
- LOG.debug("AtlasRelationshipDefStoreV1.preCreate({}): created relationshipDef vertex {}," +
- " edge1 as {}, edge2 as {} ", relationshipDef, relationshipDefVertex, edge1, edge2);
- }
-
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.preCreate({}): {}", relationshipDef, relationshipDefVertex);
- }
- return relationshipDefVertex;
- }
-
- @Override
- public AtlasRelationshipDef create(AtlasRelationshipDef relationshipDef, AtlasVertex preCreateResult)
- throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.create({}, {})", relationshipDef, preCreateResult);
- }
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_CREATE, relationshipDef), "create relationship-def ", relationshipDef.getName());
-
- AtlasVertex vertex = (preCreateResult == null) ? preCreate(relationshipDef) : preCreateResult;
-
- AtlasRelationshipDef ret = toRelationshipDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.create({}, {}): {}", relationshipDef, preCreateResult, ret);
- }
-
- return ret;
- }
-
- @Override
- public List<AtlasRelationshipDef> getAll() throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.getAll()");
- }
-
- List<AtlasRelationshipDef> ret = new ArrayList<>();
- Iterator<AtlasVertex> vertices = typeDefStore.findTypeVerticesByCategory(TypeCategory.RELATIONSHIP);
-
- while (vertices.hasNext()) {
- ret.add(toRelationshipDef(vertices.next()));
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.getAll(): count={}", ret.size());
- }
-
- return ret;
- }
-
- @Override
- public AtlasRelationshipDef getByName(String name) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.getByName({})", name);
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.RELATIONSHIP);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- vertex.getProperty(Constants.TYPE_CATEGORY_PROPERTY_KEY, TypeCategory.class);
-
- AtlasRelationshipDef ret = toRelationshipDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.getByName({}): {}", name, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasRelationshipDef getByGuid(String guid) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.getByGuid({})", guid);
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.RELATIONSHIP);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- AtlasRelationshipDef ret = toRelationshipDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.getByGuid({}): {}", guid, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasRelationshipDef update(AtlasRelationshipDef relationshipDef) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.update({})", relationshipDef);
- }
-
- validateType(relationshipDef);
-
- AtlasRelationshipDef ret = StringUtils.isNotBlank(relationshipDef.getGuid())
- ? updateByGuid(relationshipDef.getGuid(), relationshipDef)
- : updateByName(relationshipDef.getName(), relationshipDef);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.update({}): {}", relationshipDef, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasRelationshipDef updateByName(String name, AtlasRelationshipDef relationshipDef)
- throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.updateByName({}, {})", name, relationshipDef);
- }
-
- AtlasRelationshipDef existingDef = typeRegistry.getRelationshipDefByName(name);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_UPDATE, existingDef), "update relationship-def ", name);
-
- validateType(relationshipDef);
-
- AtlasType type = typeRegistry.getType(relationshipDef.getName());
-
- if (type.getTypeCategory() != org.apache.atlas.model.TypeCategory.RELATIONSHIP) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_MATCH_FAILED, relationshipDef.getName(), TypeCategory.RELATIONSHIP.name());
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.RELATIONSHIP);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- preUpdateCheck(relationshipDef, (AtlasRelationshipType) type, vertex);
-
- AtlasRelationshipDef ret = toRelationshipDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.updateByName({}, {}): {}", name, relationshipDef, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasRelationshipDef updateByGuid(String guid, AtlasRelationshipDef relationshipDef)
- throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.updateByGuid({})", guid);
- }
-
- AtlasRelationshipDef existingDef = typeRegistry.getRelationshipDefByGuid(guid);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_UPDATE, existingDef), "update relationship-Def ", (existingDef != null ? existingDef.getName() : guid));
-
- validateType(relationshipDef);
-
- AtlasType type = typeRegistry.getTypeByGuid(guid);
-
- if (type.getTypeCategory() != org.apache.atlas.model.TypeCategory.RELATIONSHIP) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_MATCH_FAILED, relationshipDef.getName(), TypeCategory.RELATIONSHIP.name());
- }
-
- AtlasVertex vertex = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.RELATIONSHIP);
-
- if (vertex == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- preUpdateCheck(relationshipDef, (AtlasRelationshipType) type, vertex);
- // updates should not effect the edges between the types as we do not allow updates that change the endpoints.
-
- AtlasRelationshipDef ret = toRelationshipDef(vertex);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.updateByGuid({}): {}", guid, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasVertex preDeleteByName(String name) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.preDeleteByName({})", name);
- }
-
- AtlasRelationshipDef existingDef = typeRegistry.getRelationshipDefByName(name);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_DELETE, existingDef), "delete relationship-def ", name);
-
- AtlasVertex ret = typeDefStore.findTypeVertexByNameAndCategory(name, TypeCategory.RELATIONSHIP);
-
- if (ret == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, name);
- }
-
- if (AtlasGraphUtilsV1.relationshipTypeHasInstanceEdges(name)) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_HAS_REFERENCES, name);
- }
-
- typeDefStore.deleteTypeVertexOutEdges(ret);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.preDeleteByName({}): {}", name, ret);
- }
-
- return ret;
- }
-
- @Override
- public AtlasVertex preDeleteByGuid(String guid) throws AtlasBaseException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> AtlasRelationshipDefStoreV1.preDeleteByGuid({})", guid);
- }
-
- AtlasRelationshipDef existingDef = typeRegistry.getRelationshipDefByGuid(guid);
-
- AtlasAuthorizationUtils.verifyAccess(new AtlasTypeAccessRequest(AtlasPrivilege.TYPE_DELETE, existingDef), "delete relationship-def ", (existingDef != null ? existingDef.getName() : guid));
-
- AtlasVertex ret = typeDefStore.findTypeVertexByGuidAndCategory(guid, TypeCategory.RELATIONSHIP);
-
- if (ret == null) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_GUID_NOT_FOUND, guid);
- }
-
- String typeName = AtlasGraphUtilsV1.getProperty(ret, Constants.TYPENAME_PROPERTY_KEY, String.class);
-
- if (AtlasGraphUtilsV1.relationshipTypeHasInstanceEdges(typeName)) {
- throw new AtlasBaseException(AtlasErrorCode.TYPE_HAS_REFERENCES, typeName);
- }
-
- typeDefStore.deleteTypeVertexOutEdges(ret);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== AtlasRelationshipDefStoreV1.preDeleteByGuid({}): {}", guid, ret);
- }
-
- return ret;
- }
-
- private void updateVertexPreCreate(AtlasRelationshipDef relationshipDef, AtlasRelationshipType relationshipType,
- AtlasVertex vertex) throws AtlasBaseException {
- AtlasRelationshipEndDef end1 = relationshipDef.getEndDef1();
- AtlasRelationshipEndDef end2 = relationshipDef.getEndDef2();
-
- // check whether the names added on the relationship Ends are reserved if required.
- final boolean allowReservedKeywords;
- try {
- allowReservedKeywords = ApplicationProperties.get().getBoolean(ALLOW_RESERVED_KEYWORDS, true);
- } catch (AtlasException e) {
- throw new AtlasBaseException(e);
- }
-
- if (!allowReservedKeywords) {
- if (AtlasDSL.Parser.isKeyword(end1.getName())) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END1_NAME_INVALID, end1.getName());
- }
-
- if (AtlasDSL.Parser.isKeyword(end2.getName())) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END2_NAME_INVALID, end2.getName());
- }
- }
-
- AtlasStructDefStoreV1.updateVertexPreCreate(relationshipDef, relationshipType, vertex, typeDefStore);
- // Update ends
- setVertexPropertiesFromRelationshipDef(relationshipDef, vertex);
- }
-
- private void preUpdateCheck(AtlasRelationshipDef newRelationshipDef, AtlasRelationshipType relationshipType,
- AtlasVertex vertex) throws AtlasBaseException {
- // We will not support an update to endpoints or category key
- AtlasRelationshipDef existingRelationshipDef = toRelationshipDef(vertex);
-
- preUpdateCheck(newRelationshipDef, existingRelationshipDef);
- // we do allow change to tag propagation and the addition of new attributes.
-
- AtlasStructDefStoreV1.updateVertexPreUpdate(newRelationshipDef, relationshipType, vertex, typeDefStore);
-
- setVertexPropertiesFromRelationshipDef(newRelationshipDef, vertex);
- }
-
- /**
- * Check ends are the same and relationshipCategory is the same.
- *
- * We do this by comparing 2 relationshipDefs to avoid exposing the AtlasVertex to unit testing.
- *
- * @param newRelationshipDef
- * @param existingRelationshipDef
- * @throws AtlasBaseException
- */
- public static void preUpdateCheck(AtlasRelationshipDef newRelationshipDef, AtlasRelationshipDef existingRelationshipDef) throws AtlasBaseException {
- // do not allow renames of the Def.
- String existingName = existingRelationshipDef.getName();
- String newName = newRelationshipDef.getName();
-
- if (!existingName.equals(newName)) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID_NAME_UPDATE,
- newRelationshipDef.getGuid(),existingName, newName);
- }
-
- RelationshipCategory existingRelationshipCategory = existingRelationshipDef.getRelationshipCategory();
- RelationshipCategory newRelationshipCategory = newRelationshipDef.getRelationshipCategory();
-
- if ( !existingRelationshipCategory.equals(newRelationshipCategory)){
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID_CATEGORY_UPDATE,
- newRelationshipDef.getName(),newRelationshipCategory.name(),
- existingRelationshipCategory.name() );
- }
-
- AtlasRelationshipEndDef existingEnd1 = existingRelationshipDef.getEndDef1();
- AtlasRelationshipEndDef newEnd1 = newRelationshipDef.getEndDef1();
-
- if ( !newEnd1.equals(existingEnd1) ) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID_END1_UPDATE,
- newRelationshipDef.getName(), newEnd1.toString(), existingEnd1.toString());
- }
-
- AtlasRelationshipEndDef existingEnd2 = existingRelationshipDef.getEndDef2();
- AtlasRelationshipEndDef newEnd2 = newRelationshipDef.getEndDef2();
-
- if ( !newEnd2.equals(existingEnd2) ) {
- throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID_END2_UPDATE,
- newRelationshipDef.getName(), newEnd2.toString(), existingEnd2.toString());
- }
- }
-
- public static void setVertexPropertiesFromRelationshipDef(AtlasRelationshipDef relationshipDef, AtlasVertex vertex) {
- vertex.setProperty(Constants.RELATIONSHIPTYPE_END1_KEY, AtlasType.toJson(relationshipDef.getEndDef1()));
- vertex.setProperty(Constants.RELATIONSHIPTYPE_END2_KEY, AtlasType.toJson(relationshipDef.getEndDef2()));
- // default the relationship category to association if it has not been specified.
- String relationshipCategory = RelationshipCategory.ASSOCIATION.name();
- if (relationshipDef.getRelationshipCategory()!=null) {
- relationshipCategory =relationshipDef.getRelationshipCategory().name();
- }
- // Update RelationshipCategory
- vertex.setProperty(Constants.RELATIONSHIPTYPE_CATEGORY_KEY, relationshipCategory);
-
- if (relationshipDef.getPropagateTags() == null) {
- vertex.setProperty(Constants.RELATIONSHIPTYPE_TAG_PROPAGATION_KEY, AtlasRelationshipDef.PropagateTags.NONE.name());
- } else {
- vertex.setProperty(Constants.RELATIONSHIPTYPE_TAG_PROPAGATION_KEY, relationshipDef.getPropagateTags().name());
- }
- }
-
- private AtlasRelationshipDef toRelationshipDef(AtlasVertex vertex) throws AtlasBaseException {
- AtlasRelationshipDef ret = null;
-
- if (vertex != null && typeDefStore.isTypeVertex(vertex, TypeCategory.RELATIONSHIP)) {
- String name = vertex.getProperty(Constants.TYPENAME_PROPERTY_KEY, String.class);
- String description = vertex.getProperty(Constants.TYPEDESCRIPTION_PROPERTY_KEY, String.class);
- String version = vertex.getProperty(Constants.TYPEVERSION_PROPERTY_KEY, String.class);
- String end1Str = vertex.getProperty(Constants.RELATIONSHIPTYPE_END1_KEY, String.class);
- String end2Str = vertex.getProperty(Constants.RELATIONSHIPTYPE_END2_KEY, String.class);
- String relationStr = vertex.getProperty(Constants.RELATIONSHIPTYPE_CATEGORY_KEY, String.class);
- String propagateStr = vertex.getProperty(Constants.RELATIONSHIPTYPE_TAG_PROPAGATION_KEY, String.class);
-
- // set the ends
- AtlasRelationshipEndDef endDef1 = AtlasType.fromJson(end1Str, AtlasRelationshipEndDef.class);
- AtlasRelationshipEndDef endDef2 = AtlasType.fromJson(end2Str, AtlasRelationshipEndDef.class);
-
- // set the relationship Category
- RelationshipCategory relationshipCategory = null;
- for (RelationshipCategory value : RelationshipCategory.values()) {
- if (value.name().equals(relationStr)) {
- relationshipCategory = value;
- }
- }
-
- // set the propagateTags
- PropagateTags propagateTags = null;
- for (PropagateTags value : PropagateTags.values()) {
- if (value.name().equals(propagateStr)) {
- propagateTags = value;
- }
- }
-
- ret = new AtlasRelationshipDef(name, description, version, relationshipCategory, propagateTags, endDef1, endDef2);
-
- // add in the attributes
- AtlasStructDefStoreV1.toStructDef(vertex, ret, typeDefStore);
- }
-
- return ret;
- }
-
-}