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 <[email protected]>
AuthorDate: Mon Sep 13 23:51:50 2021 +0530
ATLAS-4422 : Quick Search: Provide sorting
Signed-off-by: Pinal Shah <[email protected]>
---
.../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);