This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 00b0eaa228a9baa1c56a9fda99f2a494f6828bb1
Author: Pinal Shah <[email protected]>
AuthorDate: Wed Aug 5 09:53:04 2020 +0530

    ATLAS-3876 : Relationship Search API not showing correct approximateCount
    
    Signed-off-by: nixonrodrigues <[email protected]>
    (cherry picked from commit aa441de4f62947b96f6ff387f4d140a2b83c99dc)
---
 .../org/apache/atlas/type/AtlasStructType.java     |   7 +-
 .../atlas/discovery/AtlasDiscoveryService.java     |   3 +-
 .../atlas/discovery/EntityDiscoveryService.java    | 156 ++++++-------
 .../apache/atlas/discovery/SearchProcessor.java    |   4 +-
 .../store/graph/v2/EntityGraphRetriever.java       |   4 +
 .../org/apache/atlas/util/SearchPredicateUtil.java | 254 +++++++++++----------
 .../org/apache/atlas/web/rest/DiscoveryREST.java   |   7 +-
 7 files changed, 218 insertions(+), 217 deletions(-)

diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java 
b/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
index 61ee458..b0d88fc 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
@@ -670,7 +670,7 @@ public class AtlasStructType extends AtlasType {
         throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_ATTRIBUTE, 
attrName, structDef.getName());
     }
 
