You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2020/11/18 13:27:26 UTC

[unomi] branch UNOMI-400-hardcodedpropertyaccessors-refactoring updated: UNOMI-400 More refactoring on property accessors & added unit test

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

shuber pushed a commit to branch UNOMI-400-hardcodedpropertyaccessors-refactoring
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/UNOMI-400-hardcodedpropertyaccessors-refactoring by this push:
     new 10ededf  UNOMI-400 More refactoring on property accessors & added unit test
10ededf is described below

commit 10ededf90baca45fac0df63b03c1275365289acd
Author: Serge Huber <sh...@jahia.com>
AuthorDate: Wed Nov 18 14:27:11 2020 +0100

    UNOMI-400 More refactoring on property accessors & added unit test
---
 .../HardcodedPropertyAccessorRegistry.java         | 97 +++++++++++-----------
 .../conditions/PropertyConditionEvaluator.java     |  4 -
 ...PropertyAccessor.java => CampaignAccessor.java} |  7 +-
 ...dPropertyAccessor.java => ConsentAccessor.java} |  7 +-
 ...opertyAccessor.java => CustomItemAccessor.java} |  7 +-
 ...dedPropertyAccessor.java => EventAccessor.java} |  7 +-
 ...odedPropertyAccessor.java => GoalAccessor.java} |  7 +-
 .../accessors/HardcodedPropertyAccessor.java       |  4 +-
 ...odedPropertyAccessor.java => ItemAccessor.java} |  7 +-
 ...codedPropertyAccessor.java => MapAccessor.java} |  8 +-
 ...PropertyAccessor.java => MetadataAccessor.java} |  7 +-
 ...ertyAccessor.java => MetadataItemAccessor.java} |  7 +-
 ...dPropertyAccessor.java => ProfileAccessor.java} |  5 +-
 ...odedPropertyAccessor.java => RuleAccessor.java} |  7 +-
 ...dPropertyAccessor.java => SessionAccessor.java} |  7 +-
 ...yAccessor.java => TimestampedItemAccessor.java} |  7 +-
 .../HardcodedPropertyAccessorRegistryTest.java     | 56 +++++++++++++
 17 files changed, 160 insertions(+), 91 deletions(-)

diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessorRegistry.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistry.java
similarity index 56%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessorRegistry.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistry.java
index 6094a8f..59a70b5 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessorRegistry.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistry.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.plugins.baseplugin.conditions.accessors;
+package org.apache.unomi.plugins.baseplugin.conditions;
 
 import org.apache.unomi.api.*;
 import org.apache.unomi.api.campaigns.Campaign;
 import org.apache.unomi.api.goals.Goal;
 import org.apache.unomi.api.rules.Rule;
