You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by ql...@apache.org on 2016/07/26 16:23:04 UTC

incubator-unomi git commit: UNOMI-46 : Avoid NPE when asking for the definition of a missing tag + Return 404

Repository: incubator-unomi
Updated Branches:
  refs/heads/master c97f92274 -> 6832aae60


UNOMI-46 : Avoid NPE when asking for the definition of a missing tag + Return 404


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/6832aae6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/6832aae6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/6832aae6

Branch: refs/heads/master
Commit: 6832aae60fec56022a2de9ba7a5811c7fbf05934
Parents: c97f922
Author: Quentin Lamerand <ql...@jahia.com>
Authored: Tue Jul 26 18:22:58 2016 +0200
Committer: Quentin Lamerand <ql...@jahia.com>
Committed: Tue Jul 26 18:22:58 2016 +0200

----------------------------------------------------------------------
 .../unomi/rest/DefinitionsServiceEndPoint.java  | 26 +++++++++++++++-----
 .../apache/unomi/rest/LocalizationHelper.java   |  2 +-
 .../services/DefinitionsServiceImpl.java        |  3 ---
 .../services/services/ProfileServiceImpl.java   | 13 ++++++----
 4 files changed, 29 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
index 365124c..e9754a8 100644
--- a/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
+++ b/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
@@ -20,6 +20,7 @@ package org.apache.unomi.rest;
 import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing;
 import org.apache.unomi.api.PluginType;
 import org.apache.unomi.api.PropertyMergeStrategyType;
+import org.apache.unomi.api.Tag;
 import org.apache.unomi.api.ValueType;
 import org.apache.unomi.api.actions.ActionType;
 import org.apache.unomi.api.conditions.ConditionType;
@@ -86,14 +87,18 @@ public class DefinitionsServiceEndPoint {
      * Retrieves the tag with the specified identifier localized using the specified language.
      *
      * @param language     the language to use to localize.
-     * @param tag          the identifier of the tag to retrieve
+     * @param tagId          the identifier of the tag to retrieve
      * @param filterHidden {@code true} if hidden sub-tags should be filtered out, {@code false} otherwise
      * @return the tag with the specified identifier
      */
     @GET
     @Path("/tags/{tagId}")
-    public RESTTag getTag(@PathParam("tagId") String tag, @QueryParam("filterHidden") @DefaultValue("false") boolean filterHidden, @HeaderParam("Accept-Language") String language) {
-        return localizationHelper.generateTag(definitionsService.getTag(tag), language, filterHidden);
+    public RESTTag getTag(@PathParam("tagId") String tagId, @QueryParam("filterHidden") @DefaultValue("false") boolean filterHidden, @HeaderParam("Accept-Language") String language) {
+        Tag tag = definitionsService.getTag(tagId);
+        if (tag == null) {
+            throw new NotFoundException(new NoSuchElementException(tagId)); // return 404 when tag is not found
+        }
+        return localizationHelper.generateTag(tag, language, filterHidden);
     }
 
     /**
@@ -123,7 +128,10 @@ public class DefinitionsServiceEndPoint {
         String[] tagsArray = tags.split(",");
         Set<ConditionType> results = new LinkedHashSet<>();
         for (String s : tagsArray) {
-            results.addAll(definitionsService.getConditionTypesByTag(definitionsService.getTag(s), recursive));
+            Tag tag = definitionsService.getTag(s);
+            if (tag != null) {
+                results.addAll(definitionsService.getConditionTypesByTag(tag, recursive));
+            }
         }
         return localizationHelper.generateConditions(results, language);
     }
@@ -191,7 +199,10 @@ public class DefinitionsServiceEndPoint {
         String[] tagsArray = tags.split(",");
         Set<ActionType> results = new LinkedHashSet<>();
         for (String s : tagsArray) {
-            results.addAll(definitionsService.getActionTypeByTag(definitionsService.getTag(s), recursive));
+            Tag tag = definitionsService.getTag(s);
+            if (tag != null) {
+                results.addAll(definitionsService.getActionTypeByTag(tag, recursive));
+            }
         }
         return localizationHelper.generateActions(results, language);
     }
@@ -258,7 +269,10 @@ public class DefinitionsServiceEndPoint {
         String[] tagsArray = tags.split(",");
         Set<ValueType> results = new LinkedHashSet<>();
         for (String s : tagsArray) {
-            results.addAll(definitionsService.getValueTypeByTag(definitionsService.getTag(s), recursive));
+            Tag tag = definitionsService.getTag(s);
+            if (tag != null) {
+                results.addAll(definitionsService.getValueTypeByTag(tag, recursive));
+            }
         }
         return localizationHelper.generateValueTypes(results, language);
     }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
index 884ac8d..6cb5d89 100644
--- a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
+++ b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
@@ -219,7 +219,7 @@ public class LocalizationHelper {
      * @return a {@link RESTTag} based on the specified {@link Tag} and localized using the specified language
      */
     public RESTTag generateTag(Tag tag, String language, boolean filterHidden) {
-        if (filterHidden && tag.isHidden()) {
+        if (tag == null || (filterHidden && tag.isHidden())) {
             return null;
         }
         RESTTag result = new RESTTag();

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
index 7744652..b1a38a2 100644
--- a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
@@ -237,9 +237,6 @@ public class DefinitionsServiceImpl implements DefinitionsService, SynchronousBu
 
     public Tag getTag(String tagId) {
         Tag completeTag = tags.get(tagId);
-        if (completeTag == null) {
-            return null;
-        }
         return completeTag;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
index aa756b6..432e1f6 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
@@ -610,17 +610,20 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList
         return propertyTypes;
     }
 
-    public Set<PropertyType> getPropertyTypeByTag(String tag, boolean includeFromSubtags) {
+    public Set<PropertyType> getPropertyTypeByTag(String tagId, boolean includeFromSubtags) {
         Set<PropertyType> propertyTypes = new LinkedHashSet<PropertyType>();
-        Collection<PropertyType> directPropertyTypes = persistenceService.query("tags", tag, "rank", PropertyType.class);
+        Collection<PropertyType> directPropertyTypes = persistenceService.query("tags", tagId, "rank", PropertyType.class);
 
         if (directPropertyTypes != null) {
             propertyTypes.addAll(directPropertyTypes);
         }
         if (includeFromSubtags) {
-            for (Tag subTag : definitionsService.getTag(tag).getSubTags()) {
-                Set<PropertyType> childPropertyTypes = getPropertyTypeByTag(subTag.getId(), true);
-                propertyTypes.addAll(childPropertyTypes);
+            Tag tag = definitionsService.getTag(tagId);
+            if (tag != null) {
+                for (Tag subTag : tag.getSubTags()) {
+                    Set<PropertyType> childPropertyTypes = getPropertyTypeByTag(subTag.getId(), true);
+                    propertyTypes.addAll(childPropertyTypes);
+                }
             }
         }
         return propertyTypes;