-    AtlasEntityType getReferencedEntityType(AtlasType type) {
+    static AtlasEntityType getReferencedEntityType(AtlasType type) {
         if (type instanceof AtlasArrayType) {
             type = ((AtlasArrayType)type).getElementType();
         }
@@ -980,6 +980,11 @@ public class AtlasStructType extends AtlasType {
             return (relationshipLabel == null) ? getEdgeLabel(qualifiedName) : 
relationshipLabel;
         }
 
+        public AtlasEntityType getReferencedEntityType(AtlasTypeRegistry 
typeRegistry) throws AtlasBaseException {
+            AtlasType type = typeRegistry.getType(attributeDef.getTypeName());
+            return AtlasStructType.getReferencedEntityType(type);
+        }
+
         public static String getQualifiedAttributeName(AtlasStructDef 
structDef, String attrName) {
             if (isRootType(structDef)) {
                 return attrName;
diff --git 
a/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
 
b/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
index 8657259..4d97a08 100644
--- 
a/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
+++ 
b/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
@@ -87,11 +87,12 @@ public interface AtlasDiscoveryService {
      * @param sortByAttribute sort the result using this attribute name, 
default value is 'name'
      * @param sortOrder sorting order
      * @param excludeDeletedEntities exclude deleted entities in search result.
+     * @param getApproximateCount
      * @param limit number of resultant rows (for pagination). [ limit > 0 ] 
and [ limit < maxlimit ]. -1 maps to atlas.search.defaultlimit property.
      * @param offset offset to the results returned (for pagination). [ offset 
>= 0 ]. -1 maps to offset 0.
      * @return AtlasSearchResult
      */
-    AtlasSearchResult searchRelatedEntities(String guid, String relation, 
Set<String> attributes, String sortByAttribute, SortOrder sortOrder, boolean 
excludeDeletedEntities, int limit, int offset) throws AtlasBaseException;
+    AtlasSearchResult searchRelatedEntities(String guid, String relation, 
Set<String> attributes, String sortByAttribute, SortOrder sortOrder, boolean 
excludeDeletedEntities, boolean getApproximateCount, int limit, int offset) 
throws AtlasBaseException;
 
     /**
      *
diff --git 
a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
 
b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
index 8fe2754..37eef90 100644
--- 
a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
+++ 
b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
@@ -30,6 +30,7 @@ import org.apache.atlas.model.discovery.*;
 import org.apache.atlas.model.discovery.AtlasSearchResult.AtlasFullTextResult;
 import org.apache.atlas.model.discovery.AtlasSearchResult.AtlasQueryType;
 import 
org.apache.atlas.model.discovery.AtlasSearchResult.AttributeSearchResult;
+import org.apache.atlas.model.instance.AtlasEntity;
 import org.apache.atlas.model.instance.AtlasEntityHeader;
 import org.apache.atlas.model.instance.AtlasObjectId;
 import org.apache.atlas.model.profile.AtlasUserSavedSearch;
@@ -49,28 +50,33 @@ import 
org.apache.atlas.type.AtlasBuiltInTypes.AtlasObjectIdType;
 import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
 import org.apache.atlas.util.AtlasGremlinQueryProvider;
 import org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery;
+import org.apache.atlas.util.SearchPredicateUtil;
 import org.apache.atlas.util.SearchTracker;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import javax.inject.Inject;
-import javax.script.Bindings;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
 import java.util.*;
 
 import static org.apache.atlas.AtlasErrorCode.*;
 import static org.apache.atlas.SortOrder.ASCENDING;
-import static org.apache.atlas.SortOrder.DESCENDING;
 import static org.apache.atlas.model.instance.AtlasEntity.Status.ACTIVE;
 import static org.apache.atlas.model.instance.AtlasEntity.Status.DELETED;
 import static org.apache.atlas.repository.Constants.ASSET_ENTITY_TYPE;
 import static org.apache.atlas.repository.Constants.OWNER_ATTRIBUTE;
-import static 
org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery.*;
+import static 
org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery.BASIC_SEARCH_STATE_FILTER;
+import static 
org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery.TO_RANGE_LIST;
 
 @Component
 public class EntityDiscoveryService implements AtlasDiscoveryService {
@@ -562,13 +568,14 @@ public class EntityDiscoveryService implements 
AtlasDiscoveryService {
     @Override
     @GraphTransaction
     public AtlasSearchResult searchRelatedEntities(String guid, String 
relation, Set<String> attributes, String sortBy, SortOrder sortOrder,
-                                                   boolean 
excludeDeletedEntities, int limit, int offset) throws AtlasBaseException {
+                                                   boolean 
excludeDeletedEntities, boolean getApproximateCount, int limit, int offset) 
throws AtlasBaseException {
         AtlasSearchResult ret = new 
AtlasSearchResult(AtlasQueryType.RELATIONSHIP);
 
         if (StringUtils.isEmpty(guid) || StringUtils.isEmpty(relation)) {
             throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, 
"guid: '" + guid + "', relation: '" + relation + "'");
         }
 
+        //validate entity
         AtlasVertex     entityVertex   = entityRetriever.getEntityVertex(guid);
         String          entityTypeName = GraphHelper.getTypeName(entityVertex);
         AtlasEntityType entityType     = 
typeRegistry.getEntityTypeByName(entityTypeName);
@@ -577,130 +584,111 @@ public class EntityDiscoveryService implements 
AtlasDiscoveryService {
             throw new 
AtlasBaseException(AtlasErrorCode.INVALID_RELATIONSHIP_TYPE, entityTypeName, 
guid);
         }
 
-        AtlasAttribute attribute = entityType.getAttribute(relation);
+        //validate relation
+        AtlasEntityType endEntityType = null;
+        AtlasAttribute  attribute     = entityType.getAttribute(relation);
 
         if (attribute == null) {
             attribute = entityType.getRelationshipAttribute(relation, null);
         }
 
         if (attribute != null) {
-            if (attribute.isObjectRef()) {
+            endEntityType = attribute.getReferencedEntityType(typeRegistry);
+
+            if (endEntityType != null) {
                 relation = attribute.getRelationshipEdgeLabel();
             } else {
                 throw new 
AtlasBaseException(AtlasErrorCode.INVALID_RELATIONSHIP_ATTRIBUTE, relation, 
attribute.getTypeName());
             }
         }
 
+        //validate sortBy attribute
         String sortByAttributeName = DEFAULT_SORT_ATTRIBUTE_NAME;
 
         if (StringUtils.isNotEmpty(sortBy)) {
             sortByAttributeName = sortBy;
         }
 
-        //get entity type of relationship (End vertex entity type) from 
relationship label
-        Iterator<AtlasEdge> edges         = 
GraphHelper.getAdjacentEdgesByLabel(entityVertex, AtlasEdgeDirection.BOTH, 
relation);
-        AtlasEntityType     endEntityType = null;
-
-        if (edges != null && edges.hasNext()) {
-            AtlasEdge   relationEdge = edges.next();
-            AtlasVertex outVertex    = relationEdge.getOutVertex();
-            AtlasVertex inVertex     = relationEdge.getInVertex();
-            String      outVertexId  = outVertex != null ? 
outVertex.getIdForDisplay() : null;
-            AtlasVertex endVertex    = StringUtils.equals(outVertexId, 
entityVertex.getIdForDisplay()) ? inVertex : outVertex;
-            String      endTypeName  = GraphHelper.getTypeName(endVertex);
-
-            endEntityType = typeRegistry.getEntityTypeByName(endTypeName);
-        }
-
-        if (endEntityType == null) {
-            ret.setEntities(new ArrayList<>());
-
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Invalid relation : {} ", relation);
-            }
-
-            return ret;
-        }
-
-        AtlasAttribute sortByAttribute = 
endEntityType.getAttribute(sortByAttributeName);
+        if (endEntityType != null) {
+            AtlasAttribute sortByAttribute = 
endEntityType.getAttribute(sortByAttributeName);
 
-        if (sortByAttribute == null) {
-            sortByAttributeName = null;
-            sortOrder           = null;
+            if (sortByAttribute == null) {
+                sortByAttributeName = null;
+                sortOrder           = null;
 
-            if (LOG.isDebugEnabled()) {
                 if (StringUtils.isNotEmpty(sortBy)) {
-                    LOG.debug("Invalid sortBy Attribute {} for entityType {}, 
Ignoring Sorting", sortBy, endEntityType.getTypeName());
+                    LOG.info("Invalid sortBy Attribute {} for entityType {}, 
Ignoring Sorting", sortBy, endEntityType.getTypeName());
                 } else {
-                    LOG.debug("Invalid Default sortBy Attribute {} for 
entityType {}, Ignoring Sorting", DEFAULT_SORT_ATTRIBUTE_NAME, 
endEntityType.getTypeName());
+                    LOG.info("Invalid Default sortBy Attribute {} for 
entityType {}, Ignoring Sorting", DEFAULT_SORT_ATTRIBUTE_NAME, 
endEntityType.getTypeName());
+                }
+
+            } else {
+                sortByAttributeName = sortByAttribute.getVertexPropertyName();
+
+                if (sortOrder == null) {
+                    sortOrder = ASCENDING;
                 }
             }
         } else {
-            sortByAttributeName = sortByAttribute.getVertexPropertyName();
+            sortOrder = null;
 
-            if (sortOrder == null) {
-                sortOrder = ASCENDING;
+            if (StringUtils.isNotEmpty(sortBy)) {
+                LOG.info("Invalid sortBy Attribute {}, Ignoring Sorting", 
sortBy);
             }
         }
 
-        QueryParams  params               = 
QueryParams.getNormalizedParams(limit, offset);
-        ScriptEngine scriptEngine         = graph.getGremlinScriptEngine();
-        Bindings     bindings             = scriptEngine.createBindings();
-        Set<String>  states               = getEntityStates();
-        String       relatedEntitiesQuery = 
gremlinQueryProvider.getQuery(RELATIONSHIP_SEARCH);
+        //get relationship(end vertices) vertices
+        GraphTraversal gt = 
graph.V(entityVertex.getId()).bothE(relation).otherV();
 
         if (excludeDeletedEntities) {
-            states.remove(DELETED.toString());
+            gt.has(Constants.STATE_PROPERTY_KEY, 
AtlasEntity.Status.ACTIVE.name());
         }
 
-        if (sortOrder == ASCENDING) {
-            relatedEntitiesQuery += 
gremlinQueryProvider.getQuery(RELATIONSHIP_SEARCH_ASCENDING_SORT);
-            bindings.put(SORT_ATTRIBUTE_NAME, sortByAttributeName);
+        if (sortOrder != null) {
+            if (sortOrder == ASCENDING) {
+                gt.order().by(sortByAttributeName, Order.asc);
+            } else {
+                gt.order().by(sortByAttributeName, Order.desc);
+            }
+        }
+
+         gt.range(offset, offset + limit);
 
-        } else if (sortOrder == DESCENDING) {
-            relatedEntitiesQuery += 
gremlinQueryProvider.getQuery(RELATIONSHIP_SEARCH_DESCENDING_SORT);
-            bindings.put(SORT_ATTRIBUTE_NAME, sortByAttributeName);
+        List<AtlasEntityHeader> resultList = new ArrayList<>();
+        while (gt.hasNext()) {
+            Vertex v = (Vertex) gt.next();
+
+            if (v != null && 
v.property(Constants.GUID_PROPERTY_KEY).isPresent()) {
+                String endVertexGuid = 
v.property(Constants.GUID_PROPERTY_KEY).value().toString();
+                
resultList.add(entityRetriever.toAtlasEntityHeader(endVertexGuid, attributes));
+            }
         }
 
-        relatedEntitiesQuery += gremlinQueryProvider.getQuery(TO_RANGE_LIST);
+        ret.setEntities(resultList);
 
-        bindings.put("g", graph);
-        bindings.put("guid", guid);
-        bindings.put("relation", relation);
-        bindings.put("states", Collections.unmodifiableSet(states));
-        bindings.put("startIdx", params.offset());
-        bindings.put("endIdx", params.offset() + params.limit());
+        if (ret.getEntities() == null) {
+            ret.setEntities(new ArrayList<>());
+        }
 
-        try {
-            Object result = graph.executeGremlinScript(scriptEngine, bindings, 
relatedEntitiesQuery, false);
+        //set approximate count
+        //state of the edge and endVertex will be same
+        if (getApproximateCount) {
+            Iterator<AtlasEdge> edges = 
GraphHelper.getAdjacentEdgesByLabel(entityVertex, AtlasEdgeDirection.BOTH, 
relation);
 
-            if (result instanceof List && CollectionUtils.isNotEmpty((List) 
result)) {
-                List<?> queryResult  = (List) result;
-                Object  firstElement = queryResult.get(0);
+            if (excludeDeletedEntities) {
+                List<AtlasEdge> edgeList = new ArrayList<>();
+                edges.forEachRemaining(edgeList::add);
 
-                if (firstElement instanceof AtlasVertex) {
-                    List<AtlasVertex>       vertices   = (List<AtlasVertex>) 
queryResult;
-                    List<AtlasEntityHeader> resultList = new 
ArrayList<>(vertices.size());
+                Predicate activePredicate = 
SearchPredicateUtil.getEQPredicateGenerator().generatePredicate
+                        (Constants.STATE_PROPERTY_KEY, 
AtlasEntity.Status.ACTIVE.name(), String.class);
 
-                    for (AtlasVertex vertex : vertices) {
-                        
resultList.add(entityRetriever.toAtlasEntityHeader(vertex, attributes));
-                    }
+                CollectionUtils.filter(edgeList, activePredicate);
+                ret.setApproximateCount(edgeList.size());
 
-                    ret.setEntities(resultList);
-                }
-            }
+            } else {
+                ret.setApproximateCount(IteratorUtils.size(edges));
 
-            if (ret.getEntities() == null) {
-                ret.setEntities(new ArrayList<>());
             }
-        } catch (ScriptException e) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Gremlin script execution failed for relationship 
search query: {}", relatedEntitiesQuery, e);
-            }
-
-            throw new AtlasBaseException(AtlasErrorCode.INTERNAL_ERROR, 
"Relationship search query failed");
-        } finally {
-            graph.releaseGremlinScriptEngine(scriptEngine);
         }
 
         scrubSearchResults(ret);
diff --git 
a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java 
b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
index ad48be1..981ba6a 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
@@ -83,7 +83,7 @@ public abstract class SearchProcessor {
     public static final String  CUSTOM_ATTR_SEARCH_FORMAT  = 
"\"\\\"%s\\\":\\\"%s\\\"\"";
     public static final String  CUSTOM_ATTR_SEARCH_FORMAT_GRAPH = 
"\"%s\":\"%s\"";
     private static final Map<SearchParameters.Operator, String>                
            OPERATOR_MAP           = new HashMap<>();
-    private static final Map<SearchParameters.Operator, 
VertexAttributePredicateGenerator> OPERATOR_PREDICATE_MAP = new HashMap<>();
+    private static final Map<SearchParameters.Operator, 
ElementAttributePredicateGenerator> OPERATOR_PREDICATE_MAP = new HashMap<>();
 
     static
     {
@@ -632,7 +632,7 @@ public abstract class SearchProcessor {
         Predicate ret = null;
 
         AtlasAttribute                    attribute = 
type.getAttribute(attrName);
-        VertexAttributePredicateGenerator predicate = 
OPERATOR_PREDICATE_MAP.get(op);
+        ElementAttributePredicateGenerator predicate = 
OPERATOR_PREDICATE_MAP.get(op);
 
         if (attribute != null && predicate != null) {
             final AtlasType attrType = attribute.getAttributeType();
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
index 863a003..00146b1 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
@@ -201,6 +201,10 @@ public class EntityGraphRetriever {
         return toAtlasEntityHeader(getEntityVertex(guid));
     }
 
+    public AtlasEntityHeader toAtlasEntityHeader(String guid, Set<String> 
attributes) throws AtlasBaseException {
+        return toAtlasEntityHeader(getEntityVertex(guid), attributes);
+    }
+
     public AtlasEntityHeader toAtlasEntityHeader(AtlasVertex entityVertex) 
throws AtlasBaseException {
         return toAtlasEntityHeader(entityVertex, 
Collections.<String>emptySet());
     }
diff --git 
a/repository/src/main/java/org/apache/atlas/util/SearchPredicateUtil.java 
b/repository/src/main/java/org/apache/atlas/util/SearchPredicateUtil.java
index 5069d78..cf158cd 100644
--- a/repository/src/main/java/org/apache/atlas/util/SearchPredicateUtil.java
+++ b/repository/src/main/java/org/apache/atlas/util/SearchPredicateUtil.java
@@ -17,6 +17,8 @@
  */
 package org.apache.atlas.util;
 
+import org.apache.atlas.repository.graphdb.AtlasEdge;
+import org.apache.atlas.repository.graphdb.AtlasElement;
 import org.apache.atlas.repository.graphdb.AtlasVertex;
 import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
 import org.apache.atlas.type.AtlasEntityType;
@@ -43,12 +45,12 @@ public class SearchPredicateUtil {
         }
     };
 
-    public static VertexAttributePredicateGenerator getLTPredicateGenerator() {
+    public static ElementAttributePredicateGenerator getLTPredicateGenerator() 
{
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getLTPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -88,12 +90,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getGTPredicateGenerator() {
+    public static ElementAttributePredicateGenerator getGTPredicateGenerator() 
{
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getGTPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -132,12 +134,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getLTEPredicateGenerator() 
{
+    public static ElementAttributePredicateGenerator 
getLTEPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getLTEPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -177,12 +179,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getGTEPredicateGenerator() 
{
+    public static ElementAttributePredicateGenerator 
getGTEPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getGTEPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -222,12 +224,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getEQPredicateGenerator() {
+    public static ElementAttributePredicateGenerator getEQPredicateGenerator() 
{
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getEQPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -269,12 +271,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getNEQPredicateGenerator() 
{
+    public static ElementAttributePredicateGenerator 
getNEQPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getNEQPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -316,12 +318,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getContainsAnyPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getContainsAnyPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getContainsAnyPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -329,7 +331,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null || attrVal == null 
|| !isValid(attrVal, attrClass)) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass) {
+                    ret = new ElementAttributePredicate(attrName, attrClass) {
                         @Override
                         public boolean compareValue(final Object 
vertexAttrVal) {
                             return CollectionUtils.containsAny((Collection) 
attrVal, (Collection) vertexAttrVal);
@@ -351,12 +353,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getContainsAllPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getContainsAllPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getContainsAllPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -364,7 +366,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null || attrVal == null 
|| !isValid(attrVal, attrClass)) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass) {
+                    ret = new ElementAttributePredicate(attrName, attrClass) {
                         @Override
                         public boolean compareValue(final Object 
vertexAttrVal) {
                             return ((Collection) 
attrVal).containsAll((Collection) vertexAttrVal);
@@ -386,12 +388,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator getINPredicateGenerator() {
+    public static ElementAttributePredicateGenerator getINPredicateGenerator() 
{
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getINPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -399,7 +401,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null || attrVal == null 
|| !isValid(attrVal, attrClass)) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass) {
+                    ret = new ElementAttributePredicate(attrName, attrClass) {
                         @Override
                         public boolean compareValue(final Object 
vertexAttrVal) {
                             return 
((Collection)attrVal).contains(vertexAttrVal);
@@ -422,12 +424,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getRegexPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getRegexPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getRegexPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -451,12 +453,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getLIKEPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getLIKEPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getLIKEPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -480,12 +482,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getStartsWithPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getStartsWithPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getStartsWithPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -509,12 +511,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getEndsWithPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getEndsWithPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getEndsWithPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -538,12 +540,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getContainsPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getContainsPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getContainsPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -554,7 +556,7 @@ public class SearchPredicateUtil {
                     ret = StringPredicate.getContainsPredicate(attrName, 
attrClass, (String)attrVal);
                 } else if (Collection.class.isAssignableFrom(attrClass)) {
                     // Check if the provided value is present in the list of 
stored values
-                    ret = new VertexAttributePredicate(attrName, attrClass) {
+                    ret = new ElementAttributePredicate(attrName, attrClass) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             return ((Collection) 
vertexAttrVal).contains(attrVal);
@@ -575,12 +577,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getNotContainsPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getNotContainsPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getNotContainsPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -591,7 +593,7 @@ public class SearchPredicateUtil {
                     ret = StringPredicate.getNotContainsPredicate(attrName, 
attrClass, (String) attrVal);
                 } else if (Collection.class.isAssignableFrom(attrClass)) {
                     // Check if the provided value is present in the list of 
stored values
-                    ret = new VertexAttributePredicate(attrName, 
attrClass,true) {
+                    ret = new ElementAttributePredicate(attrName, 
attrClass,true) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             return vertexAttrVal == null || !((Collection) 
vertexAttrVal).contains(attrVal);
@@ -612,12 +614,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getIsNullPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getIsNullPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getIsNullPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -625,7 +627,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass, 
true) {
+                    ret = new ElementAttributePredicate(attrName, attrClass, 
true) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             return vertexAttrVal == null;
@@ -644,12 +646,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getNotNullPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getNotNullPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getNotNullPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -657,7 +659,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass, 
true) {
+                    ret = new ElementAttributePredicate(attrName, attrClass, 
true) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             return vertexAttrVal != null;
@@ -676,12 +678,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getNotEmptyPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getNotEmptyPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getNotEmptyPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -689,7 +691,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass, 
true) {
+                    ret = new ElementAttributePredicate(attrName, attrClass, 
true) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             boolean ret = false;
@@ -720,12 +722,12 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public static VertexAttributePredicateGenerator 
getIsNullOrEmptyPredicateGenerator() {
+    public static ElementAttributePredicateGenerator 
getIsNullOrEmptyPredicateGenerator() {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> getIsNullOrEmptyPredicateGenerator");
         }
 
-        VertexAttributePredicateGenerator ret = new 
VertexAttributePredicateGenerator() {
+        ElementAttributePredicateGenerator ret = new 
ElementAttributePredicateGenerator() {
             @Override
             public Predicate generatePredicate(final String attrName, final 
Object attrVal, final Class attrClass) {
                 final Predicate ret;
@@ -733,7 +735,7 @@ public class SearchPredicateUtil {
                 if (attrName == null || attrClass == null) {
                     ret = ALWAYS_FALSE;
                 } else {
-                    ret = new VertexAttributePredicate(attrName, attrClass, 
true) {
+                    ret = new ElementAttributePredicate(attrName, attrClass, 
true) {
                         @Override
                         protected boolean compareValue(final Object 
vertexAttrVal) {
                             final boolean ret;
@@ -764,20 +766,20 @@ public class SearchPredicateUtil {
         return ret;
     }
 
-    public interface VertexAttributePredicateGenerator {
+    public interface ElementAttributePredicateGenerator {
         Predicate generatePredicate(String attrName, Object attrVal, Class 
attrClass);
     }
 
-    static abstract class VertexAttributePredicate implements Predicate {
+    static abstract class ElementAttributePredicate implements Predicate {
         final String  attrName;
         final Class   attrClass;
         final boolean isNullValid;
 
-        VertexAttributePredicate(String attrName, Class attrClass) {
+        ElementAttributePredicate(String attrName, Class attrClass) {
             this(attrName, attrClass, false);
         }
 
-        VertexAttributePredicate(String attrName, Class attrClass, boolean 
isNullValid) {
+        ElementAttributePredicate(String attrName, Class attrClass, boolean 
isNullValid) {
             this.attrName  = attrName;
             this.attrClass = attrClass;
             this.isNullValid = isNullValid;
@@ -787,14 +789,14 @@ public class SearchPredicateUtil {
         public boolean evaluate(final Object object) {
             final boolean ret;
 
-            AtlasVertex vertex = (object instanceof AtlasVertex) ? 
(AtlasVertex)object : null;
+            AtlasElement element = (object instanceof AtlasVertex || object 
instanceof AtlasEdge) ? (AtlasElement) object : null;
 
-            if (vertex != null) {
+            if (element != null) {
                 Object attrValue;
                 if (Collection.class.isAssignableFrom(attrClass)) {
-                    attrValue = vertex.getPropertyValues(attrName, attrClass);
+                    attrValue = element.getPropertyValues(attrName, attrClass);
                 } else {
-                    attrValue = AtlasGraphUtilsV2.getProperty(vertex, 
attrName, attrClass);
+                    attrValue = AtlasGraphUtilsV2.getProperty(element, 
attrName, attrClass);
                 }
 
                 ret = (isNullValid || attrValue != null) && 
compareValue(attrValue);
@@ -808,7 +810,7 @@ public class SearchPredicateUtil {
         protected abstract boolean compareValue(Object vertexAttrVal);
     }
 
-    static abstract class BooleanPredicate extends VertexAttributePredicate {
+    static abstract class BooleanPredicate extends ElementAttributePredicate {
         final Boolean value;
 
         BooleanPredicate(String attrName, Class attrClass, Boolean value) {
@@ -822,7 +824,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Boolean value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Boolean value) {
             return new SearchPredicateUtil.BooleanPredicate(attrName, 
attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Boolean) vertexAttrVal).compareTo(value) == 0;
@@ -830,7 +832,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Boolean value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Boolean value) {
             return new SearchPredicateUtil.BooleanPredicate(attrName, 
attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Boolean) 
vertexAttrVal).compareTo(value) != 0;
@@ -839,7 +841,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class ShortPredicate extends VertexAttributePredicate {
+    static abstract class ShortPredicate extends ElementAttributePredicate {
         final Short value;
 
         ShortPredicate(String attrName, Class attrClass, Short value) {
@@ -853,7 +855,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Short) vertexAttrVal).compareTo(value) == 0;
@@ -861,7 +863,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Short) 
vertexAttrVal).compareTo(value) != 0;
@@ -869,7 +871,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Short) vertexAttrVal).compareTo(value) < 0;
@@ -877,7 +879,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Short) vertexAttrVal).compareTo(value) <= 0;
@@ -885,7 +887,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Short) vertexAttrVal).compareTo(value) > 0;
@@ -893,7 +895,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Short value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Short value) {
             return new ShortPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Short) vertexAttrVal).compareTo(value) >= 0;
@@ -902,7 +904,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class IntegerPredicate extends VertexAttributePredicate {
+    static abstract class IntegerPredicate extends ElementAttributePredicate {
         final Integer value;
 
         IntegerPredicate(String attrName, Class attrClass, Integer value) {
@@ -916,7 +918,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Integer) vertexAttrVal).compareTo(value) == 0;
@@ -924,7 +926,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Integer) 
vertexAttrVal).compareTo(value) != 0;
@@ -932,7 +934,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Integer) vertexAttrVal).compareTo(value) < 0;
@@ -940,7 +942,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Integer) vertexAttrVal).compareTo(value) <= 0;
@@ -948,7 +950,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Integer) vertexAttrVal).compareTo(value) > 0;
@@ -956,7 +958,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Integer value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Integer value) {
             return new IntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Integer) vertexAttrVal).compareTo(value) >= 0;
@@ -965,7 +967,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class LongPredicate extends VertexAttributePredicate {
+    static abstract class LongPredicate extends ElementAttributePredicate {
         final Long value;
 
         LongPredicate(String attrName, Class attrClass, Long value) {
@@ -979,7 +981,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Long) vertexAttrVal).compareTo(value) == 0;
@@ -987,7 +989,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Long) 
vertexAttrVal).compareTo(value) != 0;
@@ -995,7 +997,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Long) vertexAttrVal).compareTo(value) < 0;
@@ -1003,7 +1005,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Long) vertexAttrVal).compareTo(value) <= 0;
@@ -1011,7 +1013,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Long) vertexAttrVal).compareTo(value) > 0;
@@ -1019,7 +1021,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Long value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Long value) {
             return new LongPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Long) vertexAttrVal).compareTo(value) >= 0;
@@ -1028,7 +1030,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class FloatPredicate extends VertexAttributePredicate {
+    static abstract class FloatPredicate extends ElementAttributePredicate {
         final Float value;
 
         FloatPredicate(String attrName, Class attrClass, Float value) {
@@ -1042,7 +1044,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Float) vertexAttrVal).compareTo(value) == 0;
@@ -1050,7 +1052,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Float) 
vertexAttrVal).compareTo(value) != 0;
@@ -1058,7 +1060,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Float) vertexAttrVal).compareTo(value) < 0;
@@ -1066,7 +1068,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Float) vertexAttrVal).compareTo(value) <= 0;
@@ -1074,7 +1076,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Float) vertexAttrVal).compareTo(value) > 0;
@@ -1082,7 +1084,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Float value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Float value) {
             return new FloatPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Float) vertexAttrVal).compareTo(value) >= 0;
@@ -1091,7 +1093,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class DoublePredicate extends VertexAttributePredicate {
+    static abstract class DoublePredicate extends ElementAttributePredicate {
         final Double value;
 
         DoublePredicate(String attrName, Class attrClass, Double value) {
@@ -1105,7 +1107,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Double) vertexAttrVal).compareTo(value) == 0;
@@ -1113,7 +1115,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Double) 
vertexAttrVal).compareTo(value) != 0;
@@ -1121,7 +1123,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Double) vertexAttrVal).compareTo(value) < 0;
@@ -1129,7 +1131,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Double) vertexAttrVal).compareTo(value) <= 0;
@@ -1137,7 +1139,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Double) vertexAttrVal).compareTo(value) > 0;
@@ -1145,7 +1147,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Double value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Double value) {
             return new DoublePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Double) vertexAttrVal).compareTo(value) >= 0;
