You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/09/20 00:41:13 UTC
atlas git commit: ATLAS-2148: saved-search API enhancement to support
searchType
Repository: atlas
Updated Branches:
refs/heads/branch-0.8 1b56bec75 -> 2dc137c18
ATLAS-2148: saved-search API enhancement to support searchType
Signed-off-by: Madhan Neethiraj <ma...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/2dc137c1
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/2dc137c1
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/2dc137c1
Branch: refs/heads/branch-0.8
Commit: 2dc137c1810738d1e2464c8e8fea86d2607555fe
Parents: 1b56bec
Author: ashutoshm <am...@hortonworks.com>
Authored: Tue Sep 19 16:20:52 2017 -0700
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Tue Sep 19 17:17:30 2017 -0700
----------------------------------------------------------------------
addons/models/0010-base_model.json | 8 ++
.../model/profile/AtlasUserSavedSearch.java | 35 +++++-
.../atlas/discovery/AtlasDiscoveryService.java | 15 ++-
.../atlas/discovery/EntityDiscoveryService.java | 23 +++-
.../repository/ogm/AtlasSavedSearchDTO.java | 5 +-
.../apache/atlas/repository/ogm/DataAccess.java | 2 +-
.../userprofile/UserProfileService.java | 23 ++--
.../userprofile/UserProfileServiceTest.java | 47 ++++---
.../apache/atlas/web/rest/DiscoveryREST.java | 126 ++++++++++++++-----
9 files changed, 215 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/addons/models/0010-base_model.json
----------------------------------------------------------------------
diff --git a/addons/models/0010-base_model.json b/addons/models/0010-base_model.json
index 8f38f59..0a0244c 100644
--- a/addons/models/0010-base_model.json
+++ b/addons/models/0010-base_model.json
@@ -185,6 +185,14 @@
"isUnique": true
},
{
+ "name": "searchType",
+ "typeName": "string",
+ "cardinality": "SINGLE",
+ "isIndexable": true,
+ "isOptional": false,
+ "isUnique": false
+ },
+ {
"name": "searchParameters",
"typeName": "string",
"cardinality": "SINGLE",
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/intg/src/main/java/org/apache/atlas/model/profile/AtlasUserSavedSearch.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/model/profile/AtlasUserSavedSearch.java b/intg/src/main/java/org/apache/atlas/model/profile/AtlasUserSavedSearch.java
index b0698fc..8ecd52d 100644
--- a/intg/src/main/java/org/apache/atlas/model/profile/AtlasUserSavedSearch.java
+++ b/intg/src/main/java/org/apache/atlas/model/profile/AtlasUserSavedSearch.java
@@ -34,26 +34,41 @@ import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONL
public class AtlasUserSavedSearch extends AtlasBaseModelObject implements Serializable {
private static final long serialVersionUID = 1L;
+ public enum SavedSearchType {
+ BASIC,
+ ADVANCED;
+
+ public static SavedSearchType to(String val) {
+ return SavedSearchType.ADVANCED.name().equalsIgnoreCase(val) ? SavedSearchType.ADVANCED : SavedSearchType.BASIC;
+ }
+ }
+
private String ownerName;
private String name;
+ private SavedSearchType searchType;
private SearchParameters searchParameters;
public AtlasUserSavedSearch() {
- this(null, null, null);
+ this(null, null, SavedSearchType.BASIC, null);
}
- public AtlasUserSavedSearch(String name, SearchParameters searchParameters) {
- this(null, name, searchParameters);
+ public AtlasUserSavedSearch(String name, SavedSearchType searchType, SearchParameters searchParameters) {
+ this(null, name, searchType, searchParameters);
}
public AtlasUserSavedSearch(String ownerName, String name) {
- this(ownerName, name, null);
+ this(ownerName, name, SavedSearchType.BASIC, null);
+ }
+
+ public AtlasUserSavedSearch(String ownerName, String name, SavedSearchType searchType) {
+ this(ownerName, name, searchType, null);
}
- public AtlasUserSavedSearch(String ownerName, String name, SearchParameters searchParameters) {
+ public AtlasUserSavedSearch(String ownerName, String name, SavedSearchType savedSearchType, SearchParameters searchParameters) {
setOwnerName(ownerName);
setName(name);
+ setSearchType(savedSearchType);
setSearchParameters(searchParameters);
}
@@ -74,6 +89,14 @@ public class AtlasUserSavedSearch extends AtlasBaseModelObject implements Serial
this.name = name;
}
+ public SavedSearchType getSearchType() {
+ return searchType;
+ }
+
+ public void setSearchType(SavedSearchType searchType) {
+ this.searchType = searchType;
+ }
+
public SearchParameters getSearchParameters() {
return searchParameters;
}
@@ -82,11 +105,11 @@ public class AtlasUserSavedSearch extends AtlasBaseModelObject implements Serial
this.searchParameters = searchParameters;
}
-
@Override
public StringBuilder toString(StringBuilder sb) {
sb.append(", ownerName=").append(ownerName);
sb.append(", name=").append(name);
+ sb.append(", searchType=").append(searchType);
sb.append(", searchParameters=");
if (searchParameters == null) {
sb.append("null");
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
----------------------------------------------------------------------
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 baaee85..630e776 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/AtlasDiscoveryService.java
@@ -24,6 +24,7 @@ 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.profile.AtlasUserSavedSearch;
+import org.apache.atlas.model.profile.AtlasUserSavedSearch.SavedSearchType;
import java.util.List;
@@ -89,14 +90,14 @@ public interface AtlasDiscoveryService {
* @param savedSearch Search to be saved
* @throws AtlasBaseException
*/
- void addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException;
+ AtlasUserSavedSearch addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException;
/**
*
* @param savedSearch Search to be saved
* @throws AtlasBaseException
*/
- void updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException;
+ AtlasUserSavedSearch updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException;
/**
*
@@ -108,12 +109,20 @@ public interface AtlasDiscoveryService {
/**
*
+ * @param guid Guid for the saved search
+ * @return Search object identified by the guid
+ * @throws AtlasBaseException
+ */
+ AtlasUserSavedSearch getSavedSearch(String guid) throws AtlasBaseException;
+
+ /**
+ *
* @param userName Name of the user who the search belongs
* @param searchName Name of the search to be retrieved
* @return Search object identified by the name
* @throws AtlasBaseException
*/
- AtlasUserSavedSearch getSavedSearch(String userName, String searchName) throws AtlasBaseException;
+ AtlasUserSavedSearch getSavedSearch(String userName, String searchName, SavedSearchType searchType) throws AtlasBaseException;
/**
* @param guid Guid for the saved search
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
----------------------------------------------------------------------
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 ad21ee4..e701dff 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
@@ -33,6 +33,7 @@ import org.apache.atlas.model.discovery.SearchParameters;
import org.apache.atlas.model.instance.AtlasEntityHeader;
import org.apache.atlas.model.instance.AtlasObjectId;
import org.apache.atlas.model.profile.AtlasUserSavedSearch;
+import org.apache.atlas.model.profile.AtlasUserSavedSearch.SavedSearchType;
import org.apache.atlas.query.Expressions.AliasExpression;
import org.apache.atlas.query.Expressions.Expression;
import org.apache.atlas.query.Expressions.SelectExpression;
@@ -804,9 +805,9 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
@Override
- public void addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
+ public AtlasUserSavedSearch addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
try {
- userProfileService.addSavedSearch(savedSearch);
+ return userProfileService.addSavedSearch(savedSearch);
} catch (AtlasBaseException e) {
LOG.error("addSavedSearch({})", savedSearch, e);
throw e;
@@ -815,9 +816,9 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
@Override
- public void updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
+ public AtlasUserSavedSearch updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
try {
- userProfileService.updateSavedSearch(savedSearch);
+ return userProfileService.updateSavedSearch(savedSearch);
} catch (AtlasBaseException e) {
LOG.error("updateSavedSearch({})", savedSearch, e);
throw e;
@@ -835,9 +836,19 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
}
@Override
- public AtlasUserSavedSearch getSavedSearch(String userName, String searchName) throws AtlasBaseException {
+ public AtlasUserSavedSearch getSavedSearch(String guid) throws AtlasBaseException {
try {
- return userProfileService.getSavedSearch(userName, searchName);
+ return userProfileService.getSavedSearch(guid);
+ } catch (AtlasBaseException e) {
+ LOG.error("getSavedSearch({})", guid, e);
+ throw e;
+ }
+ }
+
+ @Override
+ public AtlasUserSavedSearch getSavedSearch(String userName, String searchName, SavedSearchType searchType) throws AtlasBaseException {
+ try {
+ return userProfileService.getSavedSearch(userName, searchName, searchType);
} catch (AtlasBaseException e) {
LOG.error("getSavedSearch({}, {})", userName, searchName, e);
throw e;
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/main/java/org/apache/atlas/repository/ogm/AtlasSavedSearchDTO.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/ogm/AtlasSavedSearchDTO.java b/repository/src/main/java/org/apache/atlas/repository/ogm/AtlasSavedSearchDTO.java
index 26eee20..aa8fc39 100644
--- a/repository/src/main/java/org/apache/atlas/repository/ogm/AtlasSavedSearchDTO.java
+++ b/repository/src/main/java/org/apache/atlas/repository/ogm/AtlasSavedSearchDTO.java
@@ -35,6 +35,7 @@ public class AtlasSavedSearchDTO extends AbstractDataTransferObject<AtlasUserSav
private static final String PROPERTY_OWNER_NAME = "ownerName";
private static final String PROPERTY_SEARCH_PARAMETERS = "searchParameters";
private static final String PROPERTY_UNIQUE_NAME = "uniqueName";
+ private static final String PROPERTY_SEARCH_TYPE = "searchType";
public AtlasSavedSearchDTO(AtlasTypeRegistry typeRegistry) {
super(typeRegistry, AtlasUserSavedSearch.class);
@@ -47,6 +48,7 @@ public class AtlasSavedSearchDTO extends AbstractDataTransferObject<AtlasUserSav
savedSearch.setGuid(entity.getGuid());
savedSearch.setName((String) entity.getAttribute(PROPERTY_NAME));
savedSearch.setOwnerName((String) entity.getAttribute(PROPERTY_OWNER_NAME));
+ savedSearch.setSearchType(AtlasUserSavedSearch.SavedSearchType.to((String) entity.getAttribute(PROPERTY_SEARCH_TYPE)));
String jsonSearchParams = (String) entity.getAttribute(PROPERTY_SEARCH_PARAMETERS);
@@ -68,6 +70,7 @@ public class AtlasSavedSearchDTO extends AbstractDataTransferObject<AtlasUserSav
entity.setAttribute(PROPERTY_NAME, obj.getName());
entity.setAttribute(PROPERTY_OWNER_NAME, obj.getOwnerName());
+ entity.setAttribute(PROPERTY_SEARCH_TYPE, obj.getSearchType());
entity.setAttribute(PROPERTY_UNIQUE_NAME, getUniqueValue(obj));
if (obj.getSearchParameters() != null) {
@@ -92,6 +95,6 @@ public class AtlasSavedSearchDTO extends AbstractDataTransferObject<AtlasUserSav
}
private String getUniqueValue(AtlasUserSavedSearch obj) {
- return obj.getOwnerName() + ":" + obj.getName();
+ return String.format("%s:%s:%s", obj.getOwnerName(), obj.getName(), obj.getSearchType()) ;
}
}
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/main/java/org/apache/atlas/repository/ogm/DataAccess.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/ogm/DataAccess.java b/repository/src/main/java/org/apache/atlas/repository/ogm/DataAccess.java
index bc93cc6..c99d2f8 100644
--- a/repository/src/main/java/org/apache/atlas/repository/ogm/DataAccess.java
+++ b/repository/src/main/java/org/apache/atlas/repository/ogm/DataAccess.java
@@ -51,7 +51,7 @@ public class DataAccess {
throw new AtlasBaseException(AtlasErrorCode.DATA_ACCESS_SAVE_FAILED, obj.toString());
}
- return obj;
+ return this.load(obj);
}
public <T extends AtlasBaseModelObject> T load(T obj) throws AtlasBaseException {
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/main/java/org/apache/atlas/repository/userprofile/UserProfileService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/userprofile/UserProfileService.java b/repository/src/main/java/org/apache/atlas/repository/userprofile/UserProfileService.java
index 766d1c7..99d13af 100644
--- a/repository/src/main/java/org/apache/atlas/repository/userprofile/UserProfileService.java
+++ b/repository/src/main/java/org/apache/atlas/repository/userprofile/UserProfileService.java
@@ -22,6 +22,7 @@ import org.apache.atlas.annotation.AtlasService;
import org.apache.atlas.exception.AtlasBaseException;
import org.apache.atlas.model.profile.AtlasUserProfile;
import org.apache.atlas.model.profile.AtlasUserSavedSearch;
+import org.apache.atlas.model.profile.AtlasUserSavedSearch.SavedSearchType;
import org.apache.atlas.repository.ogm.DataAccess;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -41,8 +42,8 @@ public class UserProfileService {
this.dataAccess = dataAccess;
}
- public void saveUserProfile(AtlasUserProfile profile) throws AtlasBaseException {
- dataAccess.save(profile);
+ public AtlasUserProfile saveUserProfile(AtlasUserProfile profile) throws AtlasBaseException {
+ return dataAccess.save(profile);
}
public AtlasUserProfile getUserProfile(String userName) throws AtlasBaseException {
@@ -51,7 +52,7 @@ public class UserProfileService {
return dataAccess.load(profile);
}
- public AtlasUserProfile addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
+ public AtlasUserSavedSearch addSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
String userName = savedSearch.getOwnerName();
AtlasUserProfile userProfile = null;
@@ -67,13 +68,21 @@ public class UserProfileService {
checkIfQueryAlreadyExists(savedSearch, userProfile);
userProfile.getSavedSearches().add(savedSearch);
- return dataAccess.save(userProfile);
+ userProfile = dataAccess.save(userProfile);
+ for (AtlasUserSavedSearch s : userProfile.getSavedSearches()) {
+ if(s.getName().equals(savedSearch.getName()) && s.getSearchType().equals(savedSearch.getSearchType())) {
+ return s;
+ }
+ }
+
+ return savedSearch;
}
private void checkIfQueryAlreadyExists(AtlasUserSavedSearch savedSearch, AtlasUserProfile userProfile) throws AtlasBaseException {
for (AtlasUserSavedSearch exisingSearch : userProfile.getSavedSearches()) {
if (StringUtils.equals(exisingSearch.getOwnerName(), savedSearch.getOwnerName()) &&
- StringUtils.equals(exisingSearch.getName(), savedSearch.getName())) {
+ StringUtils.equals(exisingSearch.getName(), savedSearch.getName()) &&
+ exisingSearch.getSearchType().equals(savedSearch.getSearchType())) {
throw new AtlasBaseException(AtlasErrorCode.SAVED_SEARCH_ALREADY_EXISTS, savedSearch.getName(), savedSearch.getOwnerName());
}
}
@@ -120,8 +129,8 @@ public class UserProfileService {
return (profile != null) ? profile.getSavedSearches() : null;
}
- public AtlasUserSavedSearch getSavedSearch(String userName, String searchName) throws AtlasBaseException {
- AtlasUserSavedSearch ss = new AtlasUserSavedSearch(userName, searchName);
+ public AtlasUserSavedSearch getSavedSearch(String userName, String searchName, SavedSearchType searchType) throws AtlasBaseException {
+ AtlasUserSavedSearch ss = new AtlasUserSavedSearch(userName, searchName, searchType);
return dataAccess.load(ss);
}
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/repository/src/test/java/org/apache/atlas/repository/userprofile/UserProfileServiceTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/userprofile/UserProfileServiceTest.java b/repository/src/test/java/org/apache/atlas/repository/userprofile/UserProfileServiceTest.java
index 4e83296..713dade 100644
--- a/repository/src/test/java/org/apache/atlas/repository/userprofile/UserProfileServiceTest.java
+++ b/repository/src/test/java/org/apache/atlas/repository/userprofile/UserProfileServiceTest.java
@@ -37,6 +37,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import static org.apache.atlas.model.profile.AtlasUserSavedSearch.SavedSearchType.BASIC;
import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.loadModelFromJson;
import static org.testng.Assert.*;
@@ -77,7 +78,7 @@ public class UserProfileServiceTest {
}
@Test(dependsOnMethods = { "createsNewProfile", "savesQueryForAnNonExistentUser" }, expectedExceptions = AtlasBaseException.class)
- public void savesAlreadyExistingQueryForAnExistingUser() throws AtlasBaseException {
+ public void atteptsToAddAlreadyExistingQueryForAnExistingUser() throws AtlasBaseException {
SearchParameters expectedSearchParameter = getActualSearchParameters();
for (int i = 0; i < 2; i++) {
@@ -85,13 +86,20 @@ public class UserProfileServiceTest {
for (int j = 0; j < max_searches; j++) {
String queryName = getIndexBasedQueryName(j);
- AtlasUserProfile actual = userProfileService.addSavedSearch(new AtlasUserSavedSearch(userName, queryName, expectedSearchParameter));
+ AtlasUserSavedSearch expected = getDefaultSavedSearch(userName, queryName, expectedSearchParameter);
+ AtlasUserSavedSearch actual = userProfileService.addSavedSearch(expected);
+
assertNotNull(actual);
+ assertNotNull(actual.getGuid());
+ assertEquals(actual.getOwnerName(), expected.getOwnerName());
+ assertEquals(actual.getName(), expected.getName());
+ assertEquals(actual.getSearchType(), expected.getSearchType());
+ assertEquals(actual.getSearchParameters(), expected.getSearchParameters());
}
}
}
- @Test(dependsOnMethods = { "createsNewProfile", "savesQueryForAnNonExistentUser", "savesAlreadyExistingQueryForAnExistingUser" })
+ @Test(dependsOnMethods = { "createsNewProfile", "savesQueryForAnNonExistentUser", "atteptsToAddAlreadyExistingQueryForAnExistingUser" })
public void savesExistingQueryForAnExistingUser() throws AtlasBaseException {
SearchParameters expectedSearchParameter = getActualSearchParameters();
@@ -100,10 +108,10 @@ public class UserProfileServiceTest {
for (int j = 4; j < max_searches + 6; j++) {
String queryName = getIndexBasedQueryName(j);
- AtlasUserProfile actual = userProfileService.addSavedSearch(new AtlasUserSavedSearch(userName, queryName, expectedSearchParameter));
+ AtlasUserSavedSearch actual = userProfileService.addSavedSearch(getDefaultSavedSearch(userName, queryName, expectedSearchParameter));
assertNotNull(actual);
- AtlasUserSavedSearch savedSearch = userProfileService.getSavedSearch(userName, queryName);
+ AtlasUserSavedSearch savedSearch = userProfileService.getSavedSearch(userName, queryName, BASIC);
assertNotNull(savedSearch);
assertEquals(savedSearch.getSearchParameters(), expectedSearchParameter);
}
@@ -122,14 +130,19 @@ public class UserProfileServiceTest {
@Test(dependsOnMethods = "createsNewProfile")
public void savesQueryForAnNonExistentUser() throws AtlasBaseException {
- String expectedUserName = "firstXYZ";
+ String expectedUserName = getIndexBasedUserName(0);
String expectedQueryName = "testQuery";
SearchParameters expectedSearchParam = getActualSearchParameters();
+ AtlasUserSavedSearch expectedSavedSearch = getDefaultSavedSearch(expectedUserName, expectedQueryName, expectedSearchParam);
+
+ AtlasUserSavedSearch actual = userProfileService.addSavedSearch(expectedSavedSearch);
+ assertEquals(actual.getOwnerName(), expectedUserName);
+ assertEquals(actual.getName(), expectedQueryName);
+ }
- AtlasUserProfile actual = userProfileService.addSavedSearch(new AtlasUserSavedSearch(expectedUserName, expectedQueryName, expectedSearchParam));
- assertEquals(actual.getName(), expectedUserName);
- assertEquals(actual.getSavedSearches().size(), 1);
- assertEquals(actual.getSavedSearches().get(0).getName(), expectedQueryName);
+ private AtlasUserSavedSearch getDefaultSavedSearch(String userName, String queryName, SearchParameters expectedSearchParam) {
+ return new AtlasUserSavedSearch(userName, queryName,
+ BASIC, expectedSearchParam);
}
@Test(dependsOnMethods = "createsNewProfile")
@@ -143,7 +156,7 @@ public class UserProfileServiceTest {
saveQueries(userName, actualSearchParameter);
for (int i = 0; i < max_searches; i++) {
- AtlasUserSavedSearch savedSearch = userProfileService.getSavedSearch(userName, getIndexBasedQueryName(i));
+ AtlasUserSavedSearch savedSearch = userProfileService.getSavedSearch(userName, getIndexBasedQueryName(i), BASIC);
assertEquals(savedSearch.getName(), getIndexBasedQueryName(i));
assertEquals(savedSearch.getSearchParameters(), actualSearchParameter);
}
@@ -151,7 +164,7 @@ public class UserProfileServiceTest {
private void saveQueries(String userName, SearchParameters sp) throws AtlasBaseException {
for (int i = 0; i < max_searches; i++) {
- userProfileService.addSavedSearch(new AtlasUserSavedSearch(userName, getIndexBasedQueryName(i), sp));
+ userProfileService.addSavedSearch(getDefaultSavedSearch(userName, getIndexBasedQueryName(i), sp));
}
}
@@ -181,7 +194,7 @@ public class UserProfileServiceTest {
public void updateSearch() throws AtlasBaseException {
final String queryName = getIndexBasedQueryName(0);
String userName = getIndexBasedUserName(0);
- AtlasUserSavedSearch expected = userProfileService.getSavedSearch(userName, queryName);
+ AtlasUserSavedSearch expected = userProfileService.getSavedSearch(userName, queryName, BASIC);
assertNotNull(expected);
SearchParameters sp = expected.getSearchParameters();
@@ -199,11 +212,11 @@ public class UserProfileServiceTest {
final String queryName = getIndexBasedQueryName(1);
String userName = getIndexBasedUserName(0);
- AtlasUserSavedSearch expected = userProfileService.getSavedSearch(userName, queryName);
+ AtlasUserSavedSearch expected = userProfileService.getSavedSearch(userName, queryName, BASIC);
assertNotNull(expected);
userProfileService.deleteSavedSearch(expected.getGuid());
- userProfileService.getSavedSearch(userName, queryName);
+ userProfileService.getSavedSearch(userName, queryName, BASIC);
}
@Test(dependsOnMethods = {"createsNewProfile", "savesMultipleQueriesForUser", "verifyQueryNameListForUser"})
@@ -236,12 +249,12 @@ public class UserProfileServiceTest {
private void assertSaveLoadUserProfile(int i) throws AtlasBaseException {
String s = String.valueOf(i);
AtlasUserProfile expected = getAtlasUserProfile(i);
- userProfileService.saveUserProfile(expected);
- AtlasUserProfile actual = userProfileService.getUserProfile(expected.getName());
+ AtlasUserProfile actual = userProfileService.saveUserProfile(expected);
assertNotNull(actual);
assertEquals(expected.getName(), actual.getName());
assertEquals(expected.getFullName(), actual.getFullName());
+ assertNotNull(actual.getGuid());
}
public static AtlasUserProfile getAtlasUserProfile(Integer s) {
http://git-wip-us.apache.org/repos/asf/atlas/blob/2dc137c1/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 ad595c8..aed82ae 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
@@ -24,6 +24,7 @@ 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.profile.AtlasUserSavedSearch;
+import org.apache.atlas.model.profile.AtlasUserSavedSearch.SavedSearchType;
import org.apache.atlas.utils.AtlasPerfTracer;
import org.apache.atlas.web.util.Servlets;
import org.apache.commons.collections.CollectionUtils;
@@ -321,25 +322,9 @@ public class DiscoveryREST {
}
}
- private boolean isEmpty(SearchParameters.FilterCriteria filterCriteria) {
- return filterCriteria == null ||
- (StringUtils.isEmpty(filterCriteria.getAttributeName()) && CollectionUtils.isEmpty(filterCriteria.getCriterion()));
- }
-
- private String escapeTypeName(String typeName) {
- String ret;
-
- if (StringUtils.startsWith(typeName, "`") && StringUtils.endsWith(typeName, "`")) {
- ret = typeName;
- } else {
- ret = String.format("`%s`", typeName);
- }
-
- return ret;
- }
-
/**
* @param savedSearch
+ * @return the saved search-object
* @throws AtlasBaseException
* @throws IOException
*/
@@ -347,36 +332,75 @@ public class DiscoveryREST {
@Path("saved")
@Consumes(Servlets.JSON_MEDIA_TYPE)
@Produces(Servlets.JSON_MEDIA_TYPE)
- public void createSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException, IOException {
+ public AtlasUserSavedSearch createSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException, IOException {
savedSearch.setOwnerName(Servlets.getUserName(httpServletRequest));
- atlasDiscoveryService.addSavedSearch(savedSearch);
+ AtlasPerfTracer perf = null;
+
+ try {
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "DiscoveryREST.createSavedSearch(ownerName=" + savedSearch.getOwnerName() + ", name=" + savedSearch.getName() + ", searchType=" + savedSearch.getSearchType() + ")");
+ }
+
+ return atlasDiscoveryService.addSavedSearch(savedSearch);
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
}
- /**
+ /***
+ *
* @param savedSearch
+ * @return the updated search-object
* @throws AtlasBaseException
- * @throws IOException
*/
@PUT
@Path("saved")
@Consumes(Servlets.JSON_MEDIA_TYPE)
@Produces(Servlets.JSON_MEDIA_TYPE)
- public void updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
- atlasDiscoveryService.updateSavedSearch(savedSearch);
+ public AtlasUserSavedSearch updateSavedSearch(AtlasUserSavedSearch savedSearch) throws AtlasBaseException {
+ savedSearch.setOwnerName(Servlets.getUserName(httpServletRequest));
+
+ AtlasPerfTracer perf = null;
+
+ try {
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "DiscoveryREST.updateSavedSearch(ownerName=" + savedSearch.getOwnerName() + ", name=" + savedSearch.getName() + ", searchType=" + savedSearch.getSearchType() + ")");
+ }
+
+ return atlasDiscoveryService.updateSavedSearch(savedSearch);
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
}
/**
+ *
+ * @param userName User for whom the search is retrieved
* @param searchName Name of the saved search
* @return
+ * @throws AtlasBaseException
*/
@GET
- @Path("saved/{name}")
+ @Path("saved/{type}/{name}")
@Consumes(Servlets.JSON_MEDIA_TYPE)
@Produces(Servlets.JSON_MEDIA_TYPE)
- public AtlasUserSavedSearch getSavedSearch(@QueryParam("user") String userName, @PathParam("name") String searchName) throws AtlasBaseException {
+ public AtlasUserSavedSearch getSavedSearch(@PathParam("type") String searchType,
+ @PathParam("name") String searchName,
+ @QueryParam("user") String userName) throws AtlasBaseException {
userName = StringUtils.isBlank(userName) ? Servlets.getUserName(httpServletRequest) : userName;
- return atlasDiscoveryService.getSavedSearch(userName, searchName);
+
+ AtlasPerfTracer perf = null;
+
+ try {
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "DiscoveryREST.getSavedSearch(user=" + userName + ", name=" + searchName + ", type=" + searchType + ")");
+ }
+
+ return atlasDiscoveryService.getSavedSearch(userName, searchName, SavedSearchType.to(searchType));
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
}
/**
@@ -388,7 +412,18 @@ public class DiscoveryREST {
@Produces(Servlets.JSON_MEDIA_TYPE)
public List<AtlasUserSavedSearch> getSavedSearches(@QueryParam("user") String userName) throws AtlasBaseException {
userName = StringUtils.isBlank(userName) ? Servlets.getUserName(httpServletRequest) : userName;
- return atlasDiscoveryService.getSavedSearches(userName);
+
+ AtlasPerfTracer perf = null;
+
+ try {
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "DiscoveryREST.getSavedSearches(user=" + userName + ")");
+ }
+
+ return atlasDiscoveryService.getSavedSearches(userName);
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
}
/**
@@ -399,6 +434,41 @@ public class DiscoveryREST {
@Consumes(Servlets.JSON_MEDIA_TYPE)
@Produces(Servlets.JSON_MEDIA_TYPE)
public void deleteSavedSearch(@PathParam("guid") String guid) throws AtlasBaseException {
- atlasDiscoveryService.deleteSavedSearch(guid);
+ AtlasPerfTracer perf = null;
+
+ try {
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "DiscoveryREST.deleteSavedSearch(guid=" + guid + ")");
+ }
+
+ AtlasUserSavedSearch savedSearch = atlasDiscoveryService.getSavedSearch(guid);
+
+ // block attempt to delete another user's saved-search
+ if (!StringUtils.equals(savedSearch.getOwnerName(), Servlets.getUserName(httpServletRequest))) {
+ throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "invalid data");
+ }
+
+ atlasDiscoveryService.deleteSavedSearch(guid);
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
+ }
+
+
+ private boolean isEmpty(SearchParameters.FilterCriteria filterCriteria) {
+ return filterCriteria == null ||
+ (StringUtils.isEmpty(filterCriteria.getAttributeName()) && CollectionUtils.isEmpty(filterCriteria.getCriterion()));
+ }
+
+ private String escapeTypeName(String typeName) {
+ String ret;
+
+ if (StringUtils.startsWith(typeName, "`") && StringUtils.endsWith(typeName, "`")) {
+ ret = typeName;
+ } else {
+ ret = String.format("`%s`", typeName);
+ }
+
+ return ret;
}
}