Merge pull request #102 from apache/UNOMI-250-refactor-services-impl

UNOMI-250 Refactoring services into seperate Java packages
diff --git a/services/src/main/java/org/apache/unomi/services/services/AbstractServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/AbstractServiceImpl.java
similarity index 86%
rename from services/src/main/java/org/apache/unomi/services/services/AbstractServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/AbstractServiceImpl.java
index c9f967d..22cf911 100644
--- a/services/src/main/java/org/apache/unomi/services/services/AbstractServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/AbstractServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl;
 
 import org.apache.unomi.api.Metadata;
 import org.apache.unomi.api.MetadataItem;
@@ -32,9 +32,9 @@
  */
 public abstract class AbstractServiceImpl {
 
-    PersistenceService persistenceService;
+    protected PersistenceService persistenceService;
 
-    DefinitionsService definitionsService;
+    protected DefinitionsService definitionsService;
 
     public void setPersistenceService(PersistenceService persistenceService) {
         this.persistenceService = persistenceService;
@@ -44,7 +44,7 @@
         this.definitionsService = definitionsService;
     }
 
-    <T extends MetadataItem> PartialList<Metadata> getMetadatas(int offset, int size, String sortBy, Class<T> clazz) {
+    protected <T extends MetadataItem> PartialList<Metadata> getMetadatas(int offset, int size, String sortBy, Class<T> clazz) {
         PartialList<T> items = persistenceService.getAllItems(clazz, offset, size, sortBy);
         List<Metadata> details = new LinkedList<>();
         for (T definition : items.getList()) {
@@ -53,7 +53,7 @@
         return new PartialList<>(details, items.getOffset(), items.getPageSize(), items.getTotalSize());
     }
 
-    <T extends MetadataItem> PartialList<Metadata> getMetadatas(Query query, Class<T> clazz) {
+    protected <T extends MetadataItem> PartialList<Metadata> getMetadatas(Query query, Class<T> clazz) {
         if (query.isForceRefresh()) {
             persistenceService.refresh();
         }
diff --git a/services/src/main/java/org/apache/unomi/services/services/ParserHelper.java b/services/src/main/java/org/apache/unomi/services/impl/ParserHelper.java
similarity index 96%
rename from services/src/main/java/org/apache/unomi/services/services/ParserHelper.java
rename to services/src/main/java/org/apache/unomi/services/impl/ParserHelper.java
index d16a0d3..6984e6e 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ParserHelper.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/ParserHelper.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl;
 
 import org.apache.unomi.api.PropertyType;
 import org.apache.unomi.api.ValueType;
@@ -31,6 +31,9 @@
 import java.util.Collection;
 import java.util.List;
 
+/**
+ * Helper class to resolve condition, action and values types when loading definitions from JSON files
+ */
 public class ParserHelper {
 
     private static final Logger logger = LoggerFactory.getLogger(ParserHelper.class);
diff --git a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterServiceImpl.java
similarity index 99%
rename from services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterServiceImpl.java
index 06792cc..284b250 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.cluster;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.karaf.cellar.config.ClusterConfigurationEvent;
diff --git a/services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEvent.java b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEvent.java
similarity index 96%
rename from services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEvent.java
rename to services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEvent.java
index cbe162d..3c4ec5a 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEvent.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEvent.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.cluster;
 
 import org.apache.karaf.cellar.core.event.Event;
 
diff --git a/services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEventHandler.java b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEventHandler.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEventHandler.java
rename to services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEventHandler.java
index 2fef85c..39b21af 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ClusterSystemStatisticsEventHandler.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/cluster/ClusterSystemStatisticsEventHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.cluster;
 
 import org.apache.karaf.cellar.config.Constants;
 import org.apache.karaf.cellar.core.CellarSupport;
diff --git a/services/src/main/java/org/apache/unomi/services/services/ConfigSharingServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/configsharing/ConfigSharingServiceImpl.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/ConfigSharingServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/configsharing/ConfigSharingServiceImpl.java
index cc69b29..88a28b8 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ConfigSharingServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/configsharing/ConfigSharingServiceImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.configsharing;
 
 import org.apache.unomi.api.services.ConfigSharingService;
 import org.osgi.framework.*;
diff --git a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/definitions/DefinitionsServiceImpl.java
similarity index 99%
rename from services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/definitions/DefinitionsServiceImpl.java
index 10ad331..0b42cd5 100644
--- a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/definitions/DefinitionsServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.definitions;
 
 import org.apache.unomi.api.PluginType;
 import org.apache.unomi.api.PropertyMergeStrategyType;
@@ -27,6 +27,7 @@
 import org.apache.unomi.api.services.SchedulerService;
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.PersistenceService;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
diff --git a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/events/EventServiceImpl.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/events/EventServiceImpl.java
index 1334135..ab1cd77 100644
--- a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/events/EventServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.events;
 
 import inet.ipaddr.IPAddress;
 import inet.ipaddr.IPAddressString;
@@ -31,6 +31,7 @@
 import org.apache.unomi.api.services.EventService;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.persistence.spi.aggregate.TermsAggregate;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
diff --git a/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java b/services/src/main/java/org/apache/unomi/services/impl/events/ThirdPartyServer.java
similarity index 97%
rename from services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
rename to services/src/main/java/org/apache/unomi/services/impl/events/ThirdPartyServer.java
index 05366e0..c772b85 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/events/ThirdPartyServer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.events;
 
 import inet.ipaddr.IPAddress;
 
diff --git a/services/src/main/java/org/apache/unomi/services/services/GoalsServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/goals/GoalsServiceImpl.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/GoalsServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/goals/GoalsServiceImpl.java
index cbf8684..336eac9 100644
--- a/services/src/main/java/org/apache/unomi/services/services/GoalsServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/goals/GoalsServiceImpl.java
@@ -15,9 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.goals;
 
-import org.apache.unomi.api.*;
+import org.apache.unomi.api.Metadata;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.api.Profile;
+import org.apache.unomi.api.Session;
 import org.apache.unomi.api.actions.Action;
 import org.apache.unomi.api.campaigns.Campaign;
 import org.apache.unomi.api.campaigns.CampaignDetail;
@@ -34,6 +37,7 @@
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.persistence.spi.aggregate.*;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
diff --git a/services/src/main/java/org/apache/unomi/services/services/UserListServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/lists/UserListServiceImpl.java
similarity index 95%
rename from services/src/main/java/org/apache/unomi/services/services/UserListServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/lists/UserListServiceImpl.java
index e3156ea..e587ac8 100644
--- a/services/src/main/java/org/apache/unomi/services/services/UserListServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/lists/UserListServiceImpl.java
@@ -15,12 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.lists;
 
 import org.apache.unomi.api.Metadata;
 import org.apache.unomi.api.PartialList;
 import org.apache.unomi.api.lists.UserList;
 import org.apache.unomi.api.services.UserListService;
+import org.apache.unomi.services.impl.AbstractServiceImpl;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.SynchronousBundleListener;
diff --git a/services/src/main/java/org/apache/unomi/services/services/PatchServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/patches/PatchServiceImpl.java
similarity index 97%
rename from services/src/main/java/org/apache/unomi/services/services/PatchServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/patches/PatchServiceImpl.java
index 7f6e36e..104aa1b 100644
--- a/services/src/main/java/org/apache/unomi/services/services/PatchServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/patches/PatchServiceImpl.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.patches;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.github.fge.jsonpatch.JsonPatch;
 import com.github.fge.jsonpatch.JsonPatchException;
-import org.apache.unomi.api.*;
+import org.apache.unomi.api.Item;
+import org.apache.unomi.api.Patch;
 import org.apache.unomi.api.services.PatchService;
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.PersistenceService;
diff --git a/services/src/main/java/org/apache/unomi/services/services/PersonalizationServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/personalization/PersonalizationServiceImpl.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/PersonalizationServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/personalization/PersonalizationServiceImpl.java
index 6ce7610..a4ae8f3 100644
--- a/services/src/main/java/org/apache/unomi/services/services/PersonalizationServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/personalization/PersonalizationServiceImpl.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.personalization;
 
+import org.apache.unomi.api.PersonalizationStrategy;
 import org.apache.unomi.api.Profile;
 import org.apache.unomi.api.Session;
-import org.apache.unomi.api.PersonalizationStrategy;
 import org.apache.unomi.api.conditions.Condition;
 import org.apache.unomi.api.services.PersonalizationService;
 import org.apache.unomi.api.services.ProfileService;
diff --git a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
similarity index 99%
rename from services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
index 689e416..a27d23e 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.profiles;
 
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.PropertyUtils;
@@ -32,6 +32,7 @@
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.persistence.spi.PropertyHelper;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/services/src/main/java/org/apache/unomi/services/services/QueryServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/queries/QueryServiceImpl.java
similarity index 98%
rename from services/src/main/java/org/apache/unomi/services/services/QueryServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/queries/QueryServiceImpl.java
index e03ddb2..ca278eb 100644
--- a/services/src/main/java/org/apache/unomi/services/services/QueryServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/queries/QueryServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.queries;
 
 import org.apache.unomi.api.conditions.Condition;
 import org.apache.unomi.api.query.AggregateQuery;
@@ -23,6 +23,7 @@
 import org.apache.unomi.api.services.QueryService;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.persistence.spi.aggregate.*;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
similarity index 99%
rename from services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
index ca4b139..425f990 100644
--- a/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.rules;
 
 import org.apache.unomi.api.Event;
 import org.apache.unomi.api.Item;
@@ -31,6 +31,7 @@
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.PersistenceService;
 import org.apache.unomi.services.actions.ActionExecutorDispatcher;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/services/src/main/java/org/apache/unomi/services/services/SchedulerServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/scheduler/SchedulerServiceImpl.java
similarity index 96%
rename from services/src/main/java/org/apache/unomi/services/services/SchedulerServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/scheduler/SchedulerServiceImpl.java
index e551185..7e7f1cf 100644
--- a/services/src/main/java/org/apache/unomi/services/services/SchedulerServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/scheduler/SchedulerServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.scheduler;
 
 import org.apache.unomi.api.services.SchedulerService;
 import org.slf4j.Logger;
diff --git a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
similarity index 99%
rename from services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
rename to services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
index ec9a14a..48b5541 100644
--- a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.services.services;
+package org.apache.unomi.services.impl.segments;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.apache.unomi.api.Event;
@@ -34,6 +34,8 @@
 import org.apache.unomi.api.services.SegmentService;
 import org.apache.unomi.persistence.spi.CustomObjectMapper;
 import org.apache.unomi.persistence.spi.aggregate.TermsAggregate;
+import org.apache.unomi.services.impl.AbstractServiceImpl;
+import org.apache.unomi.services.impl.ParserHelper;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
diff --git a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index e09a38b..81c4c30 100644
--- a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -68,7 +68,7 @@
 
     <!-- Service definitions -->
 
-    <bean id="schedulerServiceImpl" class="org.apache.unomi.services.services.SchedulerServiceImpl"
+    <bean id="schedulerServiceImpl" class="org.apache.unomi.services.impl.scheduler.SchedulerServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy"/>
     <service id="schedulerService" ref="schedulerServiceImpl">
         <interfaces>
@@ -76,7 +76,7 @@
         </interfaces>
     </service>
 
-    <bean id="definitionsServiceImpl" class="org.apache.unomi.services.services.DefinitionsServiceImpl"
+    <bean id="definitionsServiceImpl" class="org.apache.unomi.services.impl.definitions.DefinitionsServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="bundleContext" ref="blueprintBundleContext"/>
@@ -90,7 +90,7 @@
         </interfaces>
     </service>
 
-    <bean id="eventServiceImpl" class="org.apache.unomi.services.services.EventServiceImpl"
+    <bean id="eventServiceImpl" class="org.apache.unomi.services.impl.events.EventServiceImpl"
         init-method="init" destroy-method="destroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -119,7 +119,7 @@
     </bean>
     <service id="eventService" ref="eventServiceImpl" interface="org.apache.unomi.api.services.EventService"/>
 
-    <bean id="goalsServiceImpl" class="org.apache.unomi.services.services.GoalsServiceImpl"
+    <bean id="goalsServiceImpl" class="org.apache.unomi.services.impl.goals.GoalsServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -138,7 +138,7 @@
         <property name="metricsService" ref="metricsService" />
     </bean>
 
-    <bean id="rulesServiceImpl" class="org.apache.unomi.services.services.RulesServiceImpl"
+    <bean id="rulesServiceImpl" class="org.apache.unomi.services.impl.rules.RulesServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -157,7 +157,7 @@
         </interfaces>
     </service>
 
-    <bean id="segmentServiceImpl" class="org.apache.unomi.services.services.SegmentServiceImpl"
+    <bean id="segmentServiceImpl" class="org.apache.unomi.services.impl.segments.SegmentServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -177,7 +177,7 @@
         </interfaces>
     </service>
 
-    <bean id="userListServiceImpl" class="org.apache.unomi.services.services.UserListServiceImpl"
+    <bean id="userListServiceImpl" class="org.apache.unomi.services.impl.lists.UserListServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -190,7 +190,7 @@
         </interfaces>
     </service>
 
-    <bean id="profileServiceImpl" class="org.apache.unomi.services.services.ProfileServiceImpl"
+    <bean id="profileServiceImpl" class="org.apache.unomi.services.impl.profiles.ProfileServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
@@ -211,14 +211,14 @@
         </interfaces>
     </service>
 
-    <bean id="queryServiceImpl" class="org.apache.unomi.services.services.QueryServiceImpl"
+    <bean id="queryServiceImpl" class="org.apache.unomi.services.impl.queries.QueryServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="definitionsService" ref="definitionsServiceImpl"/>
     </bean>
     <service id="queryService" ref="queryServiceImpl" interface="org.apache.unomi.api.services.QueryService"/>
 
-    <bean id="clusterServiceImpl" class="org.apache.unomi.services.services.ClusterServiceImpl"
+    <bean id="clusterServiceImpl" class="org.apache.unomi.services.impl.cluster.ClusterServiceImpl"
           init-method="init" destroy-method="destroy">
         <property name="publicAddress" value="${cluster.contextserver.publicAddress}"/>
         <property name="internalAddress" value="${cluster.contextserver.internalAddress}"/>
@@ -234,13 +234,13 @@
     <service id="clusterService" ref="clusterServiceImpl" interface="org.apache.unomi.api.services.ClusterService"/>
 
 
-    <bean id="personalizationServiceImpl" class="org.apache.unomi.services.services.PersonalizationServiceImpl">
+    <bean id="personalizationServiceImpl" class="org.apache.unomi.services.impl.personalization.PersonalizationServiceImpl">
         <property name="profileService" ref="profileServiceImpl"/>
         <property name="bundleContext" ref="blueprintBundleContext"/>
     </bean>
     <service id="personalizationService" ref="personalizationServiceImpl" interface="org.apache.unomi.api.services.PersonalizationService" />
 
-    <bean id="patchServiceImpl" class="org.apache.unomi.services.services.PatchServiceImpl"
+    <bean id="patchServiceImpl" class="org.apache.unomi.services.impl.patches.PatchServiceImpl"
           init-method="postConstruct" destroy-method="preDestroy">
         <property name="persistenceService" ref="persistenceService"/>
         <property name="bundleContext" ref="blueprintBundleContext"/>
@@ -352,7 +352,7 @@
     </service>
 
 
-    <bean id="configSharingServiceImpl" class="org.apache.unomi.services.services.ConfigSharingServiceImpl" destroy-method="preDestroy">
+    <bean id="configSharingServiceImpl" class="org.apache.unomi.services.impl.configsharing.ConfigSharingServiceImpl" destroy-method="preDestroy">
         <property name="configProperties">
             <map>
                 <entry key="internalServerAddress" value="${cluster.contextserver.internalAddress}" />
@@ -369,7 +369,7 @@
     </service>
 
     <!-- Cluster System Statistics Event Handler -->
-    <bean id="clusterSystemStatisticsEventHandler" class="org.apache.unomi.services.services.ClusterSystemStatisticsEventHandler"
+    <bean id="clusterSystemStatisticsEventHandler" class="org.apache.unomi.services.impl.cluster.ClusterSystemStatisticsEventHandler"
           init-method="init" destroy-method="destroy">
         <property name="configurationAdmin" ref="osgiConfigurationAdmin"/>
         <property name="clusterManager" ref="karafCellarClusterManager"/>