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:52 UTC

[14/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/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
deleted file mode 100644
index 0f9f877..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
+++ /dev/null
@@ -1,1104 +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 com.fasterxml.jackson.core.type.TypeReference;
-import org.apache.atlas.AtlasErrorCode;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.TimeBoundary;
-import org.apache.atlas.model.glossary.enums.AtlasTermAssignmentStatus;
-import org.apache.atlas.model.glossary.relations.AtlasTermAssignmentHeader;
-import org.apache.atlas.model.instance.AtlasClassification;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityExtInfo;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.model.instance.AtlasRelatedObjectId;
-import org.apache.atlas.model.instance.AtlasRelationship;
-import org.apache.atlas.model.instance.AtlasRelationship.AtlasRelationshipWithExtInfo;
-import org.apache.atlas.model.instance.AtlasStruct;
-import org.apache.atlas.model.typedef.AtlasRelationshipDef;
-import org.apache.atlas.model.typedef.AtlasRelationshipEndDef;
-import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graph.GraphHelper;
-import org.apache.atlas.repository.graphdb.AtlasEdge;
-import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
-import org.apache.atlas.repository.graphdb.AtlasElement;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.type.AtlasArrayType;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasMapType;
-import org.apache.atlas.type.AtlasRelationshipType;
-import org.apache.atlas.type.AtlasStructType;
-import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
-import org.apache.atlas.type.AtlasType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.type.AtlasTypeUtil;
-import org.apache.atlas.utils.AtlasJson;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_CONFIDENCE;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_CREATED_BY;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_DESCRIPTION;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_EXPRESSION;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_SOURCE;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_STATUS;
-import static org.apache.atlas.glossary.GlossaryUtils.TERM_ASSIGNMENT_ATTR_STEWARD;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_BIGDECIMAL;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_BIGINTEGER;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_BOOLEAN;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_BYTE;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_DATE;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_DOUBLE;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_FLOAT;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_INT;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_LONG;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_SHORT;
-import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_STRING;
-import static org.apache.atlas.repository.Constants.CLASSIFICATION_ENTITY_GUID;
-import static org.apache.atlas.repository.Constants.CLASSIFICATION_LABEL;
-import static org.apache.atlas.repository.Constants.CLASSIFICATION_VALIDITY_PERIODS_KEY;
-import static org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL;
-import static org.apache.atlas.repository.graph.GraphHelper.EDGE_LABEL_PREFIX;
-import static org.apache.atlas.repository.graph.GraphHelper.getAdjacentEdgesByLabel;
-import static org.apache.atlas.repository.graph.GraphHelper.getAllClassificationEdges;
-import static org.apache.atlas.repository.graph.GraphHelper.getAllTraitNames;
-import static org.apache.atlas.repository.graph.GraphHelper.getBlockedClassificationIds;
-import static org.apache.atlas.repository.graph.GraphHelper.getArrayElementsProperty;
-import static org.apache.atlas.repository.graph.GraphHelper.getClassificationVertices;
-import static org.apache.atlas.repository.graph.GraphHelper.getGuid;
-import static org.apache.atlas.repository.graph.GraphHelper.getIncomingEdgesByLabel;
-import static org.apache.atlas.repository.graph.GraphHelper.getPrimitiveMap;
-import static org.apache.atlas.repository.graph.GraphHelper.getReferenceMap;
-import static org.apache.atlas.repository.graph.GraphHelper.getOutGoingEdgesByLabel;
-import static org.apache.atlas.repository.graph.GraphHelper.getPropagateTags;
-import static org.apache.atlas.repository.graph.GraphHelper.getRelationshipGuid;
-import static org.apache.atlas.repository.graph.GraphHelper.getTypeName;
-import static org.apache.atlas.repository.graph.GraphHelper.isPropagationEnabled;
-import static org.apache.atlas.repository.store.graph.v1.AtlasGraphUtilsV1.getIdFromVertex;
-import static org.apache.atlas.repository.store.graph.v1.AtlasGraphUtilsV1.isReference;
-import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection;
-import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection.BOTH;
-import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection.IN;
-import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection.OUT;
-
-
-public final class EntityGraphRetriever {
-    private static final Logger LOG = LoggerFactory.getLogger(EntityGraphRetriever.class);
-
-    private static final String TERM_RELATION_NAME = "AtlasGlossarySemanticAssignment";
-    private static final String GLOSSARY_TERM_DISPLAY_NAME_ATTR = "AtlasGlossaryTerm.displayName";
-
-    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();
-
-    private final AtlasTypeRegistry typeRegistry;
-
-    public EntityGraphRetriever(AtlasTypeRegistry typeRegistry) {
-        this.typeRegistry = typeRegistry;
-    }
-
-    public AtlasEntity toAtlasEntity(String guid) throws AtlasBaseException {
-        return toAtlasEntity(getEntityVertex(guid));
-    }
-
-    public AtlasEntity toAtlasEntity(AtlasObjectId objId) throws AtlasBaseException {
-        return toAtlasEntity(getEntityVertex(objId));
-    }
-
-    public AtlasEntity toAtlasEntity(AtlasVertex entityVertex) throws AtlasBaseException {
-        return mapVertexToAtlasEntity(entityVertex, null);
-    }
-
-    public AtlasEntityWithExtInfo toAtlasEntityWithExtInfo(String guid) throws AtlasBaseException {
-        return toAtlasEntityWithExtInfo(getEntityVertex(guid));
-    }
-
-    public AtlasEntityWithExtInfo toAtlasEntityWithExtInfo(AtlasObjectId objId) throws AtlasBaseException {
-        return toAtlasEntityWithExtInfo(getEntityVertex(objId));
-    }
-
-    public AtlasEntityWithExtInfo toAtlasEntityWithExtInfo(AtlasVertex entityVertex) throws AtlasBaseException {
-        AtlasEntityExtInfo     entityExtInfo = new AtlasEntityExtInfo();
-        AtlasEntity            entity        = mapVertexToAtlasEntity(entityVertex, entityExtInfo);
-        AtlasEntityWithExtInfo ret           = new AtlasEntityWithExtInfo(entity, entityExtInfo);
-
-        ret.compact();
-
-        return ret;
-    }
-
-    public AtlasEntitiesWithExtInfo toAtlasEntitiesWithExtInfo(List<String> guids) throws AtlasBaseException {
-        AtlasEntitiesWithExtInfo ret = new AtlasEntitiesWithExtInfo();
-
-        for (String guid : guids) {
-            AtlasVertex vertex = getEntityVertex(guid);
-
-            AtlasEntity entity = mapVertexToAtlasEntity(vertex, ret);
-
-            ret.addEntity(entity);
-        }
-
-        ret.compact();
-
-        return ret;
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeader(String guid) throws AtlasBaseException {
-        return toAtlasEntityHeader(getEntityVertex(guid));
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeader(AtlasVertex entityVertex) throws AtlasBaseException {
-        return toAtlasEntityHeader(entityVertex, Collections.<String>emptySet());
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeader(AtlasVertex atlasVertex, Set<String> attributes) throws AtlasBaseException {
-        return atlasVertex != null ? mapVertexToAtlasEntityHeader(atlasVertex, attributes) : null;
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeaderWithClassifications(String guid) throws AtlasBaseException {
-        return toAtlasEntityHeaderWithClassifications(getEntityVertex(guid), Collections.emptySet());
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeaderWithClassifications(AtlasVertex entityVertex) throws AtlasBaseException {
-        return toAtlasEntityHeaderWithClassifications(entityVertex, Collections.emptySet());
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeaderWithClassifications(AtlasVertex entityVertex, Set<String> attributes) throws AtlasBaseException {
-        AtlasEntityHeader ret = toAtlasEntityHeader(entityVertex, attributes);
-
-        ret.setClassifications(getAllClassifications(entityVertex));
-
-        return ret;
-    }
-
-    public AtlasEntityHeader toAtlasEntityHeader(AtlasEntity entity) {
-        AtlasEntityHeader ret        = null;
-        String            typeName   = entity.getTypeName();
-        AtlasEntityType   entityType = typeRegistry.getEntityTypeByName(typeName);
-
-        if (entityType != null) {
-            Map<String, Object> uniqueAttributes = new HashMap<>();
-
-            for (AtlasAttribute attribute : entityType.getUniqAttributes().values()) {
-                Object attrValue = entity.getAttribute(attribute.getName());
-
-                if (attrValue != null) {
-                    uniqueAttributes.put(attribute.getName(), attrValue);
-                }
-            }
-
-            ret = new AtlasEntityHeader(entity.getTypeName(), entity.getGuid(), uniqueAttributes);
-
-            if (CollectionUtils.isNotEmpty(entity.getClassifications())) {
-                List<AtlasClassification> classifications     = new ArrayList<>(entity.getClassifications().size());
-                List<String>              classificationNames = new ArrayList<>(entity.getClassifications().size());
-
-                for (AtlasClassification classification : entity.getClassifications()) {
-                    classifications.add(classification);
-                    classificationNames.add(classification.getTypeName());
-                }
-
-                ret.setClassifications(classifications);
-                ret.setClassificationNames(classificationNames);
-            }
-
-            if (CollectionUtils.isNotEmpty(entity.getMeanings())) {
-                ret.setMeanings(entity.getMeanings());
-                ret.setMeaningNames(entity.getMeanings().stream().map(AtlasTermAssignmentHeader::getDisplayText).collect(Collectors.toList()));
-            }
-        }
-
-        return ret;
-    }
-
-    public AtlasObjectId toAtlasObjectId(AtlasVertex entityVertex) throws AtlasBaseException {
-        AtlasObjectId   ret        = null;
-        String          typeName   = entityVertex.getProperty(Constants.TYPE_NAME_PROPERTY_KEY, String.class);
-        AtlasEntityType entityType = typeRegistry.getEntityTypeByName(typeName);
-
-        if (entityType != null) {
-            Map<String, Object> uniqueAttributes = new HashMap<>();
-
-            for (AtlasAttribute attribute : entityType.getUniqAttributes().values()) {
-                Object attrValue = getVertexAttribute(entityVertex, attribute);
-
-                if (attrValue != null) {
-                    uniqueAttributes.put(attribute.getName(), attrValue);
-                }
-            }
-
-            ret = new AtlasObjectId(entityVertex.getProperty(Constants.GUID_PROPERTY_KEY, String.class), typeName, uniqueAttributes);
-        }
-
-        return ret;
-    }
-
-    public AtlasClassification toAtlasClassification(AtlasVertex classificationVertex) throws AtlasBaseException {
-        AtlasClassification ret = new AtlasClassification(getTypeName(classificationVertex));
-
-        ret.setEntityGuid(AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_ENTITY_GUID, String.class));
-        ret.setPropagate(isPropagationEnabled(classificationVertex));
-
-        String strValidityPeriods = AtlasGraphUtilsV1.getProperty(classificationVertex, CLASSIFICATION_VALIDITY_PERIODS_KEY, String.class);
-
-        if (strValidityPeriods != null) {
-            ret.setValidityPeriods(AtlasJson.fromJson(strValidityPeriods, TIME_BOUNDARIES_LIST_TYPE));
-        }
-
-        mapAttributes(classificationVertex, ret, null);
-
-        return ret;
-    }
-
-    public AtlasVertex getReferencedEntityVertex(AtlasEdge edge, AtlasRelationshipEdgeDirection relationshipDirection, AtlasVertex parentVertex) throws AtlasBaseException {
-        AtlasVertex entityVertex = null;
-
-        if (relationshipDirection == OUT) {
-            entityVertex = edge.getInVertex();
-        } else if (relationshipDirection == IN) {
-            entityVertex = edge.getOutVertex();
-        } else if (relationshipDirection == BOTH){
-            // since relationship direction is BOTH, edge direction can be inward or outward
-            // compare with parent entity vertex and pick the right reference vertex
-            if (StringUtils.equals(GraphHelper.getGuid(parentVertex), GraphHelper.getGuid(edge.getOutVertex()))) {
-                entityVertex = edge.getInVertex();
-            } else {
-                entityVertex = edge.getOutVertex();
-            }
-        }
-
-        return entityVertex;
-    }
-
-    public AtlasVertex getEntityVertex(String guid) throws AtlasBaseException {
-        AtlasVertex ret = AtlasGraphUtilsV1.findByGuid(guid);
-
-        if (ret == null) {
-            throw new AtlasBaseException(AtlasErrorCode.INSTANCE_GUID_NOT_FOUND, guid);
-        }
-
-        return ret;
-    }
-
-    private AtlasVertex getEntityVertex(AtlasObjectId objId) throws AtlasBaseException {
-        AtlasVertex ret = null;
-
-        if (! AtlasTypeUtil.isValid(objId)) {
-            throw new AtlasBaseException(AtlasErrorCode.INVALID_OBJECT_ID, objId.toString());
-        }
-
-        if (AtlasTypeUtil.isAssignedGuid(objId)) {
-            ret = AtlasGraphUtilsV1.findByGuid(objId.getGuid());
-        } else {
-            AtlasEntityType     entityType     = typeRegistry.getEntityTypeByName(objId.getTypeName());
-            Map<String, Object> uniqAttributes = objId.getUniqueAttributes();
-
-            ret = AtlasGraphUtilsV1.getVertexByUniqueAttributes(entityType, uniqAttributes);
-        }
-
-        if (ret == null) {
-            throw new AtlasBaseException(AtlasErrorCode.INSTANCE_GUID_NOT_FOUND, objId.toString());
-        }
-
-        return ret;
-    }
-
-    private AtlasEntity mapVertexToAtlasEntity(AtlasVertex entityVertex, AtlasEntityExtInfo entityExtInfo) throws AtlasBaseException {
-        String      guid   = getGuid(entityVertex);
-        AtlasEntity entity = entityExtInfo != null ? entityExtInfo.getEntity(guid) : null;
-
-        if (entity == null) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Mapping graph vertex to atlas entity for guid {}", guid);
-            }
-
-            entity = new AtlasEntity();
-
-            if (entityExtInfo != null) {
-                entityExtInfo.addReferredEntity(guid, entity);
-            }
-
-            mapSystemAttributes(entityVertex, entity);
-
-            mapAttributes(entityVertex, entity, entityExtInfo);
-
-            mapRelationshipAttributes(entityVertex, entity);
-
-            mapClassifications(entityVertex, entity);
-        }
-
-        return entity;
-    }
-
-    private AtlasEntityHeader mapVertexToAtlasEntityHeader(AtlasVertex entityVertex) throws AtlasBaseException {
-        return mapVertexToAtlasEntityHeader(entityVertex, Collections.<String>emptySet());
-    }
-
-    private AtlasEntityHeader mapVertexToAtlasEntityHeader(AtlasVertex entityVertex, Set<String> attributes) throws AtlasBaseException {
-        AtlasEntityHeader ret = new AtlasEntityHeader();
-
-        String typeName = entityVertex.getProperty(Constants.TYPE_NAME_PROPERTY_KEY, String.class);
-        String guid     = entityVertex.getProperty(Constants.GUID_PROPERTY_KEY, String.class);
-
-        ret.setTypeName(typeName);
-        ret.setGuid(guid);
-        ret.setStatus(GraphHelper.getStatus(entityVertex));
-        ret.setClassificationNames(getAllTraitNames(entityVertex));
-
-        List<AtlasTermAssignmentHeader> termAssignmentHeaders = mapAssignedTerms(entityVertex);
-        ret.setMeanings(termAssignmentHeaders);
-        ret.setMeaningNames(termAssignmentHeaders.stream().map(AtlasTermAssignmentHeader::getDisplayText).collect(Collectors.toList()));
-
-        AtlasEntityType entityType = typeRegistry.getEntityTypeByName(typeName);
-
-        if (entityType != null) {
-            for (AtlasAttribute uniqueAttribute : entityType.getUniqAttributes().values()) {
-                Object attrValue = getVertexAttribute(entityVertex, uniqueAttribute);
-
-                if (attrValue != null) {
-                    ret.setAttribute(uniqueAttribute.getName(), attrValue);
-                }
-            }
-
-            Object name        = getVertexAttribute(entityVertex, entityType.getAttribute(NAME));
-            Object description = getVertexAttribute(entityVertex, entityType.getAttribute(DESCRIPTION));
-            Object owner       = getVertexAttribute(entityVertex, entityType.getAttribute(OWNER));
-            Object createTime  = getVertexAttribute(entityVertex, entityType.getAttribute(CREATE_TIME));
-            Object displayText = name != null ? name : ret.getAttribute(QUALIFIED_NAME);
-
-            ret.setAttribute(NAME, name);
-            ret.setAttribute(DESCRIPTION, description);
-            ret.setAttribute(OWNER, owner);
-            ret.setAttribute(CREATE_TIME, createTime);
-
-            if (displayText != null) {
-                ret.setDisplayText(displayText.toString());
-            }
-
-            if (CollectionUtils.isNotEmpty(attributes)) {
-                for (String attrName : attributes) {
-                    String nonQualifiedAttrName = toNonQualifiedName(attrName);
-                    if (ret.hasAttribute(attrName)) {
-                        continue;
-                    }
-
-                    Object attrValue = getVertexAttribute(entityVertex, entityType.getAttribute(nonQualifiedAttrName));
-
-                    if (attrValue != null) {
-                        ret.setAttribute(nonQualifiedAttrName, attrValue);
-                    }
-                }
-            }
-
-        }
-
-        return ret;
-    }
-
-    private String toNonQualifiedName(String attrName) {
-        String ret;
-        if (attrName.contains(".")) {
-            String[] attributeParts = attrName.split("\\.");
-            ret = attributeParts[attributeParts.length - 1];
-        } else {
-            ret = attrName;
-        }
-        return ret;
-    }
-
-    private AtlasEntity mapSystemAttributes(AtlasVertex entityVertex, AtlasEntity entity) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Mapping system attributes for type {}", entity.getTypeName());
-        }
-
-        entity.setGuid(getGuid(entityVertex));
-        entity.setTypeName(getTypeName(entityVertex));
-        entity.setStatus(GraphHelper.getStatus(entityVertex));
-        entity.setVersion(GraphHelper.getVersion(entityVertex));
-
-        entity.setCreatedBy(GraphHelper.getCreatedByAsString(entityVertex));
-        entity.setUpdatedBy(GraphHelper.getModifiedByAsString(entityVertex));
-
-        entity.setCreateTime(new Date(GraphHelper.getCreatedTime(entityVertex)));
-        entity.setUpdateTime(new Date(GraphHelper.getModifiedTime(entityVertex)));
-
-        return entity;
-    }
-
-    private void mapAttributes(AtlasVertex entityVertex, AtlasStruct struct, AtlasEntityExtInfo entityExtInfo) throws AtlasBaseException {
-        AtlasType objType = typeRegistry.getType(struct.getTypeName());
-
-        if (!(objType instanceof AtlasStructType)) {
-            throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, struct.getTypeName());
-        }
-
-        AtlasStructType structType = (AtlasStructType) objType;
-
-        for (AtlasAttribute attribute : structType.getAllAttributes().values()) {
-            Object attrValue = mapVertexToAttribute(entityVertex, attribute, entityExtInfo);
-
-            struct.setAttribute(attribute.getName(), attrValue);
-        }
-    }
-
-    public List<AtlasClassification> getAllClassifications(AtlasVertex entityVertex) throws AtlasBaseException {
-        List<AtlasClassification> ret   = new ArrayList<>();
-        Iterable                  edges = entityVertex.query().direction(AtlasEdgeDirection.OUT).label(CLASSIFICATION_LABEL).edges();
-
-        if (edges != null) {
-            Iterator<AtlasEdge> iterator = edges.iterator();
-
-            while (iterator.hasNext()) {
-                AtlasEdge edge = iterator.next();
-
-                if (edge != null) {
-                    ret.add(toAtlasClassification(edge.getInVertex()));
-                }
-            }
-        }
-
-        return ret;
-    }
-
-    public List<AtlasTermAssignmentHeader> mapAssignedTerms(AtlasVertex entityVertex) throws AtlasBaseException {
-        List<AtlasTermAssignmentHeader> ret = new ArrayList<>();
-
-        Iterable edges = entityVertex.query().direction(AtlasEdgeDirection.IN).label(TERM_ASSIGNMENT_LABEL).edges();
-
-        if (edges != null) {
-            for (final AtlasEdge edge : (Iterable<AtlasEdge>) edges) {
-                if (edge != null && GraphHelper.getStatus(edge) != AtlasEntity.Status.DELETED) {
-                    ret.add(toTermAssignmentHeader(edge));
-                }
-            }
-        }
-
-        return ret;
-    }
-
-    private AtlasTermAssignmentHeader toTermAssignmentHeader(final AtlasEdge edge) {
-        AtlasTermAssignmentHeader ret = new AtlasTermAssignmentHeader();
-
-        AtlasVertex termVertex = edge.getOutVertex();
-
-        String guid = GraphHelper.getGuid(termVertex);
-        if (guid != null) {
-            ret.setTermGuid(guid);
-        }
-
-        String relationGuid = edge.getProperty(Constants.RELATIONSHIP_GUID_PROPERTY_KEY, String.class);
-        if (relationGuid != null) {
-            ret.setRelationGuid(relationGuid);
-        }
-
-        Object displayName = GraphHelper.getProperty(termVertex, GLOSSARY_TERM_DISPLAY_NAME_ATTR);
-        if (displayName instanceof String) {
-            ret.setDisplayText((String) displayName);
-        }
-
-        String description = edge.getProperty(TERM_ASSIGNMENT_ATTR_DESCRIPTION, String.class);
-        if (description != null) {
-            ret.setDescription(description);
-        }
-
-        String expression    = edge.getProperty(TERM_ASSIGNMENT_ATTR_EXPRESSION, String.class);
-        if (expression != null) {
-            ret.setExpression(expression);
-        }
-
-        String status = edge.getProperty(TERM_ASSIGNMENT_ATTR_STATUS, String.class);
-        if (status != null) {
-            AtlasTermAssignmentStatus assignmentStatus = AtlasTermAssignmentStatus.valueOf(status);
-            ret.setStatus(assignmentStatus);
-        }
-
-        Integer confidence = edge.getProperty(TERM_ASSIGNMENT_ATTR_CONFIDENCE, Integer.class);
-        if (confidence != null) {
-            ret.setConfidence(confidence);
-        }
-
-        String createdBy = edge.getProperty(TERM_ASSIGNMENT_ATTR_CREATED_BY, String.class);
-        if (createdBy != null) {
-            ret.setCreatedBy(createdBy);
-        }
-
-        String steward = edge.getProperty(TERM_ASSIGNMENT_ATTR_STEWARD, String.class);
-        if (steward != null) {
-            ret.setSteward(steward);
-        }
-
-        String source = edge.getProperty(TERM_ASSIGNMENT_ATTR_SOURCE, String.class);
-        if (source != null) {
-            ret.setSource(source);
-        }
-
-        return ret;
-    }
-
-    private void mapClassifications(AtlasVertex entityVertex, AtlasEntity entity) throws AtlasBaseException {
-        List<AtlasEdge> edges = getAllClassificationEdges(entityVertex);
-
-        if (CollectionUtils.isNotEmpty(edges)) {
-            List<AtlasClassification> allClassifications                 = new ArrayList<>();
-
-            for (AtlasEdge edge : edges) {
-                AtlasVertex classificationVertex = edge.getInVertex();
-
-                allClassifications.add(toAtlasClassification(classificationVertex));
-            }
-
-            entity.setClassifications(allClassifications);
-        }
-    }
-
-    private Object mapVertexToAttribute(AtlasVertex entityVertex, AtlasAttribute attribute, AtlasEntityExtInfo entityExtInfo) throws AtlasBaseException {
-        Object    ret                = null;
-        AtlasType attrType           = attribute.getAttributeType();
-        String    vertexPropertyName = attribute.getQualifiedName();
-        String    edgeLabel          = EDGE_LABEL_PREFIX + vertexPropertyName;
-        boolean   isOwnedAttribute   = attribute.isOwnedRef();
-        AtlasRelationshipEdgeDirection edgeDirection = attribute.getRelationshipEdgeDirection();
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Mapping vertex {} to atlas entity {}.{}", entityVertex, attribute.getDefinedInDef().getName(), attribute.getName());
-        }
-
-        switch (attrType.getTypeCategory()) {
-            case PRIMITIVE:
-                ret = mapVertexToPrimitive(entityVertex, vertexPropertyName, attribute.getAttributeDef());
-                break;
-            case ENUM:
-                ret = GraphHelper.getProperty(entityVertex, vertexPropertyName);
-                break;
-            case STRUCT:
-                ret = mapVertexToStruct(entityVertex, edgeLabel, null, entityExtInfo);
-                break;
-            case OBJECT_ID_TYPE:
-                ret = mapVertexToObjectId(entityVertex, edgeLabel, null, entityExtInfo, isOwnedAttribute, edgeDirection);
-                break;
-            case ARRAY:
-                ret = mapVertexToArray(entityVertex, entityExtInfo, isOwnedAttribute, attribute);
-                break;
-            case MAP:
-                ret = mapVertexToMap(entityVertex, vertexPropertyName, entityExtInfo, isOwnedAttribute, attribute);
-                break;
-            case CLASSIFICATION:
-                // do nothing
-                break;
-        }
-
-        return ret;
-    }
-
-    private Map<String, Object> mapVertexToMap(AtlasVertex entityVertex, final String propertyName, AtlasEntityExtInfo entityExtInfo,
-                                               boolean isOwnedAttribute, AtlasAttribute attribute) throws AtlasBaseException {
-
-        Map<String, Object> ret          = null;
-        AtlasMapType        mapType      = (AtlasMapType) attribute.getAttributeType();
-        AtlasType           mapValueType = mapType.getValueType();
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Mapping map attribute {} for vertex {}", mapType.getTypeName(), entityVertex);
-        }
-
-        if (isReference(mapValueType)) {
-            Map<String, Object> currentMap = getReferenceMap(entityVertex, attribute);
-
-            if (MapUtils.isNotEmpty(currentMap)) {
-                ret = new HashMap<>();
-
-                for (Map.Entry<String, Object> entry : currentMap.entrySet()) {
-                    String mapKey    = entry.getKey();
-                    Object keyValue  = entry.getValue();
-                    Object mapValue  = mapVertexToCollectionEntry(entityVertex, mapValueType, keyValue, attribute.getRelationshipEdgeLabel(),
-                                                                  entityExtInfo, isOwnedAttribute, attribute.getRelationshipEdgeDirection());
-                    if (mapValue != null) {
-                        ret.put(mapKey, mapValue);
-                    }
-                }
-            }
-        } else {
-            ret = getPrimitiveMap(entityVertex, propertyName);
-        }
-
-        if (MapUtils.isEmpty(ret)) {
-            ret = null;
-        }
-
-        return ret;
-    }
-
-    private List<Object> mapVertexToArray(AtlasVertex entityVertex, AtlasEntityExtInfo entityExtInfo,
-                                          boolean isOwnedAttribute, AtlasAttribute attribute)  throws AtlasBaseException {
-
-        AtlasArrayType arrayType        = (AtlasArrayType) attribute.getAttributeType();
-        AtlasType      arrayElementType = arrayType.getElementType();
-        List<Object>   arrayElements    = getArrayElementsProperty(arrayElementType, entityVertex, attribute);
-
-        if (CollectionUtils.isEmpty(arrayElements)) {
-            return null;
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Mapping array attribute {} for vertex {}", arrayElementType.getTypeName(), entityVertex);
-        }
-
-        List                           arrValues     = new ArrayList(arrayElements.size());
-        String                         edgeLabel     = attribute.getRelationshipEdgeLabel();
-        AtlasRelationshipEdgeDirection edgeDirection = attribute.getRelationshipEdgeDirection();
-
-        for (Object element : arrayElements) {
-            // When internal types are deleted, sometimes the collection type attribute will contain a null value
-            // Graph layer does erroneous mapping of the null element, hence avoiding the processing of the null element
-            if (element == null) {
-                LOG.debug("Skipping null arrayElement");
-                continue;
-            }
-
-            Object arrValue = mapVertexToCollectionEntry(entityVertex, arrayElementType, element, edgeLabel,
-                                                         entityExtInfo, isOwnedAttribute, edgeDirection);
-
-            if (arrValue != null) {
-                arrValues.add(arrValue);
-            }
-        }
-
-        return arrValues;
-    }
-
-    private Object mapVertexToCollectionEntry(AtlasVertex entityVertex, AtlasType arrayElement, Object value,
-                                              String edgeLabel, AtlasEntityExtInfo entityExtInfo, boolean isOwnedAttribute,
-                                              AtlasRelationshipEdgeDirection edgeDirection) throws AtlasBaseException {
-        Object ret = null;
-
-        switch (arrayElement.getTypeCategory()) {
-            case PRIMITIVE:
-            case ENUM:
-            case ARRAY:
-            case MAP:
-                ret = value;
-                break;
-
-            case CLASSIFICATION:
-                break;
-
-            case STRUCT:
-                ret = mapVertexToStruct(entityVertex, edgeLabel, (AtlasEdge) value, entityExtInfo);
-                break;
-
-            case OBJECT_ID_TYPE:
-                ret = mapVertexToObjectId(entityVertex, edgeLabel, (AtlasEdge) value, entityExtInfo, isOwnedAttribute, edgeDirection);
-                break;
-
-            default:
-                break;
-        }
-
-        return ret;
-    }
-
-    public Object mapVertexToPrimitive(AtlasElement entityVertex, final String vertexPropertyName, AtlasAttributeDef attrDef) {
-        Object ret = null;
-
-        if (GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Object.class) == null) {
-            return null;
-        }
-
-        switch (attrDef.getTypeName().toLowerCase()) {
-            case ATLAS_TYPE_STRING:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, String.class);
-                break;
-            case ATLAS_TYPE_SHORT:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Short.class);
-                break;
-            case ATLAS_TYPE_INT:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Integer.class);
-                break;
-            case ATLAS_TYPE_BIGINTEGER:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, BigInteger.class);
-                break;
-            case ATLAS_TYPE_BOOLEAN:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Boolean.class);
-                break;
-            case ATLAS_TYPE_BYTE:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Byte.class);
-                break;
-            case ATLAS_TYPE_LONG:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Long.class);
-                break;
-            case ATLAS_TYPE_FLOAT:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Float.class);
-                break;
-            case ATLAS_TYPE_DOUBLE:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Double.class);
-                break;
-            case ATLAS_TYPE_BIGDECIMAL:
-                ret = GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, BigDecimal.class);
-                break;
-            case ATLAS_TYPE_DATE:
-                ret = new Date(GraphHelper.getSingleValuedProperty(entityVertex, vertexPropertyName, Long.class));
-                break;
-            default:
-                break;
-        }
-
-        return ret;
-    }
-
-    private AtlasObjectId mapVertexToObjectId(AtlasVertex entityVertex, String edgeLabel, AtlasEdge edge,
-                                              AtlasEntityExtInfo entityExtInfo, boolean isOwnedAttribute,
-                                              AtlasRelationshipEdgeDirection edgeDirection) throws AtlasBaseException {
-        AtlasObjectId ret = null;
-
-        if (edge == null) {
-            edge = graphHelper.getEdgeForLabel(entityVertex, edgeLabel, edgeDirection);
-        }
-
-        if (GraphHelper.elementExists(edge)) {
-            AtlasVertex referenceVertex = edge.getInVertex();
-
-            if (StringUtils.equals(getIdFromVertex(referenceVertex), getIdFromVertex(entityVertex))) {
-                referenceVertex = edge.getOutVertex();
-            }
-
-            if (referenceVertex != null) {
-                if (entityExtInfo != null && isOwnedAttribute) {
-                    AtlasEntity entity = mapVertexToAtlasEntity(referenceVertex, entityExtInfo);
-
-                    if (entity != null) {
-                        ret = AtlasTypeUtil.getAtlasObjectId(entity);
-                    }
-                } else {
-                    ret = new AtlasObjectId(getGuid(referenceVertex), getTypeName(referenceVertex));
-                }
-            }
-        }
-
-        return ret;
-    }
-
-    private AtlasStruct mapVertexToStruct(AtlasVertex entityVertex, String edgeLabel, AtlasEdge edge, AtlasEntityExtInfo entityExtInfo) throws AtlasBaseException {
-        AtlasStruct ret = null;
-
-        if (edge == null) {
-            edge = graphHelper.getEdgeForLabel(entityVertex, edgeLabel);
-        }
-
-        if (GraphHelper.elementExists(edge)) {
-            final AtlasVertex referenceVertex = edge.getInVertex();
-            ret = new AtlasStruct(getTypeName(referenceVertex));
-
-            mapAttributes(referenceVertex, ret, entityExtInfo);
-        }
-
-        return ret;
-    }
-
-    private Object getVertexAttribute(AtlasVertex vertex, AtlasAttribute attribute) throws AtlasBaseException {
-        return vertex != null && attribute != null ? mapVertexToAttribute(vertex, attribute, null) : null;
-    }
-
-    private void mapRelationshipAttributes(AtlasVertex entityVertex, AtlasEntity entity) throws AtlasBaseException {
-        AtlasEntityType entityType = typeRegistry.getEntityTypeByName(entity.getTypeName());
-
-        if (entityType == null) {
-            throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, entity.getTypeName());
-        }
-
-        for (AtlasAttribute attribute : entityType.getRelationshipAttributes().values()) {
-            Object attrValue = mapVertexToRelationshipAttribute(entityVertex, entityType, attribute);
-
-            entity.setRelationshipAttribute(attribute.getName(), attrValue);
-        }
-    }
-
-    private Object mapVertexToRelationshipAttribute(AtlasVertex entityVertex, AtlasEntityType entityType, AtlasAttribute attribute) throws AtlasBaseException {
-        Object               ret             = null;
-        AtlasRelationshipDef relationshipDef = graphHelper.getRelationshipDef(entityVertex, entityType, attribute.getName());
-
-        if (relationshipDef == null) {
-            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID, "relationshipDef is null");
-        }
-
-        AtlasRelationshipEndDef endDef1         = relationshipDef.getEndDef1();
-        AtlasRelationshipEndDef endDef2         = relationshipDef.getEndDef2();
-        AtlasEntityType         endDef1Type     = typeRegistry.getEntityTypeByName(endDef1.getType());
-        AtlasEntityType         endDef2Type     = typeRegistry.getEntityTypeByName(endDef2.getType());
-        AtlasRelationshipEndDef attributeEndDef = null;
-
-        if (endDef1Type.isTypeOrSuperTypeOf(entityType.getTypeName()) && StringUtils.equals(endDef1.getName(), attribute.getName())) {
-            attributeEndDef = endDef1;
-        } else if (endDef2Type.isTypeOrSuperTypeOf(entityType.getTypeName()) && StringUtils.equals(endDef2.getName(), attribute.getName())) {
-            attributeEndDef = endDef2;
-        }
-
-        if (attributeEndDef == null) {
-            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID, relationshipDef.toString());
-        }
-
-        switch (attributeEndDef.getCardinality()) {
-            case SINGLE:
-                ret = mapRelatedVertexToObjectId(entityVertex, attribute);
-                break;
-
-            case LIST:
-            case SET:
-                ret = mapRelationshipArrayAttribute(entityVertex, attribute);
-                break;
-        }
-
-        return ret;
-    }
-
-    private AtlasObjectId mapRelatedVertexToObjectId(AtlasVertex entityVertex, AtlasAttribute attribute) throws AtlasBaseException {
-        AtlasEdge edge = graphHelper.getEdgeForLabel(entityVertex, attribute.getRelationshipEdgeLabel(), attribute.getRelationshipEdgeDirection());
-
-        return mapVertexToRelatedObjectId(entityVertex, edge);
-    }
-
-    private List<AtlasRelatedObjectId> mapRelationshipArrayAttribute(AtlasVertex entityVertex, AtlasAttribute attribute) throws AtlasBaseException {
-        List<AtlasRelatedObjectId> ret   = new ArrayList<>();
-        Iterator<AtlasEdge>        edges = null;
-
-        if (attribute.getRelationshipEdgeDirection() == IN) {
-            edges = getIncomingEdgesByLabel(entityVertex, attribute.getRelationshipEdgeLabel());
-        } else if (attribute.getRelationshipEdgeDirection() == OUT) {
-            edges = getOutGoingEdgesByLabel(entityVertex, attribute.getRelationshipEdgeLabel());
-        } else if (attribute.getRelationshipEdgeDirection() == BOTH) {
-            edges = getAdjacentEdgesByLabel(entityVertex, AtlasEdgeDirection.BOTH, attribute.getRelationshipEdgeLabel());
-        }
-
-        if (edges != null) {
-            while (edges.hasNext()) {
-                AtlasEdge relationshipEdge = edges.next();
-
-                AtlasRelatedObjectId relatedObjectId = mapVertexToRelatedObjectId(entityVertex, relationshipEdge);
-
-                ret.add(relatedObjectId);
-            }
-        }
-
-        return ret;
-    }
-
-    private AtlasRelatedObjectId mapVertexToRelatedObjectId(AtlasVertex entityVertex, AtlasEdge edge) throws AtlasBaseException {
-        AtlasRelatedObjectId ret = null;
-
-        if (GraphHelper.elementExists(edge)) {
-            AtlasVertex referenceVertex = edge.getInVertex();
-
-            if (StringUtils.equals(getIdFromVertex(referenceVertex), getIdFromVertex(entityVertex))) {
-                referenceVertex = edge.getOutVertex();
-            }
-
-            if (referenceVertex != null) {
-                String            entityTypeName = getTypeName(referenceVertex);
-                String            entityGuid     = getGuid(referenceVertex);
-                AtlasRelationship relationship   = mapEdgeToAtlasRelationship(edge);
-
-                ret = new AtlasRelatedObjectId(entityGuid, entityTypeName,
-                                               relationship.getGuid(), relationship.getStatus(),
-                                               new AtlasStruct(relationship.getTypeName(), relationship.getAttributes()));
-
-                Object displayText = getDisplayText(referenceVertex, entityTypeName);
-
-                if (displayText != null) {
-                    ret.setDisplayText(displayText.toString());
-                }
-            }
-        }
-
-        return ret;
-    }
-
-    private Object getDisplayText(AtlasVertex entityVertex, String entityTypeName) throws AtlasBaseException {
-        AtlasEntityType entityType = typeRegistry.getEntityTypeByName(entityTypeName);
-        Object          ret        = null;
-
-        if (entityType != null) {
-            ret = getVertexAttribute(entityVertex, entityType.getAttribute(NAME));
-
-            if (ret == null) {
-                ret = getVertexAttribute(entityVertex, entityType.getAttribute(DISPLAY_NAME));
-            }
-
-            if (ret == null) {
-                ret = getVertexAttribute(entityVertex, entityType.getAttribute(QUALIFIED_NAME));
-            }
-        }
-
-        return ret;
-    }
-
-    public AtlasRelationship mapEdgeToAtlasRelationship(AtlasEdge edge) throws AtlasBaseException {
-        return mapEdgeToAtlasRelationship(edge, false).getRelationship();
-    }
-
-    public AtlasRelationshipWithExtInfo mapEdgeToAtlasRelationshipWithExtInfo(AtlasEdge edge) throws AtlasBaseException {
-        return mapEdgeToAtlasRelationship(edge, true);
-    }
-
-    public AtlasRelationshipWithExtInfo mapEdgeToAtlasRelationship(AtlasEdge edge, boolean extendedInfo) throws AtlasBaseException {
-        AtlasRelationshipWithExtInfo ret = new AtlasRelationshipWithExtInfo();
-
-        mapSystemAttributes(edge, ret, extendedInfo);
-
-        mapAttributes(edge, ret);
-
-        return ret;
-    }
-
-    private AtlasRelationshipWithExtInfo mapSystemAttributes(AtlasEdge edge, AtlasRelationshipWithExtInfo relationshipWithExtInfo, boolean extendedInfo) throws AtlasBaseException {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Mapping system attributes for relationship");
-        }
-
-        AtlasRelationship relationship = relationshipWithExtInfo.getRelationship();
-
-        if (relationship == null) {
-            relationship = new AtlasRelationship();
-
-            relationshipWithExtInfo.setRelationship(relationship);
-        }
-
-        relationship.setGuid(getRelationshipGuid(edge));
-        relationship.setTypeName(getTypeName(edge));
-
-        relationship.setCreatedBy(GraphHelper.getCreatedByAsString(edge));
-        relationship.setUpdatedBy(GraphHelper.getModifiedByAsString(edge));
-
-        relationship.setCreateTime(new Date(GraphHelper.getCreatedTime(edge)));
-        relationship.setUpdateTime(new Date(GraphHelper.getModifiedTime(edge)));
-
-        Long version = GraphHelper.getVersion(edge);
-
-        if (version == null) {
-            version = Long.valueOf(1L);
-        }
-
-        relationship.setVersion(version);
-        relationship.setStatus(GraphHelper.getEdgeStatus(edge));
-
-        AtlasVertex end1Vertex = edge.getOutVertex();
-        AtlasVertex end2Vertex = edge.getInVertex();
-
-        relationship.setEnd1(new AtlasObjectId(getGuid(end1Vertex), getTypeName(end1Vertex)));
-        relationship.setEnd2(new AtlasObjectId(getGuid(end2Vertex), getTypeName(end2Vertex)));
-
-        relationship.setLabel(edge.getLabel());
-        relationship.setPropagateTags(getPropagateTags(edge));
-
-        if (extendedInfo) {
-            addToReferredEntities(relationshipWithExtInfo, end1Vertex);
-            addToReferredEntities(relationshipWithExtInfo, end2Vertex);
-        }
-
-        // set propagated and blocked propagated classifications
-        readClassificationsFromEdge(edge, relationshipWithExtInfo, extendedInfo);
-
-        return relationshipWithExtInfo;
-    }
-
-    private void readClassificationsFromEdge(AtlasEdge edge, AtlasRelationshipWithExtInfo relationshipWithExtInfo, boolean extendedInfo) throws AtlasBaseException {
-        List<AtlasVertex>        classificationVertices    = getClassificationVertices(edge);
-        List<String>             blockedClassificationIds  = getBlockedClassificationIds(edge);
-        AtlasRelationship        relationship              = relationshipWithExtInfo.getRelationship();
-        Set<AtlasClassification> propagatedClassifications = new HashSet<>();
-        Set<AtlasClassification> blockedClassifications    = new HashSet<>();
-
-        for (AtlasVertex classificationVertex : classificationVertices) {
-            String              classificationId = classificationVertex.getIdForDisplay();
-            AtlasClassification classification   = toAtlasClassification(classificationVertex);
-            String              entityGuid       = classification.getEntityGuid();
-
-            if (blockedClassificationIds.contains(classificationId)) {
-                blockedClassifications.add(classification);
-            } else {
-                propagatedClassifications.add(classification);
-            }
-
-            // add entity headers to referred entities
-            if (extendedInfo) {
-                addToReferredEntities(relationshipWithExtInfo, entityGuid);
-            }
-        }
-
-        relationship.setPropagatedClassifications(propagatedClassifications);
-        relationship.setBlockedPropagatedClassifications(blockedClassifications);
-    }
-
-    private void addToReferredEntities(AtlasRelationshipWithExtInfo relationshipWithExtInfo, String guid) throws AtlasBaseException {
-        if (!relationshipWithExtInfo.referredEntitiesContains(guid)) {
-            addToReferredEntities(relationshipWithExtInfo, getEntityVertex(guid));
-        }
-    }
-
-    private void addToReferredEntities(AtlasRelationshipWithExtInfo relationshipWithExtInfo, AtlasVertex entityVertex) throws AtlasBaseException {
-        String entityGuid = getGuid(entityVertex);
-
-        if (!relationshipWithExtInfo.referredEntitiesContains(entityGuid)) {
-            relationshipWithExtInfo.addReferredEntity(entityGuid, toAtlasEntityHeader(entityVertex));
-        }
-    }
-
-    private void mapAttributes(AtlasEdge edge, AtlasRelationshipWithExtInfo relationshipWithExtInfo) throws AtlasBaseException {
-        AtlasRelationship relationship = relationshipWithExtInfo.getRelationship();
-        AtlasType         objType      = typeRegistry.getType(relationship.getTypeName());
-
-        if (!(objType instanceof AtlasRelationshipType)) {
-            throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, relationship.getTypeName());
-        }
-
-        AtlasRelationshipType relationshipType = (AtlasRelationshipType) objType;
-
-        for (AtlasAttribute attribute : relationshipType.getAllAttributes().values()) {
-            // mapping only primitive attributes
-            Object attrValue = mapVertexToPrimitive(edge, attribute.getQualifiedName(), attribute.getAttributeDef());
-
-            relationship.setAttribute(attribute.getName(), attrValue);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityImportStream.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityImportStream.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityImportStream.java
deleted file mode 100644
index d4b6c55..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityImportStream.java
+++ /dev/null
@@ -1,34 +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.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-
-public interface EntityImportStream extends EntityStream {
-
-    int size();
-    void setPosition(int position);
-    int getPosition();
-
-    void setPositionUsingEntityGuid(String guid);
-
-    AtlasEntityWithExtInfo getNextEntityWithExtInfo();
-
-    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/EntityMutationContext.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityMutationContext.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityMutationContext.java
deleted file mode 100644
index e3f7121..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityMutationContext.java
+++ /dev/null
@@ -1,155 +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.repository.graphdb.AtlasVertex;
-import org.apache.atlas.repository.store.graph.EntityGraphDiscoveryContext;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.commons.lang.StringUtils;
-
-import java.util.*;
-
-public class EntityMutationContext {
-    private EntityGraphDiscoveryContext  context = null;
-    private final List<AtlasEntity>            entitiesCreated = new ArrayList<>();
-    private final List<AtlasEntity>            entitiesUpdated = new ArrayList<>();
-    private final Map<String, AtlasEntityType> entityVsType    = new HashMap<>();
-    private final Map<String, AtlasVertex>     entityVsVertex  = new HashMap<>();
-    private final Map<String, String>          guidAssignments = new HashMap<>();
-
-    public EntityMutationContext(final EntityGraphDiscoveryContext context) {
-        this.context = context;
-    }
-
-    public EntityMutationContext() {
-    }
-
-    public void addCreated(String internalGuid, AtlasEntity entity, AtlasEntityType type, AtlasVertex atlasVertex) {
-        entitiesCreated.add(entity);
-        entityVsType.put(entity.getGuid(), type);
-        entityVsVertex.put(entity.getGuid(), atlasVertex);
-
-        if (!StringUtils.equals(internalGuid, entity.getGuid())) {
-            guidAssignments.put(internalGuid, entity.getGuid());
-            entityVsVertex.put(internalGuid, atlasVertex);
-        }
-    }
-
-    public void addUpdated(String internalGuid, AtlasEntity entity, AtlasEntityType type, AtlasVertex atlasVertex) {
-        if (!entityVsVertex.containsKey(internalGuid)) { // if the entity was already created/updated
-            entitiesUpdated.add(entity);
-            entityVsType.put(entity.getGuid(), type);
-            entityVsVertex.put(entity.getGuid(), atlasVertex);
-
-            if (!StringUtils.equals(internalGuid, entity.getGuid())) {
-                guidAssignments.put(internalGuid, entity.getGuid());
-                entityVsVertex.put(internalGuid, atlasVertex);
-            }
-        }
-    }
-
-    public EntityGraphDiscoveryContext getDiscoveryContext() {
-        return this.context;
-    }
-
-    public Collection<AtlasEntity> getCreatedEntities() {
-        return entitiesCreated;
-    }
-
-    public Collection<AtlasEntity> getUpdatedEntities() {
-        return entitiesUpdated;
-    }
-
-    public Map<String, String> getGuidAssignments() {
-        return guidAssignments;
-    }
-
-    public AtlasEntityType getType(String guid) {
-        return entityVsType.get(guid);
-    }
-
-    public AtlasVertex getVertex(String guid) { return entityVsVertex.get(guid); }
-
-    public boolean isImport() {
-        return (context != null) && context.getEntityStream() instanceof EntityImportStream;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final EntityMutationContext that = (EntityMutationContext) o;
-
-        return Objects.equals(context, that.context) &&
-               Objects.equals(entitiesCreated, that.entitiesCreated) &&
-               Objects.equals(entitiesUpdated, that.entitiesUpdated) &&
-               Objects.equals(entityVsType, that.entityVsType) &&
-               Objects.equals(entityVsVertex, that.entityVsVertex);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = (context != null ? context.hashCode() : 0);
-        result = 31 * result + entitiesCreated.hashCode();
-        result = 31 * result + entitiesUpdated.hashCode();
-        result = 31 * result + entityVsType.hashCode();
-        result = 31 * result + entityVsVertex.hashCode();
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return "EntityMutationContext{" +
-            "context=" + context +
-            ", entitiesCreated=" + entitiesCreated +
-            ", entitiesUpdated=" + entitiesUpdated +
-            ", entityVsType=" + entityVsType +
-            ", entityVsVertex=" + entityVsVertex +
-            '}';
-    }
-
-    public AtlasEntity getCreatedEntity(String parentGuid) {
-        return getFromCollection(parentGuid, getCreatedEntities());
-    }
-
-    public AtlasEntity getUpdatedEntity(String parentGuid) {
-        return getFromCollection(parentGuid, getUpdatedEntities());
-    }
-
-    private AtlasEntity getFromCollection(String parentGuid, Collection<AtlasEntity> coll) {
-        for (AtlasEntity e : coll) {
-            if(e.getGuid().equalsIgnoreCase(parentGuid)) {
-                return e;
-            }
-        }
-
-        return null;
-    }
-
-    public AtlasEntity getCreatedOrUpdatedEntity(String parentGuid) {
-        AtlasEntity e = getCreatedEntity(parentGuid);
-        if(e == null) {
-            return getUpdatedEntity(parentGuid);
-        }
-
-        return e;
-    }
-}

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityStream.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityStream.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityStream.java
deleted file mode 100644
index 3444bfd..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityStream.java
+++ /dev/null
@@ -1,31 +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.model.instance.AtlasEntity;
-
-public interface EntityStream {
-
-    boolean hasNext();
-
-    AtlasEntity next();
-
-    void reset();
-
-    AtlasEntity getByGuid(String guid);
-}

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/IDBasedEntityResolver.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/IDBasedEntityResolver.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/IDBasedEntityResolver.java
deleted file mode 100644
index 8b7ac8b..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/IDBasedEntityResolver.java
+++ /dev/null
@@ -1,83 +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.TypeCategory;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.repository.store.graph.EntityGraphDiscoveryContext;
-import org.apache.atlas.repository.store.graph.EntityResolver;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.type.AtlasTypeUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class IDBasedEntityResolver implements EntityResolver {
-    private static final Logger LOG = LoggerFactory.getLogger(IDBasedEntityResolver.class);
-
-    private final AtlasTypeRegistry typeRegistry;
-
-    public IDBasedEntityResolver(AtlasTypeRegistry typeRegistry) {
-        this.typeRegistry = typeRegistry;
-    }
-
-    public EntityGraphDiscoveryContext resolveEntityReferences(EntityGraphDiscoveryContext context) throws AtlasBaseException {
-        if (context == null) {
-            throw new AtlasBaseException(AtlasErrorCode.INTERNAL_ERROR, "IDBasedEntityResolver.resolveEntityReferences(): context is null");
-        }
-
-        EntityStream entityStream = context.getEntityStream();
-
-        for (String guid : context.getReferencedGuids()) {
-            boolean isAssignedGuid = AtlasTypeUtil.isAssignedGuid(guid);
-            AtlasVertex vertex = isAssignedGuid ? AtlasGraphUtilsV1.findByGuid(guid) : null;
-
-            if (vertex == null && !(entityStream instanceof EntityImportStream)) { // if not found in the store, look if the entity is present in the stream
-                AtlasEntity entity = entityStream.getByGuid(guid);
-
-                if (entity != null) { // look for the entity in the store using unique-attributes
-                    AtlasEntityType entityType = typeRegistry.getEntityTypeByName(entity.getTypeName());
-
-                    if (entityType == null) {
-                        throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, TypeCategory.ENTITY.name(), entity.getTypeName());
-                    }
-
-                    vertex = AtlasGraphUtilsV1.findByUniqueAttributes(entityType, entity.getAttributes());
-                } else if (!isAssignedGuid) { // for local-guids, entity must be in the stream
-                    throw new AtlasBaseException(AtlasErrorCode.REFERENCED_ENTITY_NOT_FOUND, guid);
-                }
-            }
-
-            if (vertex != null) {
-                context.addResolvedGuid(guid, vertex);
-            } else {
-                if (isAssignedGuid && !(entityStream instanceof EntityImportStream)) {
-                    throw new AtlasBaseException(AtlasErrorCode.REFERENCED_ENTITY_NOT_FOUND, guid);
-                } else {
-                    context.addLocalGuidReference(guid);
-                }
-            }
-        }
-
-        return context;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InMemoryMapEntityStream.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InMemoryMapEntityStream.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InMemoryMapEntityStream.java
deleted file mode 100644
index 68d7f11..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InMemoryMapEntityStream.java
+++ /dev/null
@@ -1,55 +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.model.instance.AtlasEntity;
-
-import java.util.Iterator;
-import java.util.Map;
-
-public class InMemoryMapEntityStream implements EntityStream {
-
-    private final Map<String, AtlasEntity>                 entities;
-    private       Iterator<Map.Entry<String, AtlasEntity>> iterator;
-
-    public InMemoryMapEntityStream(Map<String, AtlasEntity> entities) {
-        this.entities = entities;
-        this.iterator = entities.entrySet().iterator();
-    }
-
-    @Override
-    public boolean hasNext() {
-        return iterator.hasNext();
-    }
-
-    @Override
-    public AtlasEntity next() {
-        return iterator.hasNext() ? iterator.next().getValue() : null;
-    }
-
-    @Override
-    public void reset() {
-        iterator = entities.entrySet().iterator();
-    }
-
-    @Override
-    public AtlasEntity getByGuid(final String guid) {
-        return entities.get(guid);
-    }
-}

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InstanceGraphMapper.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InstanceGraphMapper.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InstanceGraphMapper.java
deleted file mode 100644
index 3cae8a5..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/InstanceGraphMapper.java
+++ /dev/null
@@ -1,32 +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.exception.AtlasBaseException;
-
-public interface InstanceGraphMapper<T> {
-
-    /**
-     * Map the given type instance to the graph
-     *
-     * @param ctx
-     * @return the value that was mapped to the vertex
-     * @throws AtlasBaseException
-     */
-    T toGraph(AttributeMutationContext ctx, EntityMutationContext context) throws AtlasBaseException;
-}

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1.java
index 2c921fc..41e65d4 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1.java
@@ -18,13 +18,14 @@
 
 package org.apache.atlas.repository.store.graph.v1;
 
-import org.apache.atlas.RequestContextV1;
+import org.apache.atlas.RequestContext;
 import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
 import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.model.instance.AtlasEntity;
 import org.apache.atlas.repository.graph.GraphHelper;
 import org.apache.atlas.repository.graphdb.AtlasEdge;
 import org.apache.atlas.repository.graphdb.AtlasVertex;
+import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
 import org.apache.atlas.type.AtlasTypeRegistry;
 import org.springframework.stereotype.Component;
 
@@ -52,12 +53,12 @@ public class SoftDeleteHandlerV1 extends DeleteHandlerV1 {
         if (force) {
             graphHelper.removeVertex(instanceVertex);
         } else {
-            AtlasEntity.Status state = AtlasGraphUtilsV1.getState(instanceVertex);
+            AtlasEntity.Status state = AtlasGraphUtilsV2.getState(instanceVertex);
 
             if (state != AtlasEntity.Status.DELETED) {
                 GraphHelper.setProperty(instanceVertex, STATE_PROPERTY_KEY, AtlasEntity.Status.DELETED.name());
-                GraphHelper.setProperty(instanceVertex, MODIFICATION_TIMESTAMP_PROPERTY_KEY, RequestContextV1.get().getRequestTime());
-                GraphHelper.setProperty(instanceVertex, MODIFIED_BY_KEY, RequestContextV1.get().getUser());
+                GraphHelper.setProperty(instanceVertex, MODIFICATION_TIMESTAMP_PROPERTY_KEY, RequestContext.get().getRequestTime());
+                GraphHelper.setProperty(instanceVertex, MODIFIED_BY_KEY, RequestContext.get().getUser());
             }
         }
     }
@@ -74,12 +75,12 @@ public class SoftDeleteHandlerV1 extends DeleteHandlerV1 {
         if (force) {
             graphHelper.removeEdge(edge);
         } else {
-            AtlasEntity.Status state = AtlasGraphUtilsV1.getState(edge);
+            AtlasEntity.Status state = AtlasGraphUtilsV2.getState(edge);
 
             if (state != AtlasEntity.Status.DELETED) {
                 GraphHelper.setProperty(edge, STATE_PROPERTY_KEY, AtlasEntity.Status.DELETED.name());
-                GraphHelper.setProperty(edge, MODIFICATION_TIMESTAMP_PROPERTY_KEY, RequestContextV1.get().getRequestTime());
-                GraphHelper.setProperty(edge, MODIFIED_BY_KEY, RequestContextV1.get().getUser());
+                GraphHelper.setProperty(edge, MODIFICATION_TIMESTAMP_PROPERTY_KEY, RequestContext.get().getRequestTime());
+                GraphHelper.setProperty(edge, MODIFIED_BY_KEY, RequestContext.get().getUser());
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/UniqAttrBasedEntityResolver.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/UniqAttrBasedEntityResolver.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/UniqAttrBasedEntityResolver.java
deleted file mode 100644
index 50eee72..0000000
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/UniqAttrBasedEntityResolver.java
+++ /dev/null
@@ -1,75 +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.TypeCategory;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.repository.store.graph.EntityGraphDiscoveryContext;
-import org.apache.atlas.repository.store.graph.EntityResolver;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class UniqAttrBasedEntityResolver implements EntityResolver {
-    private static final Logger LOG = LoggerFactory.getLogger(UniqAttrBasedEntityResolver.class);
-
-    private final AtlasTypeRegistry typeRegistry;
-
-    public UniqAttrBasedEntityResolver(AtlasTypeRegistry typeRegistry) {
-        this.typeRegistry = typeRegistry;
-    }
-
-    @Override
-    public EntityGraphDiscoveryContext resolveEntityReferences(EntityGraphDiscoveryContext context) throws AtlasBaseException {
-        if (context == null) {
-            throw new AtlasBaseException(AtlasErrorCode.INTERNAL_ERROR, "UniqAttrBasedEntityResolver.resolveEntityReferences(): context is null");
-        }
-
-        //Resolve attribute references
-        List<AtlasObjectId> resolvedReferences = new ArrayList<>();
-
-        for (AtlasObjectId objId : context.getReferencedByUniqAttribs()) {
-            //query in graph repo that given unique attribute - check for deleted also?
-            AtlasEntityType entityType = typeRegistry.getEntityTypeByName(objId.getTypeName());
-
-            if (entityType == null) {
-                throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, TypeCategory.ENTITY.name(), objId.getTypeName());
-            }
-
-            AtlasVertex vertex = AtlasGraphUtilsV1.findByUniqueAttributes(entityType, objId.getUniqueAttributes());
-
-            if (vertex != null) {
-                context.addResolvedIdByUniqAttribs(objId, vertex);
-                resolvedReferences.add(objId);
-            } else {
-                throw new AtlasBaseException(AtlasErrorCode.REFERENCED_ENTITY_NOT_FOUND, objId.toString());
-            }
-        }
-
-        return context;
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/atlas/blob/3d5b4880/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasAbstractDefStoreV2.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasAbstractDefStoreV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasAbstractDefStoreV2.java
new file mode 100644
index 0000000..2cb2b47
--- /dev/null
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasAbstractDefStoreV2.java
@@ -0,0 +1,112 @@
+/**
+ * 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.v2;
+
+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.AtlasBaseTypeDef;
+import org.apache.atlas.model.typedef.AtlasStructDef;
+import org.apache.atlas.query.AtlasDSL;
+import org.apache.atlas.repository.graphdb.AtlasVertex;
+import org.apache.atlas.repository.store.graph.AtlasDefStore;
+import org.apache.atlas.type.AtlasTypeRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * Abstract typedef-store for v1 format.
+ */
+  abstract class AtlasAbstractDefStoreV2<T extends AtlasBaseTypeDef> implements AtlasDefStore<T> {
+    private static final Logger LOG = LoggerFactory.getLogger(AtlasAbstractDefStoreV2.class);
+
+    protected final AtlasTypeDefGraphStoreV2 typeDefStore;
+    protected final AtlasTypeRegistry        typeRegistry;
+
+    private static final String  NAME_REGEX            = "[a-zA-Z][a-zA-Z0-9_ ]*";
+    private static final String  INTERNAL_NAME_REGEX   = "__" + NAME_REGEX;
+    private static final Pattern NAME_PATTERN          = Pattern.compile(NAME_REGEX);
+    private static final Pattern INTERNAL_NAME_PATTERN = Pattern.compile(INTERNAL_NAME_REGEX);
+
+    public static final String ALLOW_RESERVED_KEYWORDS = "atlas.types.allowReservedKeywords";
+
+    public AtlasAbstractDefStoreV2(AtlasTypeDefGraphStoreV2 typeDefStore, AtlasTypeRegistry typeRegistry) {
+        this.typeDefStore = typeDefStore;
+        this.typeRegistry = typeRegistry;
+    }
+
+    public void validateType(AtlasBaseTypeDef typeDef) throws AtlasBaseException {
+        if (!isValidName(typeDef.getName())) {
+            throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID_FORMAT, typeDef.getName(), typeDef.getCategory().name());
+        }
+
+        try {
+            final boolean allowReservedKeywords = ApplicationProperties.get().getBoolean(ALLOW_RESERVED_KEYWORDS, true);
+
+            if (!allowReservedKeywords && typeDef instanceof AtlasStructDef) {
+                final List<AtlasStructDef.AtlasAttributeDef> attributeDefs = ((AtlasStructDef) typeDef).getAttributeDefs();
+                for (AtlasStructDef.AtlasAttributeDef attrDef : attributeDefs) {
+                    if (AtlasDSL.Parser.isKeyword(attrDef.getName())) {
+                        throw new AtlasBaseException(AtlasErrorCode.ATTRIBUTE_NAME_INVALID, attrDef.getName(), typeDef.getCategory().name());
+                    }
+                }
+            }
+        } catch (AtlasException e) {
+            LOG.error("Exception while loading configuration ", e);
+            throw new AtlasBaseException(AtlasErrorCode.INTERNAL_ERROR, "Could not load configuration");
+        }
+    }
+
+    public boolean isValidName(String typeName) {
+        return NAME_PATTERN.matcher(typeName).matches() || INTERNAL_NAME_PATTERN.matcher(typeName).matches();
+    }
+
+    @Override
+    public void deleteByName(String name, AtlasVertex preDeleteResult) throws AtlasBaseException {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("==> AtlasAbstractDefStoreV1.deleteByName({}, {})", name, preDeleteResult);
+        }
+
+        AtlasVertex vertex = (preDeleteResult == null) ? preDeleteByName(name) : preDeleteResult;
+
+        typeDefStore.deleteTypeVertex(vertex);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("<== AtlasAbstractDefStoreV1.deleteByName({}, {})", name, preDeleteResult);
+        }
+    }
+
+    @Override
+    public void deleteByGuid(String guid, AtlasVertex preDeleteResult) throws AtlasBaseException {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("==> AtlasAbstractDefStoreV1.deleteByGuid({}, {})", guid, preDeleteResult);
+        }
+
+        AtlasVertex vertex = (preDeleteResult == null) ? preDeleteByGuid(guid) : preDeleteResult;
+
+        typeDefStore.deleteTypeVertex(vertex);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("<== AtlasAbstractDefStoreV1.deleteByGuid({}, {})", guid, preDeleteResult);
+        }
+    }
+}