Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.apache.atlas.SortOrder;
import org.apache.atlas.model.discovery.SearchParameters.FilterCriteria;

import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;

import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
Expand All @@ -45,6 +48,7 @@ public class QuickSearchParameters implements Serializable {
private boolean excludeDeletedEntities;
private int offset;
private int limit;
@JsonDeserialize(as = LinkedHashSet.class)
private Set<String> attributes;
private String sortBy;
private SortOrder sortOrder;
Expand All @@ -56,15 +60,15 @@ public class QuickSearchParameters implements Serializable {
public QuickSearchParameters() {
}

public QuickSearchParameters(String query, String typeName, FilterCriteria entityFilters, boolean includeSubTypes, boolean excludeDeletedEntities, int offset, int limit, Set<String> attributes, String sortBy, SortOrder sortOrder) {
public QuickSearchParameters(String query, String typeName, FilterCriteria entityFilters, boolean includeSubTypes, boolean excludeDeletedEntities, int offset, int limit, Collection<String> attributes, String sortBy, SortOrder sortOrder) {
this.query = query;
this.typeName = typeName;
this.entityFilters = entityFilters;
this.includeSubTypes = includeSubTypes;
this.excludeDeletedEntities = excludeDeletedEntities;
this.offset = offset;
this.limit = limit;
this.attributes = attributes;
this.attributes = attributes == null ? null : new LinkedHashSet<>(attributes);
this.sortBy = sortBy;
this.sortOrder = sortOrder;
}
Expand Down Expand Up @@ -129,8 +133,8 @@ public Set<String> getAttributes() {
return attributes;
}

public void setAttributes(Set<String> attributes) {
this.attributes = attributes;
public void setAttributes(Collection<String> attributes) {
this.attributes = attributes == null ? null : new LinkedHashSet<>(attributes);
}

public String getSortBy() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.apache.atlas.SortOrder;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand Down Expand Up @@ -63,6 +66,7 @@ public class SearchParameters implements Serializable {
private FilterCriteria entityFilters;
private FilterCriteria tagFilters;
private FilterCriteria relationshipFilters;
@JsonDeserialize(as = LinkedHashSet.class)
private Set<String> attributes;
private SortOrder sortOrder;

Expand Down Expand Up @@ -319,11 +323,12 @@ public Set<String> getAttributes() {

/**
* Return these attributes in the result response
* Duplicate attribute names are ignored; the first occurrence determines position.
*
* @param attributes
*/
public void setAttributes(Set<String> attributes) {
this.attributes = attributes;
public void setAttributes(Collection<String> attributes) {
this.attributes = attributes == null ? null : new LinkedHashSet<>(attributes);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
Expand Down Expand Up @@ -66,7 +67,7 @@ public void testParameterizedConstructor() {
boolean excludeDeletedEntities = true;
int offset = 10;
int limit = 100;
Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("attr1");
String sortBy = "name";
SortOrder sortOrder = SortOrder.ASCENDING;
Expand All @@ -82,7 +83,7 @@ public void testParameterizedConstructor() {
assertTrue(params.getExcludeDeletedEntities());
assertEquals(params.getOffset(), offset);
assertEquals(params.getLimit(), limit);
assertSame(params.getAttributes(), attributes);
assertEquals(params.getAttributes(), new LinkedHashSet<>(attributes));
assertEquals(params.getSortBy(), sortBy);
assertEquals(params.getSortOrder(), sortOrder);
}
Expand Down Expand Up @@ -183,13 +184,13 @@ public void testLimitGetterSetter() {
public void testAttributesGetterSetter() {
assertNull(searchParameters.getAttributes());

Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("name");
attributes.add("description");
attributes.add("owner");

searchParameters.setAttributes(attributes);
assertSame(searchParameters.getAttributes(), attributes);
assertEquals(searchParameters.getAttributes(), new LinkedHashSet<>(attributes));

searchParameters.setAttributes(null);
assertNull(searchParameters.getAttributes());
Expand Down Expand Up @@ -244,7 +245,7 @@ public void testCompleteParameterConfiguration() {
boolean excludeDeletedEntities = true;
int offset = 25;
int limit = 500;
Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("name");
attributes.add("qualifiedName");
attributes.add("owner");
Expand All @@ -271,7 +272,7 @@ public void testCompleteParameterConfiguration() {
assertTrue(searchParameters.getExcludeDeletedEntities());
assertEquals(searchParameters.getOffset(), offset);
assertEquals(searchParameters.getLimit(), limit);
assertSame(searchParameters.getAttributes(), attributes);
assertEquals(searchParameters.getAttributes(), new LinkedHashSet<>(attributes));
assertEquals(searchParameters.getSortBy(), sortBy);
assertEquals(searchParameters.getSortOrder(), sortOrder);
assertTrue(searchParameters.getExcludeHeaderAttributes());
Expand All @@ -296,7 +297,7 @@ public void testParameterizedConstructorWithNullValues() {

@Test
public void testEmptyAttributesSet() {
Set<String> emptyAttributes = new HashSet<>();
List<String> emptyAttributes = new ArrayList<>();
searchParameters.setAttributes(emptyAttributes);

assertNotNull(searchParameters.getAttributes());
Expand All @@ -306,15 +307,15 @@ public void testEmptyAttributesSet() {

@Test
public void testAttributesSetModification() {
Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("initialAttribute");
searchParameters.setAttributes(attributes);

attributes.add("additionalAttribute");

assertEquals(searchParameters.getAttributes().size(), 2);
assertEquals(searchParameters.getAttributes().size(), 1);
assertTrue(searchParameters.getAttributes().contains("initialAttribute"));
assertTrue(searchParameters.getAttributes().contains("additionalAttribute"));
assertFalse(searchParameters.getAttributes().contains("additionalAttribute"));
}

@Test
Expand Down Expand Up @@ -413,7 +414,7 @@ public void testComplexFilterCriteria() {

@Test
public void testAttributesWithVariousTypes() {
Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("stringAttribute");
attributes.add("numericAttribute");
attributes.add("dateAttribute");
Expand Down Expand Up @@ -472,7 +473,7 @@ public void testSearchScenarioWithAllParameters() {
searchParameters.setOffset(0);
searchParameters.setLimit(50);

Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("qualifiedName");
attributes.add("owner");
attributes.add("createTime");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
import org.apache.atlas.SortOrder;
import org.apache.atlas.model.discovery.SearchParameters.FilterCriteria;
import org.apache.atlas.model.discovery.SearchParameters.Operator;
import org.apache.atlas.utils.AtlasJson;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
Expand Down Expand Up @@ -290,16 +291,24 @@ public void testRelationshipFiltersGetterSetter() {
public void testAttributesGetterSetter() {
assertNull(searchParameters.getAttributes());

Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("name");
attributes.add("description");
searchParameters.setAttributes(attributes);
assertSame(searchParameters.getAttributes(), attributes);
assertEquals(searchParameters.getAttributes(), new LinkedHashSet<>(attributes));

searchParameters.setAttributes(null);
assertNull(searchParameters.getAttributes());
}

@Test
public void testAttributesDedupePreservesFirstOccurrenceOrder() {
searchParameters.setAttributes(Arrays.asList("qualifiedName", "createTime", "qualifiedName"));

assertEquals(searchParameters.getAttributes(), new LinkedHashSet<>(Arrays.asList("qualifiedName", "createTime")));
assertEquals(new ArrayList<>(searchParameters.getAttributes()), Arrays.asList("qualifiedName", "createTime"));
}

@Test
public void testSortByGetterSetter() {
assertNull(searchParameters.getSortBy());
Expand Down Expand Up @@ -708,7 +717,7 @@ public void testCompleteSearchParametersConfiguration() {
searchParameters.setSortBy("createTime");
searchParameters.setSortOrder(SortOrder.DESCENDING);

Set<String> attributes = new HashSet<>();
List<String> attributes = new ArrayList<>();
attributes.add("qualifiedName");
attributes.add("owner");
searchParameters.setAttributes(attributes);
Expand Down Expand Up @@ -736,6 +745,26 @@ public void testCompleteSearchParametersConfiguration() {
assertEquals(searchParameters.getSortBy(), "createTime");
assertEquals(searchParameters.getSortOrder(), SortOrder.DESCENDING);
assertEquals(searchParameters.getAttributes().size(), 2);
assertEquals(new ArrayList<>(searchParameters.getAttributes()).get(0), "qualifiedName");
assertEquals(new ArrayList<>(searchParameters.getAttributes()).get(1), "owner");
assertNotNull(searchParameters.getEntityFilters());
}

@Test
public void testAttributesJsonDeserializationPreservesOrder() {
String json = "{\"typeName\":\"hive_table\",\"attributes\":[\"qualifiedName\",\"createTime\"]}";

SearchParameters params = AtlasJson.fromJson(json, SearchParameters.class);

assertEquals(params.getAttributes(), new LinkedHashSet<>(Arrays.asList("qualifiedName", "createTime")));
}

@Test
public void testAttributesJsonDeserializationDedupes() {
String json = "{\"typeName\":\"hive_table\",\"attributes\":[\"qualifiedName\",\"createTime\",\"qualifiedName\"]}";

SearchParameters params = AtlasJson.fromJson(json, SearchParameters.class);

assertEquals(params.getAttributes(), new LinkedHashSet<>(Arrays.asList("qualifiedName", "createTime")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -652,7 +653,10 @@ public AtlasSearchResult searchRelatedEntities(String guid, String relation, boo
AtlasVertex vertex = entityRetriever.getEntityVertex(endVertexGuid);

if (vertex != null) {
AtlasEntityHeader entity = entityRetriever.toAtlasEntityHeader(vertex, searchParameters.getAttributes());
Set<String> requestedAttributes = CollectionUtils.isEmpty(searchParameters.getAttributes())
? Collections.emptySet()
: searchParameters.getAttributes();
AtlasEntityHeader entity = entityRetriever.toAtlasEntityHeader(vertex, requestedAttributes);

if (searchParameters.getIncludeClassificationAttributes()) {
entity.setClassifications(entityRetriever.getAllClassifications(vertex));
Expand Down Expand Up @@ -990,7 +994,7 @@ private AtlasSearchResult searchWithSearchContext(SearchContext searchContext) t
Collection<List<Object>> values = new ArrayList<>();
AtlasSearchResult.AttributeSearchResult attributeSearchResult = new AtlasSearchResult.AttributeSearchResult();

attributeSearchResult.setName(new ArrayList<>(attributes));
attributeSearchResult.setName(attributes == null ? null : new ArrayList<>(attributes));

for (AtlasVertex vertex : resultList) {
List<Object> row = new ArrayList<>();
Expand All @@ -1016,7 +1020,7 @@ private AtlasSearchResult searchWithSearchContext(SearchContext searchContext) t
// By default any attribute that shows up in the search parameter should be sent back in the response
// If additional values are requested then the entityAttributes will be a superset of the all search attributes
// and the explicitly requested attribute(s)
Set<String> resultAttributes = new HashSet<>();
Set<String> resultAttributes = new LinkedHashSet<>();
Set<String> entityAttributes = new HashSet<>();

if (CollectionUtils.isNotEmpty(searchParameters.getAttributes())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ private SearchParameters getSearchParameters(String dbName, String sourceCluster
parameters.setExcludeDeletedEntities(false);
parameters.setTypeName(TYPE_HIVE_TABLE);
parameters.setExcludeDeletedEntities(true);
parameters.setAttributes(new HashSet<>(Collections.singleton(AtlasImportRequest.OPTION_KEY_REPLICATED_FROM)));
parameters.setAttributes(Collections.singleton(AtlasImportRequest.OPTION_KEY_REPLICATED_FROM));
parameters.setQuery(query);

return parameters;
Expand Down
Loading
Loading