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); }