+import org.apache.unomi.plugins.baseplugin.conditions.accessors.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,19 +37,19 @@ public class HardcodedPropertyAccessorRegistry {
     Map<String, HardcodedPropertyAccessor> propertyAccessors = new HashMap<>();
 
     public HardcodedPropertyAccessorRegistry() {
-        propertyAccessors.put(Item.class.getName(), new ItemHardcodedPropertyAccessor(this));
-        propertyAccessors.put(MetadataItem.class.getName(), new MetadataItemHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Metadata.class.getName(), new MetadataHardcodedPropertyAccessor(this));
-        propertyAccessors.put(TimestampedItem.class.getName(), new TimestampedItemHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Event.class.getName(), new EventHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Profile.class.getName(), new ProfileHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Consent.class.getName(), new ConsentHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Session.class.getName(), new SessionHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Rule.class.getName(), new RuleHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Goal.class.getName(), new GoalHardcodedPropertyAccessor(this));
-        propertyAccessors.put(CustomItem.class.getName(), new CustomItemHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Campaign.class.getName(), new CampaignHardcodedPropertyAccessor(this));
-        propertyAccessors.put(Map.class.getName(), new MapHardcodedPropertyAccessor(this));
+        propertyAccessors.put(Item.class.getName(), new ItemAccessor(this));
+        propertyAccessors.put(MetadataItem.class.getName(), new MetadataItemAccessor(this));
+        propertyAccessors.put(Metadata.class.getName(), new MetadataAccessor(this));
+        propertyAccessors.put(TimestampedItem.class.getName(), new TimestampedItemAccessor(this));
+        propertyAccessors.put(Event.class.getName(), new EventAccessor(this));
+        propertyAccessors.put(Profile.class.getName(), new ProfileAccessor(this));
+        propertyAccessors.put(Consent.class.getName(), new ConsentAccessor(this));
+        propertyAccessors.put(Session.class.getName(), new SessionAccessor(this));
+        propertyAccessors.put(Rule.class.getName(), new RuleAccessor(this));
+        propertyAccessors.put(Goal.class.getName(), new GoalAccessor(this));
+        propertyAccessors.put(CustomItem.class.getName(), new CustomItemAccessor(this));
+        propertyAccessors.put(Campaign.class.getName(), new CampaignAccessor(this));
+        propertyAccessors.put(Map.class.getName(), new MapAccessor(this));
     }
 
     public static class NextTokens {
@@ -57,52 +58,52 @@ public class HardcodedPropertyAccessorRegistry {
     }
 
     protected NextTokens getNextTokens(String expression) {
-        NextTokens nextTokens = new NextTokens();
         if (expression.startsWith("[\"")) {
             int lookupNameBeginPos = "[\"".length();
-            int lookupNameEndPos = expression.indexOf("\"].", lookupNameBeginPos);
-            if (lookupNameEndPos > lookupNameBeginPos) {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos, lookupNameEndPos);
-                nextTokens.leftoverExpression = expression.substring(lookupNameEndPos+2);
-            } else {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos);
-                nextTokens.leftoverExpression = null;
-            }
+            int lookupNameEndPos = expression.indexOf("\"]", lookupNameBeginPos);
+            return buildNextTokens(expression, lookupNameBeginPos, lookupNameEndPos, lookupNameEndPos+2);
         } else if (expression.startsWith(".")) {
             int lookupNameBeginPos = ".".length();
-            int lookupNameEndPos = lookupNameBeginPos;
-            int dotlookupNameEndPos = expression.indexOf(".", lookupNameBeginPos);
-            int squareBracketlookupNameEndPos = expression.indexOf("[", lookupNameBeginPos);
-            if (dotlookupNameEndPos > lookupNameBeginPos && squareBracketlookupNameEndPos > lookupNameBeginPos) {
-                lookupNameEndPos = Math.min(dotlookupNameEndPos, squareBracketlookupNameEndPos);
-            } else if (dotlookupNameEndPos > lookupNameBeginPos) {
-                lookupNameEndPos = dotlookupNameEndPos;
-            } else if (squareBracketlookupNameEndPos > lookupNameBeginPos) {
-                lookupNameEndPos = squareBracketlookupNameEndPos;
-            } else {
-                lookupNameEndPos = -1;
-            }
-            if (lookupNameEndPos > lookupNameBeginPos) {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos, lookupNameEndPos);
-                nextTokens.leftoverExpression = expression.substring(lookupNameEndPos);
-            } else {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos);
-                nextTokens.leftoverExpression = null;
-            }
+            int lookupNameEndPos = findNextStartDelimiterPos(expression, lookupNameBeginPos);
+            return buildNextTokens(expression, lookupNameBeginPos, lookupNameEndPos, lookupNameEndPos);
         } else {
             int lookupNameBeginPos = 0;
-            int lookupNameEndPos = expression.indexOf(".", lookupNameBeginPos);
-            if (lookupNameEndPos > lookupNameBeginPos) {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos, lookupNameEndPos);
-                nextTokens.leftoverExpression = expression.substring(lookupNameEndPos);
-            } else {
-                nextTokens.propertyName = expression.substring(lookupNameBeginPos);
+            int lookupNameEndPos = findNextStartDelimiterPos(expression, lookupNameBeginPos);
+            return buildNextTokens(expression, lookupNameBeginPos, lookupNameEndPos, lookupNameEndPos);
+        }
+    }
+
+    private NextTokens buildNextTokens(String expression, int lookupNameBeginPos, int lookupNameEndPos, int leftoverStartPos) {
+        NextTokens nextTokens = new NextTokens();
+        if (lookupNameEndPos >= lookupNameBeginPos) {
+            nextTokens.propertyName = expression.substring(lookupNameBeginPos, lookupNameEndPos);
+            nextTokens.leftoverExpression = expression.substring(leftoverStartPos);
+            if ("".equals(nextTokens.leftoverExpression)) {
                 nextTokens.leftoverExpression = null;
             }
+        } else {
+            nextTokens.propertyName = expression.substring(lookupNameBeginPos);
+            nextTokens.leftoverExpression = null;
         }
         return nextTokens;
     }
 
