Repository: ranger
Updated Branches:
  refs/heads/master 6c6ec75db -> f076f5216


RANGER-2085:- Add resource lookup for entity-id in Atlas service

Signed-off-by: Mehul Parikh <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/f076f521
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/f076f521
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/f076f521

Branch: refs/heads/master
Commit: f076f521655c62b8859de12f57dede1b1fa4aa0a
Parents: 6c6ec75
Author: nixonrodrigues <[email protected]>
Authored: Thu Apr 26 17:40:45 2018 +0530
Committer: Mehul Parikh <[email protected]>
Committed: Mon Apr 30 19:34:42 2018 +0530

----------------------------------------------------------------------
 .../services/atlas/RangerServiceAtlas.java      | 93 +++++++++++++++++++-
 src/main/assembly/admin-web.xml                 |  7 ++
 2 files changed, 99 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/f076f521/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java
----------------------------------------------------------------------
diff --git 
a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java
 
b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java
index 671d2d1..fb3688b 100644
--- 
a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java
+++ 
b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java
@@ -29,6 +29,8 @@ import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
 import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.atlas.model.instance.AtlasEntityHeader;
+import org.apache.atlas.model.discovery.AtlasSearchResult;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOCase;
 import org.apache.commons.lang.StringUtils;
@@ -42,7 +44,6 @@ import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.service.RangerBaseService;
 import org.apache.ranger.plugin.service.ResourceLookupContext;
 import org.apache.ranger.plugin.util.PasswordUtils;
-
 import javax.security.auth.Subject;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.NewCookie;
@@ -68,6 +69,7 @@ public class RangerServiceAtlas extends RangerBaseService {
 
        private static final String URL_LOGIN                = 
"/j_spring_security_check";
        private static final String URL_GET_TYPESDEF_HEADERS = 
"/api/atlas/v2/types/typedefs/headers";
+       private static final String URl_ENTITY_SEARCH = 
"v2/search/attribute?attrName=qualifiedName";
 
        private static final String WEB_RESOURCE_CONTENT_TYPE = 
"application/x-www-form-urlencoded";
        private static final String CONNECTION_ERROR_MSG      =   " You can 
still save the repository and start creating"
@@ -169,6 +171,8 @@ public class RangerServiceAtlas extends RangerBaseService {
                        final String       userInput     = 
lookupContext.getUserInput();
                        final List<String> currentValues = 
lookupContext.getResources().get(lookupContext.getResourceName());
 
+
+
                        switch(lookupContext.getResourceName()) {
                                case RESOURCE_TYPE_CATEGORY: {
                                        for (String typeCategory : 
TYPE_CATEGORIES) {
@@ -216,6 +220,14 @@ public class RangerServiceAtlas extends RangerBaseService {
 
                                        addIfStartsWithAndNotExcluded(ret, 
typesDef.get(TYPE_CLASSIFICATION), userInput, currentValues);
                                }
+                break;
+
+                               case RESOURCE_ENTITY_ID: {
+                                       List<String> searchTypes = 
lookupContext.getResources().get("entity-type");
+                                       List<String> values = 
searchEntities(userInput , searchTypes);
+                                       addIfStartsWithAndNotExcluded(ret, 
values, userInput, currentValues);
+
+                               }
                                break;
 
                                default: {
@@ -368,6 +380,85 @@ public class RangerServiceAtlas extends RangerBaseService {
                        return ret;
                }
 
+               private List<String> searchEntities(String userInput, 
List<String> types) {
+
+                       if( LOG.isDebugEnabled()) {
+                               LOG.info(" RangerServiceAtlas.searchEntities 
==>> userInput" + userInput +" types "+ types);
+                       }
+                       List<String> list = null;
+
+                       Subject subj = getLoginSubject();
+
+                       if (subj == null) {
+                               return null;
+                       }
+
+                       list = Subject.doAs(subj, new 
PrivilegedAction<List<String>>() {
+                               @Override
+                               public List<String> run() {
+                                       List<String> ret = null;
+                                       String entityType = "";
+                                       if (types != null && types.size() == 1) 
{
+                                               entityType = types.get(0);
+                                       } else {
+                                               return null;
+                                       }
+                                       for (String atlasUrl : getAtlasUrls()) {
+                                               Client client = null;
+
+                                               try {
+                                                       client = 
Client.create();
+
+                                                       ClientResponse 
loginResponse = loginToAtlas(client);
+                                                       String 
entitySearcApiUrl = atlasUrl + "/api/atlas/" + URl_ENTITY_SEARCH;
+                                                       StringBuilder searchUrl 
= new StringBuilder();
+
+                                                       
searchUrl.append(entitySearcApiUrl)
+                                                                       
.append("&typeName=")
+                                                                       
.append(entityType)
+                                                                       
.append("&attrValuePrefix=" + userInput + "&limit=25");
+
+
+                                                       WebResource webResource 
= client.resource(searchUrl.toString());
+                                                       WebResource.Builder 
builder = webResource.getRequestBuilder();
+
+                                                       for (NewCookie cook : 
loginResponse.getCookies()) {
+                                                               builder = 
builder.cookie(cook);
+                                                       }
+
+                                                       ClientResponse response 
= builder.get(ClientResponse.class);
+
+                                                       if (response != null) {
+                                                               String 
jsonString = response.getEntity(String.class);
+                                                               Gson gson = new 
Gson();
+                                                               
AtlasSearchResult searchResult = gson.fromJson(jsonString, 
AtlasSearchResult.class);
+
+                                                               ret = new 
ArrayList<>();
+
+                                                               if 
(searchResult != null) {
+                                                                       
List<AtlasEntityHeader> entityHeaderList = searchResult.getEntities();
+                                                                       for 
(AtlasEntityHeader entity : entityHeaderList) {
+                                                                               
ret.add((String) entity.getAttribute("qualifiedName"));
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch (Throwable t) {
+                                                       String msgDesc = 
"Exception while getting Atlas Entity Resource List.";
+                                                       LOG.error(msgDesc, t);
+                                               } finally {
+                                                       if (client != null) {
+                                                               
client.destroy();
+                                                       }
+                                               }
+                                       }
+
+                                       return ret;
+                               }
+                       });
+
+                       return list;
+               }
+
                String[] getAtlasUrls() {
                        String urlString = 
connectionProperties.get(CONFIG_REST_ADDRESS);
 

http://git-wip-us.apache.org/repos/asf/ranger/blob/f076f521/src/main/assembly/admin-web.xml
----------------------------------------------------------------------
diff --git a/src/main/assembly/admin-web.xml b/src/main/assembly/admin-web.xml
index 73bf8c0..d0f3545 100644
--- a/src/main/assembly/admin-web.xml
+++ b/src/main/assembly/admin-web.xml
@@ -324,6 +324,13 @@
               <unpack>false</unpack>
               <directoryMode>755</directoryMode>
               <fileMode>644</fileMode>
+          <dependencySets>
+              <dependencySet>
+                  <includes>
+                      
<include>org.apache.atlas:atlas-intg:jar:${atlas.version}</include>
+                  </includes>
+              </dependencySet>
+          </dependencySets>
           </binaries>
           <includes>
               <include>org.apache.ranger:ranger-atlas-plugin</include>

Reply via email to