@@ -1154,7 +1156,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class BytePredicate extends VertexAttributePredicate {
+    static abstract class BytePredicate extends ElementAttributePredicate {
         final Byte value;
 
         BytePredicate(String attrName, Class attrClass, Byte value) {
@@ -1168,7 +1170,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Byte) vertexAttrVal).compareTo(value) == 0;
@@ -1176,7 +1178,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((Byte) 
vertexAttrVal).compareTo(value) != 0;
@@ -1184,7 +1186,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Byte) vertexAttrVal).compareTo(value) < 0;
@@ -1192,7 +1194,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Byte) vertexAttrVal).compareTo(value) <= 0;
@@ -1200,7 +1202,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Byte) vertexAttrVal).compareTo(value) > 0;
@@ -1208,7 +1210,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, Byte value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, Byte value) {
             return new BytePredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((Byte) vertexAttrVal).compareTo(value) >= 0;
@@ -1217,7 +1219,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class BigIntegerPredicate extends VertexAttributePredicate 
{
+    static abstract class BigIntegerPredicate extends 
ElementAttributePredicate {
         final BigInteger value;
 
         BigIntegerPredicate(String attrName, Class attrClass, BigInteger 
value) {
@@ -1231,7 +1233,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigInteger) vertexAttrVal).compareTo(value) == 0;
@@ -1239,7 +1241,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((BigInteger) 
vertexAttrVal).compareTo(value) != 0;
@@ -1247,7 +1249,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigInteger) vertexAttrVal).compareTo(value) < 0;
@@ -1255,7 +1257,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigInteger) vertexAttrVal).compareTo(value) <= 0;
@@ -1263,7 +1265,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigInteger) vertexAttrVal).compareTo(value) > 0;
@@ -1271,7 +1273,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, BigInteger value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, BigInteger value) {
             return new BigIntegerPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigInteger) vertexAttrVal).compareTo(value) >= 0;
