This is an automated email from the ASF dual-hosted git repository. pinal pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push: new 98b43fc ATLAS-4422 : Quick Search: Provide sorting 98b43fc is described below commit 98b43fc9d70afce4cd226bd1e3439ee7a76a3467 Author: Pinal Shah <pinal.s...@freestoneinfotech.com> AuthorDate: Mon Sep 13 23:51:50 2021 +0530 ATLAS-4422 : Quick Search: Provide sorting Signed-off-by: Pinal Shah <pinal.s...@freestoneinfotech.com> --- .../model/discovery/QuickSearchParameters.java | 25 +++++++++++++- .../atlas/discovery/EntityDiscoveryService.java | 2 ++ .../atlas/discovery/AtlasDiscoveryServiceTest.java | 38 ++++++++++++++++++++++ .../org/apache/atlas/web/rest/DiscoveryREST.java | 21 ++++++++---- 4 files changed, 79 insertions(+), 7 deletions(-) diff --git a/intg/src/main/java/org/apache/atlas/model/discovery/QuickSearchParameters.java b/intg/src/main/java/org/apache/atlas/model/discovery/QuickSearchParameters.java index 9e5e977..79f5aae 100644 --- a/intg/src/main/java/org/apache/atlas/model/discovery/QuickSearchParameters.java +++ b/intg/src/main/java/org/apache/atlas/model/discovery/QuickSearchParameters.java @@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.apache.atlas.SortOrder; import org.apache.atlas.model.discovery.SearchParameters.FilterCriteria; import java.io.Serializable; @@ -47,6 +48,8 @@ public class QuickSearchParameters implements Serializable { private int offset; private int limit; private Set<String> attributes; + private String sortBy; + private SortOrder sortOrder; /** * for framework use. @@ -61,7 +64,9 @@ public class QuickSearchParameters implements Serializable { boolean excludeDeletedEntities, int offset, int limit, - Set<String> attributes) { + Set<String> attributes, + String sortBy, + SortOrder sortOrder) { this.query = query; this.typeName = typeName; this.entityFilters = entityFilters; @@ -70,6 +75,8 @@ public class QuickSearchParameters implements Serializable { this.offset = offset; this.limit = limit; this.attributes = attributes; + this.sortBy = sortBy; + this.sortOrder = sortOrder; } public String getQuery() { @@ -135,4 +142,20 @@ public class QuickSearchParameters implements Serializable { public void setAttributes(Set<String> attributes) { this.attributes = attributes; } + + public String getSortBy() { + return sortBy; + } + + public void setSortBy(String sortBy) { + this.sortBy = sortBy; + } + + public SortOrder getSortOrder() { + return sortOrder; + } + + public void setSortOrder(SortOrder sortOrder) { + this.sortOrder = sortOrder; + } } 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 5b3b948..8fbc22f 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java +++ b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java @@ -920,6 +920,8 @@ public class EntityDiscoveryService implements AtlasDiscoveryService { searchParameters.setOffset(quickSearchParameters.getOffset()); searchParameters.setEntityFilters(quickSearchParameters.getEntityFilters()); searchParameters.setAttributes(quickSearchParameters.getAttributes()); + searchParameters.setSortBy(quickSearchParameters.getSortBy()); + searchParameters.setSortOrder(quickSearchParameters.getSortOrder()); return searchParameters; } diff --git a/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java b/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java index 5e47295..8c257d8 100644 --- a/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java +++ b/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java @@ -859,6 +859,44 @@ public class AtlasDiscoveryServiceTest extends BasicTestSetup { } @Test + public void searchWithEntityQuickSearchSortAsc() throws AtlasBaseException { + QuickSearchParameters params = new QuickSearchParameters(); + params.setTypeName("hive_table"); + params.setQuery("sales"); + params.setExcludeDeletedEntities(true); + params.setLimit(3); + params.setSortBy("owner"); + params.setSortOrder(SortOrder.ASCENDING); + + AtlasQuickSearchResult searchResult = discoveryService.quickSearch(params); + List<AtlasEntityHeader> list = searchResult.getSearchResults().getEntities(); + + Assert.assertTrue(CollectionUtils.isNotEmpty(list)); + Assert.assertTrue(list.size() == 3); + Assert.assertTrue(list.get(0).getAttribute("owner").toString().equalsIgnoreCase("Jane BI")); + Assert.assertTrue(list.get(1).getAttribute("owner").toString().equalsIgnoreCase("Joe")); + } + + @Test + public void searchWithEntityQuickSearchSortDesc() throws AtlasBaseException { + QuickSearchParameters params = new QuickSearchParameters(); + params.setTypeName("hive_table"); + params.setQuery("sales"); + params.setExcludeDeletedEntities(true); + params.setLimit(3); + params.setSortBy("name"); + params.setSortOrder(SortOrder.DESCENDING); + + AtlasQuickSearchResult searchResult = discoveryService.quickSearch(params); + List<AtlasEntityHeader> list = searchResult.getSearchResults().getEntities(); + + Assert.assertTrue(CollectionUtils.isNotEmpty(list)); + Assert.assertTrue(list.size() == 3); + Assert.assertTrue(list.get(0).getDisplayText().equalsIgnoreCase("time_dim")); + Assert.assertTrue(list.get(1).getDisplayText().equalsIgnoreCase("sales_fact_monthly_mv")); + } + + @Test public void searchRelatedEntitiesSortAsc() throws AtlasBaseException { String guid = gethiveTableSalesFactGuid(); 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 e4c74a9..287b611 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 @@ -606,11 +606,13 @@ public class DiscoveryREST { @Path("/quick") @GET @Timed - public AtlasQuickSearchResult quickSearch(@QueryParam("query") String query, - @QueryParam("typeName") String typeName, - @QueryParam("excludeDeletedEntities") boolean excludeDeletedEntities, - @QueryParam("offset") int offset, - @QueryParam("limit") int limit) throws AtlasBaseException { + public AtlasQuickSearchResult quickSearch(@QueryParam("query") String query, + @QueryParam("typeName") String typeName, + @QueryParam("excludeDeletedEntities") boolean excludeDeletedEntities, + @QueryParam("offset") int offset, + @QueryParam("limit") int limit, + @QueryParam("sortBy") String sortByAttribute, + @QueryParam("sortOrder") SortOrder sortOrder) throws AtlasBaseException { @@ -633,7 +635,9 @@ public class DiscoveryREST { excludeDeletedEntities, offset, limit, - null); // attributes + null, // attributes + sortByAttribute, + sortOrder); return discoveryService.quickSearch(quickSearchParameters); } finally { @@ -673,6 +677,11 @@ public class DiscoveryREST { throw new AtlasBaseException(AtlasErrorCode.INVALID_SEARCH_PARAMS); } + if (StringUtils.isEmpty(quickSearchParameters.getTypeName()) && + (StringUtils.isNotEmpty(quickSearchParameters.getSortBy()))) { + throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "SortBy specified without Type name"); + } + validateSearchParameters(quickSearchParameters); return discoveryService.quickSearch(quickSearchParameters);