This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 957a02c  ATLAS-3180: enhanced typedef retrieval to support filter by 
serviceType
957a02c is described below

commit 957a02c8a9291d57b30f5ac8ac41e473a95ae4e5
Author: Diego Marino Monetti <dmari...@gmail.com>
AuthorDate: Mon Apr 29 17:48:22 2019 +0200

    ATLAS-3180: enhanced typedef retrieval to support filter by serviceType
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
    (cherry picked from commit a92ddec05d0ae0d2fe87d931e3dcfa287c60e7f6)
---
 .../java/org/apache/atlas/model/SearchFilter.java  | 12 ++++---
 .../apache/atlas/repository/util/FilterUtil.java   | 40 +++++++++++++++++++---
 2 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/intg/src/main/java/org/apache/atlas/model/SearchFilter.java 
b/intg/src/main/java/org/apache/atlas/model/SearchFilter.java
index 62929a7..7410800 100644
--- a/intg/src/main/java/org/apache/atlas/model/SearchFilter.java
+++ b/intg/src/main/java/org/apache/atlas/model/SearchFilter.java
@@ -40,11 +40,13 @@ import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.PROPERTY)
 public class SearchFilter {
-    public static final String PARAM_TYPE = "type";
-    public static final String PARAM_NAME = "name";
-    public static final String PARAM_SUPERTYPE = "supertype";
-    public static final String PARAM_NOT_SUPERTYPE = "notsupertype";
-    public static final String PARAM_NOT_NAME      = "notname";
+    public static final String PARAM_TYPE            = "type";
+    public static final String PARAM_NAME            = "name";
+    public static final String PARAM_SUPERTYPE       = "supertype";
+    public static final String PARAM_SERVICETYPE     = "servicetype";
+    public static final String PARAM_NOT_SUPERTYPE   = "notsupertype";
+    public static final String PARAM_NOT_SERVICETYPE = "notservicetype";
+    public static final String PARAM_NOT_NAME        = "notname";
 
     /**
      * to specify whether the result should be sorted? If yes, whether asc or 
desc.
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/util/FilterUtil.java 
b/repository/src/main/java/org/apache/atlas/repository/util/FilterUtil.java
index 7057ace..5b16dda 100644
--- a/repository/src/main/java/org/apache/atlas/repository/util/FilterUtil.java
+++ b/repository/src/main/java/org/apache/atlas/repository/util/FilterUtil.java
@@ -37,11 +37,13 @@ public class FilterUtil {
     public static Predicate getPredicateFromSearchFilter(SearchFilter 
searchFilter) {
         List<Predicate> predicates = new ArrayList<>();
 
-        final String       type         = 
searchFilter.getParam(SearchFilter.PARAM_TYPE);
-        final String       name         = 
searchFilter.getParam(SearchFilter.PARAM_NAME);
-        final String       supertype    = 
searchFilter.getParam(SearchFilter.PARAM_SUPERTYPE);
-        final String       notSupertype = 
searchFilter.getParam(SearchFilter.PARAM_NOT_SUPERTYPE);
-        final List<String> notNames     = 
searchFilter.getParams(SearchFilter.PARAM_NOT_NAME);
+        final String       type           = 
searchFilter.getParam(SearchFilter.PARAM_TYPE);
+        final String       name           = 
searchFilter.getParam(SearchFilter.PARAM_NAME);
+        final String       supertype      = 
searchFilter.getParam(SearchFilter.PARAM_SUPERTYPE);
+        final String       serviceType    = 
searchFilter.getParam(SearchFilter.PARAM_SERVICETYPE);
+        final String       notSupertype   = 
searchFilter.getParam(SearchFilter.PARAM_NOT_SUPERTYPE);
+        final String       notServiceType = 
searchFilter.getParam(SearchFilter.PARAM_NOT_SERVICETYPE);
+        final List<String> notNames       = 
searchFilter.getParams(SearchFilter.PARAM_NOT_NAME);
 
         // Add filter for the type/category
         if (StringUtils.isNotBlank(type)) {
@@ -53,6 +55,11 @@ public class FilterUtil {
             predicates.add(getNamePredicate(name));
         }
 
+        // Add filter for the serviceType
+        if(StringUtils.isNotBlank(serviceType)) {
+            predicates.add(getServiceTypePredicate(serviceType));
+        }
+
         // Add filter for the supertype
         if (StringUtils.isNotBlank(supertype)) {
             predicates.add(getSuperTypePredicate(supertype));
@@ -63,6 +70,16 @@ public class FilterUtil {
             predicates.add(new 
NotPredicate(getSuperTypePredicate(notSupertype)));
         }
 
+        // Add filter for the serviceType negation
+        // NOTE: Creating code for the exclusion of multiple service types is 
currently useless.
+        // In fact the getSearchFilter in TypeREST.java uses the 
HttpServletRequest.getParameter(key)
+        // that if the key takes more values it takes only the first the 
value. Could be useful
+        // to change the getSearchFilter to use getParameterValues instead of 
getParameter.
+        if (StringUtils.isNotBlank(notServiceType)) {
+            predicates.add(new 
NotPredicate(getServiceTypePredicate(notServiceType)));
+        }
+
+
         // Add filter for the type negation
         if (CollectionUtils.isNotEmpty(notNames)) {
             for (String notName : notNames) {
@@ -86,6 +103,19 @@ public class FilterUtil {
         };
     }
 
+    private static Predicate getServiceTypePredicate(final String serviceType) 
{
+        return new Predicate() {
+            private boolean isAtlasType(Object o) {
+                return o instanceof AtlasType;
+            }
+
+            @Override
+            public boolean evaluate(Object o) {
+                return isAtlasType(o) && Objects.equals(((AtlasType) 
o).getServiceType(), serviceType);
+            }
+        };
+    }
+
     private static Predicate getSuperTypePredicate(final String supertype) {
         return new Predicate() {
             private boolean isClassificationType(Object o) {

Reply via email to