@@ -1280,7 +1282,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class BigDecimalPredicate extends VertexAttributePredicate 
{
+    static abstract class BigDecimalPredicate extends 
ElementAttributePredicate {
         final BigDecimal value;
 
         BigDecimalPredicate(String attrName, Class attrClass, BigDecimal 
value) {
@@ -1294,7 +1296,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigDecimal) vertexAttrVal).compareTo(value) == 0;
@@ -1302,7 +1304,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((BigDecimal) 
vertexAttrVal).compareTo(value) != 0;
@@ -1310,7 +1312,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigDecimal) vertexAttrVal).compareTo(value) < 0;
@@ -1318,7 +1320,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigDecimal) vertexAttrVal).compareTo(value) <= 0;
@@ -1326,7 +1328,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigDecimal) vertexAttrVal).compareTo(value) > 0;
@@ -1334,7 +1336,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, BigDecimal value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, BigDecimal value) {
             return new BigDecimalPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((BigDecimal) vertexAttrVal).compareTo(value) >= 0;
@@ -1343,7 +1345,7 @@ public class SearchPredicateUtil {
         }
     }
 
-    static abstract class StringPredicate extends VertexAttributePredicate {
+    static abstract class StringPredicate extends ElementAttributePredicate {
         final String value;
 
         StringPredicate(String attrName, Class attrClass, String value) {
@@ -1357,7 +1359,7 @@ public class SearchPredicateUtil {
             this.value = value;
         }
 
-        static VertexAttributePredicate getEQPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getEQPredicate(String attrName, Class 
attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).compareTo(value) == 0;
@@ -1365,7 +1367,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNEQPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getNEQPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || ((String) 
vertexAttrVal).compareTo(value) != 0;
@@ -1373,7 +1375,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getLTPredicate(String attrName, Class 
attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).compareTo(value) < 0;
@@ -1381,7 +1383,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getLTEPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getLTEPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).compareTo(value) <= 0;
@@ -1389,7 +1391,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getGTPredicate(String attrName, Class 
attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).compareTo(value) > 0;
@@ -1397,7 +1399,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getGTEPredicate(String attrName, Class 
attrClass, String value) {
+        static ElementAttributePredicate getGTEPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).compareTo(value) >= 0;
@@ -1405,7 +1407,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getContainsPredicate(String attrName, 
Class attrClass, String value) {
+        static ElementAttributePredicate getContainsPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).contains(value);
@@ -1413,7 +1415,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getNotContainsPredicate(String 
attrName, Class attrClass, String value) {
+        static ElementAttributePredicate getNotContainsPredicate(String 
attrName, Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value, true) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return vertexAttrVal == null || !((String) 
vertexAttrVal).contains(value);
@@ -1421,7 +1423,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getStartsWithPredicate(String 
attrName, Class attrClass, String value) {
+        static ElementAttributePredicate getStartsWithPredicate(String 
attrName, Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).startsWith(value);
@@ -1429,7 +1431,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getEndsWithPredicate(String attrName, 
Class attrClass, String value) {
+        static ElementAttributePredicate getEndsWithPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     return ((String) vertexAttrVal).endsWith(value);
@@ -1437,7 +1439,7 @@ public class SearchPredicateUtil {
             };
         }
 
-        static VertexAttributePredicate getRegexPredicate(String attrName, 
Class attrClass, String value) {
+        static ElementAttributePredicate getRegexPredicate(String attrName, 
Class attrClass, String value) {
             return new StringPredicate(attrName, attrClass, value) {
                 protected boolean compareValue(Object vertexAttrVal) {
                     Pattern pattern = Pattern.compile(value, 
Pattern.CASE_INSENSITIVE);
diff --git a/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java 
b/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
index 140ed9a..3a45e1c 100644
--- a/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
+++ b/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
@@ -363,6 +363,7 @@ public class DiscoveryREST {
                                                    @QueryParam("sortBy")       
          String      sortByAttribute,
                                                    @QueryParam("sortOrder")    
          SortOrder   sortOrder,
                                                    
@QueryParam("excludeDeletedEntities") boolean     excludeDeletedEntities,
+                                                   
@QueryParam("getApproximateCount")    boolean     getApproximateCount,
                                                    @QueryParam("limit")        
          int         limit,
                                                    @QueryParam("offset")       
          int         offset) throws AtlasBaseException {
         Servlets.validateQueryParamLength("guid", guid);
@@ -373,11 +374,11 @@ public class DiscoveryREST {
 
         try {
             if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
-                perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, 
"DiscoveryREST.relatedEntitiesSearchUsingGremlin(" + guid +
-                        ", " + relation + ", " + sortByAttribute + ", " + 
sortOrder + ", " + excludeDeletedEntities + ", " + ", " + limit + ", " + offset 
+ ")");
+                perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, 
"DiscoveryREST.relatedEntitiesSearch(" + guid +
+                        ", " + relation + ", " + sortByAttribute + ", " + 
sortOrder + ", " + excludeDeletedEntities + ", " + getApproximateCount + ", " + 
limit + ", " + offset + ")");
             }
 
-            return discoveryService.searchRelatedEntities(guid, relation, 
attributes, sortByAttribute, sortOrder, excludeDeletedEntities, limit, offset);
+            return discoveryService.searchRelatedEntities(guid, relation, 
attributes, sortByAttribute, sortOrder, excludeDeletedEntities, 
getApproximateCount, limit, offset);
         } finally {
             AtlasPerfTracer.log(perf);
         }

Reply via email to