+    private int findNextStartDelimiterPos(String expression, int lookupNameBeginPos) {
+        int lookupNameEndPos;
+        int dotlookupNameEndPos = expression.indexOf(".", lookupNameBeginPos);
+        int squareBracketlookupNameEndPos = expression.indexOf("[\"", lookupNameBeginPos);
+        if (dotlookupNameEndPos >= lookupNameBeginPos && squareBracketlookupNameEndPos >= lookupNameBeginPos) {
+            lookupNameEndPos = Math.min(dotlookupNameEndPos, squareBracketlookupNameEndPos);
+        } else if (dotlookupNameEndPos >= lookupNameBeginPos) {
+            lookupNameEndPos = dotlookupNameEndPos;
+        } else if (squareBracketlookupNameEndPos >= lookupNameBeginPos) {
+            lookupNameEndPos = squareBracketlookupNameEndPos;
+        } else {
+            lookupNameEndPos = -1;
+        }
+        return lookupNameEndPos;
+    }
+
 
     public Object getProperty(Object object, String expression) {
         if (expression == null) {
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
index aa50586..13319b6 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java
@@ -23,11 +23,7 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.unomi.api.*;
 import org.apache.unomi.api.conditions.Condition;
-import org.apache.unomi.api.goals.Goal;
-import org.apache.unomi.api.rules.Rule;
 import org.apache.unomi.plugins.baseplugin.conditions.accessors.HardcodedPropertyAccessor;
-import org.apache.unomi.plugins.baseplugin.conditions.accessors.HardcodedPropertyAccessorRegistry;
-import org.apache.unomi.scripting.ExpressionFilter;
 import org.apache.unomi.scripting.ExpressionFilterFactory;
 import org.apache.unomi.scripting.SecureFilteringClassLoader;
 import org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper;
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignAccessor.java
similarity index 82%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignAccessor.java
index 2718cfb..5736780 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CampaignAccessor.java
@@ -17,14 +17,15 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.campaigns.Campaign;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class CampaignHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Campaign> {
-    public CampaignHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+public class CampaignAccessor extends HardcodedPropertyAccessor<Campaign> {
+    public CampaignAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Campaign object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Campaign object, String propertyName, String leftoverExpression) {
         if ("startDate".equals(propertyName)) {
             return object.getStartDate();
         } else if ("endDate".equals(propertyName)) {
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentAccessor.java
similarity index 82%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentAccessor.java
index 5f63e3a..1b052b9 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ConsentAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Consent;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class ConsentHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Consent> {
+public class ConsentAccessor extends HardcodedPropertyAccessor<Consent> {
 
-    public ConsentHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public ConsentAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Consent object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Consent object, String propertyName, String leftoverExpression) {
         if ("typeIdentifier".equals(propertyName)) {
             return object.getTypeIdentifier();
         } else if ("scope".equals(propertyName)) {
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemAccessor.java
similarity index 77%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemAccessor.java
index ed85103..66ceab2 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/CustomItemAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.CustomItem;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class CustomItemHardcodedPropertyAccessor extends HardcodedPropertyAccessor<CustomItem> {
+public class CustomItemAccessor extends HardcodedPropertyAccessor<CustomItem> {
 
-    public CustomItemHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public CustomItemAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(CustomItem object, String propertyName, String leftoverExpression) {
+    public Object getProperty(CustomItem object, String propertyName, String leftoverExpression) {
         if ("properties".equals(propertyName)) {
             return registry.getProperty(object.getProperties(), leftoverExpression);
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventAccessor.java
similarity index 86%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventAccessor.java
index 81c1fb6..ba10bd9 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/EventAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Event;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class EventHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Event> {
+public class EventAccessor extends HardcodedPropertyAccessor<Event> {
 
-    public EventHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public EventAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Event object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Event object, String propertyName, String leftoverExpression) {
         if ("properties".equals(propertyName)) {
             return registry.getProperty(object.getProperties(), leftoverExpression);
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalAccessor.java
similarity index 77%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalAccessor.java
index c1cbbf0..03e0b6c 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/GoalAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.goals.Goal;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class GoalHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Goal> {
+public class GoalAccessor extends HardcodedPropertyAccessor<Goal> {
 
-    public GoalHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public GoalAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Goal object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Goal object, String propertyName, String leftoverExpression) {
         if ("campaignId".equals(propertyName)) {
             return object.getCampaignId();
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessor.java
index 9a8385b..7a414fd 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/HardcodedPropertyAccessor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
+
 /**
  * Hardcoded property accessors serve two purpose:
  * - control access to object fields, only expose the ones that are "safe" to use
@@ -31,6 +33,6 @@ public abstract class HardcodedPropertyAccessor<T> {
         this.registry = registry;
     }
 
-    abstract Object getProperty(T object, String propertyName, String leftoverExpression);
+    public abstract Object getProperty(T object, String propertyName, String leftoverExpression);
 
 }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemAccessor.java
similarity index 81%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemAccessor.java
index 41ce3a4..7dc9913 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ItemAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Item;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class ItemHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Item> {
+public class ItemAccessor extends HardcodedPropertyAccessor<Item> {
 
-    public ItemHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public ItemAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Item object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Item object, String propertyName, String leftoverExpression) {
         if ("itemId".equals(propertyName)) {
             return object.getItemId();
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapAccessor.java
similarity index 79%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapAccessor.java
index 92895fe..fb04257 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MapAccessor.java
@@ -16,15 +16,17 @@
  */
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
+
 import java.util.Map;
 
-public class MapHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Map> {
-    public MapHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+public class MapAccessor extends HardcodedPropertyAccessor<Map> {
+    public MapAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Map object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Map object, String propertyName, String leftoverExpression) {
         Object mapValue = object.get(propertyName);
         if (mapValue == null) {
             return null;
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataAccessor.java
similarity index 85%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataAccessor.java
index edb3310..c4effd1 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Metadata;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class MetadataHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Metadata> {
+public class MetadataAccessor extends HardcodedPropertyAccessor<Metadata> {
 
-    public MetadataHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public MetadataAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Metadata object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Metadata object, String propertyName, String leftoverExpression) {
         if ("id".equals(propertyName)) {
             return object.getId();
         } else if ("name".equals(propertyName)) {
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemAccessor.java
similarity index 76%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemAccessor.java
index 7c26c59..1c787a3 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/MetadataItemAccessor.java
@@ -17,14 +17,15 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.MetadataItem;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class MetadataItemHardcodedPropertyAccessor extends HardcodedPropertyAccessor<MetadataItem> {
-    public MetadataItemHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+public class MetadataItemAccessor extends HardcodedPropertyAccessor<MetadataItem> {
+    public MetadataItemAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(MetadataItem object, String propertyName, String leftoverExpression) {
+    public Object getProperty(MetadataItem object, String propertyName, String leftoverExpression) {
         if ("metadata".equals(propertyName)) {
             registry.getProperty(object.getMetadata(), leftoverExpression);
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileAccessor.java
similarity index 88%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileAccessor.java
index 3778c27..d008cfd 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/ProfileAccessor.java
@@ -17,10 +17,11 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Profile;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class ProfileHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Profile> {
+public class ProfileAccessor extends HardcodedPropertyAccessor<Profile> {
 
-    public ProfileHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public ProfileAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleAccessor.java
similarity index 79%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleAccessor.java
index 28e9bb1..e398798 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/RuleAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.rules.Rule;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class RuleHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Rule> {
+public class RuleAccessor extends HardcodedPropertyAccessor<Rule> {
 
-    public RuleHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public RuleAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Rule object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Rule object, String propertyName, String leftoverExpression) {
         if ("linkedItems".equals(propertyName)) {
             return object.getLinkedItems();
         } else if ("priority".equals(propertyName)) {
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionAccessor.java
similarity index 84%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionAccessor.java
index a318721..a3da510 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/SessionAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.Session;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class SessionHardcodedPropertyAccessor extends HardcodedPropertyAccessor<Session> {
+public class SessionAccessor extends HardcodedPropertyAccessor<Session> {
 
-    public SessionHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public SessionAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(Session object, String propertyName, String leftoverExpression) {
+    public Object getProperty(Session object, String propertyName, String leftoverExpression) {
         if ("duration".equals(propertyName)) {
             return object.getDuration();
         }
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemHardcodedPropertyAccessor.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemAccessor.java
similarity index 75%
rename from plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemHardcodedPropertyAccessor.java
rename to plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemAccessor.java
index c408e8c..7916a28 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemHardcodedPropertyAccessor.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/accessors/TimestampedItemAccessor.java
@@ -17,15 +17,16 @@
 package org.apache.unomi.plugins.baseplugin.conditions.accessors;
 
 import org.apache.unomi.api.TimestampedItem;
+import org.apache.unomi.plugins.baseplugin.conditions.HardcodedPropertyAccessorRegistry;
 
-public class TimestampedItemHardcodedPropertyAccessor extends HardcodedPropertyAccessor<TimestampedItem> {
+public class TimestampedItemAccessor extends HardcodedPropertyAccessor<TimestampedItem> {
 
-    public TimestampedItemHardcodedPropertyAccessor(HardcodedPropertyAccessorRegistry registry) {
+    public TimestampedItemAccessor(HardcodedPropertyAccessorRegistry registry) {
         super(registry);
     }
 
     @Override
-    Object getProperty(TimestampedItem object, String propertyName, String leftoverExpression) {
+    public Object getProperty(TimestampedItem object, String propertyName, String leftoverExpression) {
         if ("timeStamp".equals(propertyName)) {
             return object.getTimeStamp();
         }
diff --git a/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistryTest.java b/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistryTest.java
new file mode 100644
index 0000000..03bdb30
--- /dev/null
+++ b/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/HardcodedPropertyAccessorRegistryTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.unomi.plugins.baseplugin.conditions;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class HardcodedPropertyAccessorRegistryTest {
+
+    HardcodedPropertyAccessorRegistry registry = new HardcodedPropertyAccessorRegistry();
+
+    @Test
+    public void testGetNextTokens() {
+        assertTokens("test", "test", null);
+        assertTokens("test.test", "test", ".test");
+        assertTokens("test..", "test", "..");
+        assertTokens("test...", "test", "...");
+        assertTokens(".test", "test", null);
+        assertTokens(".test[abc]", "test[abc]", null);
+        assertTokens("[abc]", "[abc]", null);
+        assertTokens("[\"abc\"]", "abc", null);
+        assertTokens(".test[\"abc\"]", "test", "[\"abc\"]");
+        assertTokens("..test", "", ".test");
+        assertTokens(".[test", "[test", null);
+        assertTokens("[\"test\"][\"a\"]", "test", "[\"a\"]");
+        assertTokens("test[\"a\"].c", "test", "[\"a\"].c");
+        assertTokens("[\"b\"]", "b", null);
+        assertTokens("[\"b\"].c", "b", ".c");
+        assertTokens("[\"b.c\"].c", "b.c", ".c");
+        assertTokens("[\"b\"test\"].c", "b\"test", ".c");
+        assertTokens("[\"b\"]test\"].c", "b", "test\"].c");
+        assertTokens("[\"b\\.\\\"]c\"].c", "b\\.\\", "c\"].c");
+        assertTokens("[]", "[]", null);
+    }
+
+    private void assertTokens(String expression, String expectedPropertyName, String expectedLeftoverExpression) {
+        HardcodedPropertyAccessorRegistry.NextTokens nextTokens = registry.getNextTokens(expression);
+        assertEquals("Property name value was wrong", expectedPropertyName, nextTokens.propertyName);
+        assertEquals("Leftover expression value was wrong", expectedLeftoverExpression, nextTokens.leftoverExpression);
+    }
+}