Repository: atlas Updated Branches: refs/heads/branch-0.8 77a94d2e6 -> 9a8d31b8e
ATLAS-2620: updated entity-lookup REST API to use basic-search implementation (cherry picked from commit 3f7c5811faa9c9c9b61f9e6760904aeafb221224) Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/9a8d31b8 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/9a8d31b8 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/9a8d31b8 Branch: refs/heads/branch-0.8 Commit: 9a8d31b8ef0b7c1b71dcb9b69aef249b55aedcd8 Parents: 77a94d2 Author: Madhan Neethiraj <mad...@apache.org> Authored: Thu Apr 26 16:19:47 2018 -0700 Committer: Madhan Neethiraj <mad...@apache.org> Committed: Thu Apr 26 18:24:56 2018 -0700 ---------------------------------------------------------------------- .../apache/atlas/web/rest/DiscoveryREST.java | 51 ++++++++++++++++++-- 1 file changed, 46 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/9a8d31b8/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java ---------------------------------------------------------------------- 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 ee68d63..1989230 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 @@ -17,14 +17,19 @@ */ package org.apache.atlas.web.rest; +import org.apache.atlas.AtlasClient; import org.apache.atlas.AtlasErrorCode; import org.apache.atlas.SortOrder; import org.apache.atlas.discovery.AtlasDiscoveryService; import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.model.discovery.AtlasSearchResult; import org.apache.atlas.model.discovery.SearchParameters; +import org.apache.atlas.model.discovery.SearchParameters.FilterCriteria; import org.apache.atlas.model.profile.AtlasUserSavedSearch; import org.apache.atlas.repository.Constants; +import org.apache.atlas.type.AtlasEntityType; +import org.apache.atlas.type.AtlasStructType; +import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.utils.AtlasPerfTracer; import org.apache.atlas.web.util.Servlets; import org.apache.commons.collections.CollectionUtils; @@ -63,13 +68,15 @@ public class DiscoveryREST { private final int maxFullTextQueryLength; private final int maxDslQueryLength; + private final AtlasTypeRegistry typeRegistry; private final AtlasDiscoveryService atlasDiscoveryService; @Inject - public DiscoveryREST(AtlasDiscoveryService atlasDiscoveryService, Configuration configuration) { - this.atlasDiscoveryService = atlasDiscoveryService; - maxFullTextQueryLength = configuration.getInt(Constants.MAX_FULLTEXT_QUERY_STR_LENGTH, 4096); - maxDslQueryLength = configuration.getInt(Constants.MAX_DSL_QUERY_STR_LENGTH, 4096); + public DiscoveryREST(AtlasTypeRegistry typeRegistry, AtlasDiscoveryService atlasDiscoveryService, Configuration configuration) { + this.typeRegistry = typeRegistry; + this.atlasDiscoveryService = atlasDiscoveryService; + this.maxFullTextQueryLength = configuration.getInt(Constants.MAX_FULLTEXT_QUERY_STR_LENGTH, 4096); + this.maxDslQueryLength = configuration.getInt(Constants.MAX_DSL_QUERY_STR_LENGTH, 4096); } /** @@ -251,7 +258,41 @@ public class DiscoveryREST { String.format("attrName : %s, attrValue: %s for attribute search.", attrName, attrValuePrefix)); } - return atlasDiscoveryService.searchUsingBasicQuery(null, typeName, null, attrName, attrValuePrefix, true, limit, offset); + if (StringUtils.isEmpty(attrName)) { + AtlasEntityType entityType = typeRegistry.getEntityTypeByName(typeName); + + if (entityType != null) { + String[] defaultAttrNames = new String[] { AtlasClient.QUALIFIED_NAME, AtlasClient.NAME }; + + for (String defaultAttrName : defaultAttrNames) { + AtlasStructType.AtlasAttribute attribute = entityType.getAttribute(defaultAttrName); + + if (attribute != null) { + attrName = defaultAttrName; + + break; + } + } + } + + if (StringUtils.isEmpty(attrName)) { + attrName = AtlasClient.QUALIFIED_NAME; + } + } + + SearchParameters searchParams = new SearchParameters(); + FilterCriteria attrFilter = new FilterCriteria(); + + attrFilter.setAttributeName(StringUtils.isEmpty(attrName) ? AtlasClient.QUALIFIED_NAME : attrName); + attrFilter.setOperator(SearchParameters.Operator.STARTS_WITH); + attrFilter.setAttributeValue(attrValuePrefix); + + searchParams.setTypeName(typeName); + searchParams.setEntityFilters(attrFilter); + searchParams.setOffset(offset); + searchParams.setLimit(limit); + + return searchWithParameters(searchParams); } finally { AtlasPerfTracer.log(perf); }