Repository: ranger Updated Branches: refs/heads/ranger-0.7 121d1a981 -> c9e943570
RANGER-1348:Atlas Autocompletion not working properly Signed-off-by: Colm O hEigeartaigh <cohei...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/74e86ca1 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/74e86ca1 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/74e86ca1 Branch: refs/heads/ranger-0.7 Commit: 74e86ca146e01415c350940817131dbaeb5a6a02 Parents: 121d1a9 Author: zhangqiang2 <zhangqia...@zte.com.cn> Authored: Wed Mar 1 03:59:39 2017 -0500 Committer: Abhay Kulkarni <akulka...@hortonworks.com> Committed: Tue Mar 14 17:01:43 2017 -0700 ---------------------------------------------------------------------- .../services/atlas/RangerServiceAtlas.java | 100 ++- .../services/atlas/client/AtlasClient.java | 687 +++++++++++++++---- .../atlas/client/AtlasConnectionMgr.java | 4 +- .../services/atlas/client/AtlasResourceMgr.java | 65 +- .../json/model/ResourceEntityResponse.java | 60 ++ .../json/model/ResourceOperationResponse.java | 83 +++ .../json/model/ResourceTaxonomyResponse.java | 50 ++ .../atlas/json/model/ResourceTermResponse.java | 51 ++ .../atlas/json/model/ResourceTypeResponse.java | 53 ++ 9 files changed, 920 insertions(+), 233 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/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 ba4d263..7e7dfe3 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 @@ -30,61 +30,59 @@ import org.apache.ranger.plugin.service.RangerBaseService; import org.apache.ranger.plugin.service.ResourceLookupContext; import org.apache.ranger.services.atlas.client.AtlasResourceMgr; - public class RangerServiceAtlas extends RangerBaseService { - private static final Log LOG = LogFactory.getLog(RangerServiceAtlas.class); - - public RangerServiceAtlas() { - super(); - } + private static final Log LOG = LogFactory.getLog(RangerServiceAtlas.class); - @Override - public void init(RangerServiceDef serviceDef, RangerService service) { - super.init(serviceDef, service); - } + public RangerServiceAtlas() { + super(); + } - @Override - public HashMap<String,Object> validateConfig() throws Exception { - HashMap<String, Object> responseMap = new HashMap<String, Object>(); - String serviceName = getServiceName(); - if(LOG.isDebugEnabled()) { - LOG.debug("==> RangerServiceAtlas.validateConfig Service: (" + serviceName + " )"); - } - if ( configs != null) { - try { - responseMap = AtlasResourceMgr.validateConfig(serviceName, configs); - } catch (Exception e) { - LOG.error("<== RangerServiceAtlas.validateConfig Error:" + e); - throw e; - } - } - if(LOG.isDebugEnabled()) { - LOG.debug("<== RangerServiceAtlas.validateConfig Response : (" + responseMap + " )"); - } - return responseMap; - } + @Override + public void init(RangerServiceDef serviceDef, RangerService service) { + super.init(serviceDef, service); + } + @Override + public HashMap<String, Object> validateConfig() throws Exception { + HashMap<String, Object> responseMap = new HashMap<String, Object>(); + String serviceName = getServiceName(); + if (LOG.isDebugEnabled()) { + LOG.debug("==> RangerServiceAtlas.validateConfig Service: ("+ serviceName + " )"); + } + if (configs != null) { + try { + responseMap = AtlasResourceMgr.validateConfig(serviceName,configs); + } catch (Exception e) { + LOG.error("<== RangerServiceAtlas.validateConfig Error:" + e); + throw e; + } + } + if (LOG.isDebugEnabled()) { + LOG.debug("<== RangerServiceAtlas.validateConfig Response : ("+ responseMap + " )"); + } + return responseMap; + } - @Override - public List<String> lookupResource(ResourceLookupContext context) throws Exception { - List<String> ret = new ArrayList<String>(); - String serviceName = getServiceName(); - Map<String,String> configs = getConfigs(); - if(LOG.isDebugEnabled()) { - LOG.debug("==> RangerServiceAtlas.lookupResource Context: (" + context + ")"); - } - if (context != null) { - try { - ret = AtlasResourceMgr.getAtlasTermResources(serviceName,configs,context); - } catch (Exception e) { - LOG.error( "<==RangerServiceAtlas.lookupResource Error : " + e); - throw e; - } - } - if(LOG.isDebugEnabled()) { - LOG.debug("<== RangerServiceAtlas.lookupResource Response: (" + ret + ")"); - } - return ret; - } + @Override + public List<String> lookupResource(ResourceLookupContext context)throws Exception { + List<String> ret = new ArrayList<String>(); + String serviceName = getServiceName(); + Map<String, String> configs = getConfigs(); + if (LOG.isDebugEnabled()) { + LOG.debug("==> RangerServiceAtlas.lookupResource Context: ("+ context + ")"); + } + if (context != null) { + try { + ret = AtlasResourceMgr.getAtlasResources(serviceName, configs,context); + } catch (Exception e) { + LOG.error("<==RangerServiceAtlas.lookupResource Error : " + e); + throw e; + } + } + if (LOG.isDebugEnabled()) { + LOG.debug("<== RangerServiceAtlas.lookupResource Response: (" + ret+ ")"); + } + return ret; + } } http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasClient.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasClient.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasClient.java index b959f97..62b67dc 100644 --- a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasClient.java +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasClient.java @@ -35,7 +35,15 @@ import org.apache.log4j.Logger; import org.apache.ranger.plugin.client.BaseClient; import org.apache.ranger.plugin.client.HadoopException; import org.apache.ranger.plugin.util.PasswordUtils; - +import org.apache.ranger.services.atlas.json.model.ResourceEntityResponse; +import org.apache.ranger.services.atlas.json.model.ResourceOperationResponse; +import org.apache.ranger.services.atlas.json.model.ResourceOperationResponse.Results; +import org.apache.ranger.services.atlas.json.model.ResourceTaxonomyResponse; +import org.apache.ranger.services.atlas.json.model.ResourceTermResponse; +import org.apache.ranger.services.atlas.json.model.ResourceTypeResponse; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; @@ -46,201 +54,588 @@ public class AtlasClient extends BaseClient { private static final Logger LOG = Logger.getLogger(AtlasClient.class); private static final String EXPECTED_MIME_TYPE = "application/json"; private static final String ATLAS_STATUS_API_ENDPOINT = "/j_spring_security_check"; - private static final String ATLAS_LIST_TERM_API_ENDPOINT = "/api/atlas/types"; - private static final String errMessage = " You can still save the repository and start creating " - + "policies, but you would not be able to use autocomplete for " - + "resource names. Check ranger_admin.log for more info."; + /*** TYPE **/ + private static final String ATLAS_LIST_TYPE_API_ENDPOINT = "/api/atlas/types/"; + /**** ENTITY **/ + private static final String ATLAS_ENTITY_lIST_API_ENDPOINT = "/api/atlas/v1/entities"; + /*** TERM **/ + private static final String ATLAS_LIST_TERM_API_ENDPOINT = "/api/atlas/v1/taxonomies/Catalog/terms/"; + /*** TAXONOMY **/ + private static final String ATLAS_LIST_TAXONOMY_API_ENDPOINT = "/api/atlas/v1/taxonomies/"; + /*** OPERATION **/ + private static final String ATLAS_OPERATION_SEARCH_API_ENDPOINT = "/api/atlas/discovery/search/gremlin/query="; + private static final String errMessage = " You can still save the repository and start creating " + + "policies, but you would not be able to use autocomplete for " + + "resource names. Check ranger_admin.log for more info."; private String atlasUrl; private String userName; private String password; + private String statusUrl; - public AtlasClient(String serviceName, Map<String, String> configs) { + public AtlasClient(String serviceName, Map<String, String> configs) { - super(serviceName,configs,"atlas-client"); + super(serviceName, configs, "atlas-client"); this.atlasUrl = configs.get("atlas.rest.address"); this.userName = configs.get("username"); this.password = configs.get("password"); + this.statusUrl = atlasUrl + ATLAS_STATUS_API_ENDPOINT; if (this.atlasUrl == null || this.atlasUrl.isEmpty()) { LOG.error("No value found for configuration 'atlas.rest.address'. Atlas resource lookup will fail"); - } + } if (this.userName == null || this.userName.isEmpty()) { - LOG.error("No value found for configuration 'usename'. Atlas resource lookup will fail"); - } + LOG.error("No value found for configuration 'username'. Atlas resource lookup will fail"); + } if (this.password == null || this.password.isEmpty()) { - LOG.error("No value found for configuration 'password'. Atlas resource lookup will fail"); - } + LOG.error("No value found for configuration 'password'. Atlas resource lookup will fail"); + } if (LOG.isDebugEnabled()) { - LOG.debug("Atlas Client is build with url [" + this.atlasUrl + "] user: [" + this.userName + "], password: [" + "*********" + "]"); + LOG.debug("Atlas Client is build with url [" + this.atlasUrl + "] user: [" + this.userName + + "], password: [" + "*********" + "]"); } } - public List<String> getTermList( String termNameMatching, List<String> existingTermList) { + public List<String> getResourceList(final String resourceNameMatching, final String atlasResourceParameter, + final List<String> existingResourceList) { if (LOG.isDebugEnabled()) { - LOG.debug("Getting Atlas Terms list for termNameMatching : " + termNameMatching); + LOG.debug("Getting Atlas Resource list for resourceNameMatching : " + resourceNameMatching); } final String errMsg = errMessage; List<String> ret = null; - - Callable<List<String>> callableAtlasTermListGetter = new Callable<List<String>>() { + Callable<List<String>> callableAtlasResourceListGetter = new Callable<List<String>>() { @Override public List<String> call() { - List<String> atlasTermListGetter = null; - + List<String> atlasResourceListGetter = null; Subject subj = getLoginSubject(); - if (subj != null) { - atlasTermListGetter = Subject.doAs(subj, new PrivilegedAction<List<String>>() { - - @Override - public List<String> run() { - - List<String> lret = new ArrayList<String>(); - - String statusUrl = atlasUrl + ATLAS_STATUS_API_ENDPOINT; - String resultUrl = atlasUrl + ATLAS_LIST_TERM_API_ENDPOINT; - - Client client = null; - ClientResponse statusResponse = null; - ClientResponse resultResponse = null; - - try { - client = Client.create(); - WebResource webResource = client.resource(statusUrl); - MultivaluedMap<String, String> formData = new MultivaluedMapImpl(); - formData.add("j_username", userName); - - String decryptedPwd = null; + atlasResourceListGetter = Subject.doAs(subj, new PrivilegedAction<List<String>>() { + @Override + public List<String> run() { + Client client = null; + List<String> lret = new ArrayList<String>(); try { - decryptedPwd = PasswordUtils.decryptPassword(password); - } catch (Exception ex) { - LOG.info("Password decryption failed; trying Atlas connection with received password string"); - decryptedPwd = null; + client = Client.create(); + + if (null == resourceNameMatching || "".equals(resourceNameMatching)) { + lret = connectionTestResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } else if ("type".equals(resourceNameMatching)) { + lret = getTypeResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } else if ("term".equals(resourceNameMatching)) { + lret = getTermResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } else if ("taxonomy".equals(resourceNameMatching)) { + lret = getTaxonomyResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } else if ("entity".equals(resourceNameMatching)) { + lret = getEntityResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } else if ("operation".equals(resourceNameMatching)) { + lret = getOperationResource(resourceNameMatching, atlasResourceParameter, + existingResourceList, client); + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas Resource List."; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, + null, null); + throw hdpException; } finally { - if (decryptedPwd == null) { - decryptedPwd = password; + if (client != null) { + client.destroy(); } } - formData.add("j_password", decryptedPwd); + return lret; + } + }); + } + return atlasResourceListGetter; + } + }; + try { + ret = timedTask(callableAtlasResourceListGetter, 5, TimeUnit.SECONDS); + } catch (Throwable t) { + LOG.error("Unable to get Atlas Resource list", t); + String msgDesc = "Unable to get a valid response for " + "expected mime type : [" + EXPECTED_MIME_TYPE + + "] "; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } + return ret; + } - try { - statusResponse = webResource.type("application/x-www-form-urlencoded").post( - ClientResponse.class, formData); - } catch (Exception e) { - String msgDesc = "Unable to get a valid statusResponse for " - + "expected mime type : [" + EXPECTED_MIME_TYPE - + "] URL : " + statusUrl + " - got null response."; - LOG.error(msgDesc); - } + private ClientResponse getStatusResponse(Client client) { + final String errMsg = errMessage; + ClientResponse statusResponse = null; + try { + WebResource webResource = client.resource(statusUrl); + MultivaluedMap<String, String> formData = new MultivaluedMapImpl(); + formData.add("j_username", userName); + String decryptedPwd = null; + try { + decryptedPwd = PasswordUtils.decryptPassword(password); + } catch (Exception ex) { + LOG.info("Password decryption failed; trying Atlas connection with received password string"); + decryptedPwd = null; + } finally { + if (decryptedPwd == null) { + decryptedPwd = password; + } + } + formData.add("j_password", PasswordUtils.decryptPassword(password)); + try { + statusResponse = webResource.type("application/x-www-form-urlencoded").post(ClientResponse.class, + formData); + } catch (Exception e) { + String msgDesc = "Unable to get a valid statusResponse for " + "expected mime type : [" + + EXPECTED_MIME_TYPE + "] URL : " + statusUrl + " - got null response."; + LOG.error(msgDesc); + } + if (LOG.isDebugEnabled()) { + LOG.debug("getStatusResponse():calling " + statusUrl); + } + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getStatusResponse():response.getStatus()= " + statusResponse.getStatus()); + } + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas Resource List." + " URL : " + statusUrl; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } + return statusResponse; + } - if (LOG.isDebugEnabled()) { - LOG.debug("getTermList():calling " + statusUrl); - } + public List<String> connectionTestResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + String testConnectiontUrl = atlasUrl + ATLAS_LIST_TYPE_API_ENDPOINT; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; + try { + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTypeResource():response.getStatus()= " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceTestConnection = client.resource(testConnectiontUrl); + WebResource.Builder builder = webResourceTestConnection.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + lret.add(resultResponse.getEntity(String.class)); + } else { + LOG.info("connectionTestResource():response.getStatus()= " + statusResponse.getStatus() + + " for URL " + statusUrl + ", so returning null list"); + LOG.info(statusResponse.getEntity(String.class)); + lret = null; + } + } + } catch (Throwable t) { + lret = null; + String msgDesc = "Exception while getting Atlas Resource List." + " URL : " + statusUrl; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } + if (client != null) { + client.destroy(); + } + } + return lret; + } - if (statusResponse != null) { - if (LOG.isDebugEnabled()) { - LOG.debug("getTermList():response.getStatus()= " + statusResponse.getStatus()); - } - if (statusResponse.getStatus() == 200) { - WebResource webResource2 = client - .resource(resultUrl); - WebResource.Builder builder = webResource2.getRequestBuilder(); - for (NewCookie cook : statusResponse.getCookies()) { builder = builder.cookie(cook); + public List<String> getTypeResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; + try { + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTypeResource():response.getStatus()= " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceType = client.resource(atlasUrl + ATLAS_LIST_TYPE_API_ENDPOINT); + WebResource.Builder builder = webResourceType.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + if (resultResponse != null) { + String jsonString = resultResponse.getEntity(String.class).toString(); + Gson gson = new Gson(); + List<String> responseResourceList = new ArrayList<String>(); + ResourceTypeResponse resourceTypeResponses = gson.fromJson(jsonString, + ResourceTypeResponse.class); + if (resourceTypeResponses != null) { + responseResourceList = resourceTypeResponses.getResults(); + } + if (responseResourceList != null) { + for (String responseResource : responseResourceList) { + if (responseResource != null) { + if (existingResourceList != null && existingResourceList.contains(responseResource)) { + continue; + } + if (atlasResourceParameter == null || atlasResourceParameter.isEmpty() + || responseResource.startsWith(atlasResourceParameter)) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTypeResource():Adding existsResource " + responseResource); + } + lret.add(responseResource); } - resultResponse = builder.get(ClientResponse.class); - lret.add(resultResponse.getEntity(String.class)); - } else{ - LOG.info("getTermList():response.getStatus()= " + statusResponse.getStatus() + " for URL " + statusUrl + ", so returning null list"); - LOG.info(statusResponse.getEntity(String.class)); - lret = null; } } - } catch (Throwable t) { - lret = null; - String msgDesc = "Exception while getting Atlas Term List." - + " URL : " + statusUrl; - HadoopException hdpException = new HadoopException(msgDesc, - t); - LOG.error(msgDesc, t); - hdpException.generateResponseDataMap(false, - BaseClient.getMessage(t), msgDesc + errMsg, null, - null); - throw hdpException; - - } finally { - if (statusResponse != null) { - statusResponse.close(); + } + } + } + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas TypeResource List." + " URL : " + atlasUrl + + ATLAS_LIST_TYPE_API_ENDPOINT; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } + if (client != null) { + client.destroy(); + } + } + return lret; + } + + public List<String> getEntityResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; + + try { + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getEntityResource():response.getStatus() = " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceEntity = client.resource(atlasUrl + ATLAS_ENTITY_lIST_API_ENDPOINT); + WebResource.Builder builder = webResourceEntity.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + if (resultResponse != null) { + String jsonString = resultResponse.getEntity(String.class).toString(); + Gson gson = new Gson(); + List<String> responseResourceList = new ArrayList<String>(); + List<ResourceEntityResponse> resourceEntityResponses = gson.fromJson(jsonString, + new TypeToken<List<ResourceEntityResponse>>() { + }.getType()); + if (resourceEntityResponses != null) { + for (ResourceEntityResponse resourceEntityResponse : resourceEntityResponses) { + if (resourceEntityResponse != null) { + responseResourceList.add(resourceEntityResponse.getName()); + } } - if (resultResponse != null) { - resultResponse.close(); + if (responseResourceList != null) { + for (String responseResource : responseResourceList) { + if (responseResource != null) { + if (existingResourceList != null + && existingResourceList.contains(responseResource)) { + continue; + } + if (atlasResourceParameter == null || atlasResourceParameter.isEmpty() + || responseResource.startsWith(atlasResourceParameter)) { + if (LOG.isDebugEnabled()) { + LOG.debug("getEntityResource():Adding existsResource " + + responseResource); + } + lret.add(responseResource); + } + } + } } + } + } + } + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas getEntityResource List." + " URL : " + atlasUrl + + ATLAS_ENTITY_lIST_API_ENDPOINT; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } + } + return lret; + } - if (client != null) { - client.destroy(); + public List<String> getTermResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; + try { + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTermResource():response.getStatus()= " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceTerm = client.resource(atlasUrl + ATLAS_LIST_TERM_API_ENDPOINT); + WebResource.Builder builder = webResourceTerm.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + if (resultResponse != null) { + String jsonString = resultResponse.getEntity(String.class).toString(); + Gson gson = new Gson(); + List<String> responseResourceList = new ArrayList<String>(); + List<ResourceTermResponse> resourceTermResponses = gson.fromJson(jsonString, + new TypeToken<List<ResourceTermResponse>>() { + }.getType()); + for (ResourceTermResponse resourceTermResponse : resourceTermResponses) { + responseResourceList.add(resourceTermResponse.getName()); + } + if (responseResourceList != null) { + for (String responseResource : responseResourceList) { + if (responseResource != null) { + if (existingResourceList != null && existingResourceList.contains(responseResource)) { + continue; + } + if (atlasResourceParameter == null || atlasResourceParameter.isEmpty() + || responseResource.startsWith(atlasResourceParameter)) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTermResource():Adding existsResource " + responseResource); + } + lret.add(responseResource); + } + } } } - return lret; } - } ); } - return atlasTermListGetter; - } - }; + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas getTermResource List." + " URL : " + atlasUrl + + ATLAS_LIST_TERM_API_ENDPOINT; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } + } + return lret; + } + + public List<String> getTaxonomyResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; try { - ret = timedTask(callableAtlasTermListGetter, 5, TimeUnit.SECONDS); - } catch ( Throwable t) { - LOG.error("Unable to get Atlas Terms list from [" + atlasUrl + "]", t); - String msgDesc = "Unable to get a valid response for " - + "expected mime type : [" + EXPECTED_MIME_TYPE - + "] URL : " + atlasUrl; - HadoopException hdpException = new HadoopException(msgDesc, - t); + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTaxonomyResource():response.getStatus()= " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceTaxonomy = client.resource(atlasUrl + ATLAS_LIST_TAXONOMY_API_ENDPOINT); + WebResource.Builder builder = webResourceTaxonomy.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + if (resultResponse != null) { + String jsonString = resultResponse.getEntity(String.class).toString(); + Gson gson = new Gson(); + List<String> responseResourceList = new ArrayList<String>(); + List<ResourceTaxonomyResponse> resourceTaxonomyResponses = gson.fromJson(jsonString, + new TypeToken<List<ResourceTaxonomyResponse>>() { + }.getType()); + for (ResourceTaxonomyResponse resourceTaxonomyResponse : resourceTaxonomyResponses) { + responseResourceList.add(resourceTaxonomyResponse.getName()); + } + if (responseResourceList != null) { + for (String responseResource : responseResourceList) { + if (responseResource != null) { + if (existingResourceList != null && existingResourceList.contains(responseResource)) { + continue; + } + if (atlasResourceParameter == null || atlasResourceParameter.isEmpty() + || responseResource.startsWith(atlasResourceParameter)) { + if (LOG.isDebugEnabled()) { + LOG.debug("getTaxonomyResource():Adding existsResource " + responseResource); + } + lret.add(responseResource); + } + } + } + } + } + } + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas TaxonomyResource List." + " URL : " + atlasUrl + + ATLAS_LIST_TAXONOMY_API_ENDPOINT; + HadoopException hdpException = new HadoopException(msgDesc, t); LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); + throw hdpException; + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } + } + return lret; + } - hdpException.generateResponseDataMap(false, - BaseClient.getMessage(t), msgDesc + errMsg, null, - null); + public List<String> getOperationResource(final String resourceNameMatching, final String atlasResourceParameter, + List<String> existingResourceList, Client client) { + List<String> lret = new ArrayList<String>(); + final String errMsg = errMessage; + ClientResponse statusResponse = null; + ClientResponse resultResponse = null; + try { + client = Client.create(); + statusResponse = getStatusResponse(client); + if (statusResponse != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getOperationResource():response.getStatus()= " + statusResponse.getStatus()); + } + if (statusResponse.getStatus() == 200) { + WebResource webResourceEntity = client.resource(atlasUrl + ATLAS_OPERATION_SEARCH_API_ENDPOINT); + WebResource.Builder builder = webResourceEntity.getRequestBuilder(); + for (NewCookie cook : statusResponse.getCookies()) { + builder = builder.cookie(cook); + } + resultResponse = builder.get(ClientResponse.class); + if (resultResponse != null) { + String jsonString = resultResponse.getEntity(String.class).toString(); + Gson gson = new Gson(); + List<String> responseResourceList = new ArrayList<String>(); + List<ResourceOperationResponse> resourceOperationResponses = gson.fromJson(jsonString, + new TypeToken<List<ResourceOperationResponse>>() { + }.getType()); + for (ResourceOperationResponse resourceOperationResponse : resourceOperationResponses) { + List<Results> results = resourceOperationResponse.getResults(); + for (Results result : results) { + responseResourceList.add(result.getResult()); + } + } + if (responseResourceList != null) { + for (String responseResource : responseResourceList) { + if (responseResource != null) { + if (existingResourceList != null && existingResourceList.contains(responseResource)) { + continue; + } + if (atlasResourceParameter == null || atlasResourceParameter.isEmpty() + || responseResource.startsWith(atlasResourceParameter)) { + if (LOG.isDebugEnabled()) { + LOG.debug("getOperationResource():Adding existsResource " + + responseResource); + } + lret.add(responseResource); + } + } + } + } + } + } + } + } catch (Throwable t) { + String msgDesc = "Exception while getting Atlas OperationResource List." + " URL : " + atlasUrl + + ATLAS_OPERATION_SEARCH_API_ENDPOINT; + HadoopException hdpException = new HadoopException(msgDesc, t); + LOG.error(msgDesc, t); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); throw hdpException; + + } finally { + if (statusResponse != null) { + statusResponse.close(); + } + if (resultResponse != null) { + resultResponse.close(); + } } - return ret; + return lret; } - public static HashMap<String, Object> connectionTest(String serviceName, - Map<String, String> configs) { + public static HashMap<String, Object> connectionTest(String serviceName, Map<String, String> configs) { String errMsg = errMessage; boolean connectivityStatus = false; HashMap<String, Object> responseData = new HashMap<String, Object>(); + AtlasClient AtlasClient = getAtlasClient(serviceName, configs); + List<String> strList = getAtlasResource(AtlasClient, "", "", null); - AtlasClient AtlasClient = getAtlasClient(serviceName, - configs); - List<String> strList = getAtlasTermResource(AtlasClient, "",null); - - if (strList != null && strList.size() > 0 ) { + if (strList != null && strList.size() > 0) { if (LOG.isDebugEnabled()) { - LOG.debug("TESTING Term list size" + strList.size() + " Atlas Terms"); + LOG.debug("TESTING Resource list size" + strList.size() + " Atlas Resource"); } connectivityStatus = true; } - if (connectivityStatus) { String successMsg = "ConnectionTest Successful"; - BaseClient.generateResponseDataMap(connectivityStatus, successMsg, - successMsg, null, null, responseData); + BaseClient.generateResponseDataMap(connectivityStatus, successMsg, successMsg, null, null, responseData); } else { - String failureMsg = "Unable to retrieve any Atlas Terms using given parameters."; - BaseClient.generateResponseDataMap(connectivityStatus, failureMsg, - failureMsg + errMsg, null, null, responseData); + String failureMsg = "Unable to retrieve any Atlas Resource using given parameters."; + BaseClient.generateResponseDataMap(connectivityStatus, failureMsg, failureMsg + errMsg, null, null, + responseData); } - return responseData; } - public static AtlasClient getAtlasClient(String serviceName, - Map<String, String> configs) { + public static AtlasClient getAtlasClient(String serviceName, Map<String, String> configs) { AtlasClient AtlasClient = null; if (LOG.isDebugEnabled()) { LOG.debug("Getting AtlasClient for datasource: " + serviceName); @@ -250,56 +645,50 @@ public class AtlasClient extends BaseClient { String msgDesc = "Could not connect as Connection ConfigMap is empty."; LOG.error(msgDesc); HadoopException hdpException = new HadoopException(msgDesc); - hdpException.generateResponseDataMap(false, msgDesc, msgDesc - + errMsg, null, null); + hdpException.generateResponseDataMap(false, msgDesc, msgDesc + errMsg, null, null); throw hdpException; } else { - AtlasClient = new AtlasClient (serviceName, configs); + AtlasClient = new AtlasClient(serviceName, configs); } return AtlasClient; } - public static List<String> getAtlasTermResource (final AtlasClient atlasClient, - String atlasTermName, List<String> existingAtlasTermName) { + public static List<String> getAtlasResource(final AtlasClient atlasClient, String atlasResourceName, + String atlasResourceParameter, List<String> existingAtlasResourceName) { List<String> resultList = new ArrayList<String>(); String errMsg = errMessage; try { if (atlasClient == null) { - String msgDesc = "Unable to get Atlas Terms : AtlasClient is null."; + String msgDesc = "Unable to get Atlas Resource : AtlasClient is null."; LOG.error(msgDesc); HadoopException hdpException = new HadoopException(msgDesc); - hdpException.generateResponseDataMap(false, msgDesc, msgDesc - + errMsg, null, null); + hdpException.generateResponseDataMap(false, msgDesc, msgDesc + errMsg, null, null); throw hdpException; } - if (atlasTermName != null) { - String finalAtlasTermName = atlasTermName.trim(); - resultList = atlasClient - .getTermList(finalAtlasTermName,existingAtlasTermName); + if (atlasResourceName != null) { + String finalAtlasResourceName = atlasResourceName.trim(); + resultList = atlasClient.getResourceList(finalAtlasResourceName, atlasResourceParameter, + existingAtlasResourceName); if (resultList != null) { if (LOG.isDebugEnabled()) { - LOG.debug("Returning list of " + resultList.size() + " Atlas Terms"); + LOG.debug("Returning list of " + resultList.size() + " Atlas Resources"); } } } - }catch (Throwable t) { - String msgDesc = "getAtlasResource: Unable to get Atlas resources."; + } catch (Throwable t) { + String msgDesc = "getAtlasResource: Unable to get Atlas Resources."; LOG.error(msgDesc, t); HadoopException hdpException = new HadoopException(msgDesc); - - hdpException.generateResponseDataMap(false, - BaseClient.getMessage(t), msgDesc + errMsg, null, null); + hdpException.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + errMsg, null, null); throw hdpException; } - return resultList; } - public static <T> T timedTask(Callable<T> callableObj, long timeout, - TimeUnit timeUnit) throws Exception { + public static <T> T timedTask(Callable<T> callableObj, long timeout, TimeUnit timeUnit) throws Exception { return callableObj.call(); } } http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasConnectionMgr.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasConnectionMgr.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasConnectionMgr.java index 84e24c5..140f91e 100644 --- a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasConnectionMgr.java +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasConnectionMgr.java @@ -24,7 +24,7 @@ import java.util.Map; public class AtlasConnectionMgr { public static AtlasClient getAtlasClient(String serviceName, Map<String, String> configs) { - return new AtlasClient(serviceName, configs); - } + return new AtlasClient(serviceName, configs); + } } http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasResourceMgr.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasResourceMgr.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasResourceMgr.java index 93b2662..cb2ac9a 100644 --- a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasResourceMgr.java +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/client/AtlasResourceMgr.java @@ -26,10 +26,8 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.ranger.plugin.service.ResourceLookupContext; - public class AtlasResourceMgr { private static final Logger LOG = Logger.getLogger(AtlasResourceMgr.class); - private static final String ATLASTERM = "terms"; public static HashMap<String, Object> validateConfig(String serviceName, Map<String, String> configs) throws Exception { @@ -52,37 +50,42 @@ public class AtlasResourceMgr { return ret; } - public static List<String> getAtlasTermResources(String serviceName, Map<String, String> configs,ResourceLookupContext context) { - String userInput = context.getUserInput(); - Map<String, List<String>> resourceMap = context.getResources(); - List<String> resultList = null; - List<String> atlasTermList = null; - String atlasTermName = null; - - if ( resourceMap != null && !resourceMap.isEmpty() && - resourceMap.get(ATLASTERM) != null ) { - atlasTermName = userInput; - atlasTermList = resourceMap.get(ATLASTERM); + public static List<String> getAtlasResources(String serviceName, Map<String, String> configs, + ResourceLookupContext context) { + String userInput = context.getUserInput(); + Map<String, List<String>> resourceMap = context.getResources(); + List<String> resultList = null; + List<String> atlasResourceList = null; + String atlasResourceName = null; + String atlasResourceParameter = null; + if (null != context) { + atlasResourceName = context.getResourceName(); + } + if (resourceMap != null && !resourceMap.isEmpty()) { + atlasResourceParameter = userInput; + atlasResourceList = resourceMap.get(atlasResourceName); } else { - atlasTermName = userInput; + atlasResourceParameter = userInput; } - if (configs == null || configs.isEmpty()) { - LOG.error("Connection Config is empty"); - } else { - resultList = getAtlasTermResource(serviceName, configs, atlasTermName,atlasTermList); - } - return resultList; - } + if (configs == null || configs.isEmpty()) { + LOG.error("Connection Config is empty"); + } else { + resultList = getAtlasResource(serviceName, configs, atlasResourceName, atlasResourceParameter, + atlasResourceList); + } + return resultList; + } - public static List<String> getAtlasTermResource(String serviceName, Map<String, String> configs, String atlasTermName, List<String> atlasTermList) { - final AtlasClient atlasClient = AtlasConnectionMgr.getAtlasClient(serviceName, configs); - List<String> termList = null; - if (atlasClient != null) { - synchronized(atlasClient) { - termList = atlasClient.getTermList(atlasTermName, atlasTermList); - } - } - return termList; - } + public static List<String> getAtlasResource(String serviceName, Map<String, String> configs, + String atlasResourceName, String atlasResourceParameter, List<String> atlasResourceList) { + final AtlasClient atlasClient = AtlasConnectionMgr.getAtlasClient(serviceName, configs); + List<String> resourceList = null; + if (atlasClient != null) { + synchronized (atlasClient) { + resourceList = atlasClient.getResourceList(atlasResourceName, atlasResourceParameter, atlasResourceList); + } + } + return resourceList; + } } http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceEntityResponse.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceEntityResponse.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceEntityResponse.java new file mode 100644 index 0000000..a9ebc66 --- /dev/null +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceEntityResponse.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ranger.services.atlas.json.model; + +public class ResourceEntityResponse { + + private String href; + private String name; + private String id; + private String type; + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + +} http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceOperationResponse.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceOperationResponse.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceOperationResponse.java new file mode 100644 index 0000000..d017e47 --- /dev/null +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceOperationResponse.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ranger.services.atlas.json.model; + +import java.util.List; + +public class ResourceOperationResponse { + private String requestId; + private String query; + private String queryType; + private List<Results> results; + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getQueryType() { + return queryType; + } + + public void setQueryType(String queryType) { + this.queryType = queryType; + } + + public List<Results> getResults() { + return results; + } + + public void setResults(List<Results> results) { + this.results = results; + } + + public class Results { + + private String result; + private String count; + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + } + +} http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTaxonomyResponse.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTaxonomyResponse.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTaxonomyResponse.java new file mode 100644 index 0000000..8d4d183 --- /dev/null +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTaxonomyResponse.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ranger.services.atlas.json.model; + +public class ResourceTaxonomyResponse { + private String href; + private String name; + private String description; + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTermResponse.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTermResponse.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTermResponse.java new file mode 100644 index 0000000..75259ec --- /dev/null +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTermResponse.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ranger.services.atlas.json.model; + +public class ResourceTermResponse { + + private String href; + private String name; + private String description; + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} http://git-wip-us.apache.org/repos/asf/ranger/blob/74e86ca1/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTypeResponse.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTypeResponse.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTypeResponse.java new file mode 100644 index 0000000..6df9782 --- /dev/null +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/json/model/ResourceTypeResponse.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ranger.services.atlas.json.model; + +import java.util.List; + +public class ResourceTypeResponse { + + private List<String> results; + private String count; + private String requestId; + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public List<String> getResults() { + return results; + } + + public void setResults(List<String> results) { + this.results = results; + } + +}