http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/rules/Rule.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/oasis_open/contextserver/api/rules/Rule.java 
b/api/src/main/java/org/oasis_open/contextserver/api/rules/Rule.java
deleted file mode 100644
index a6d881a..0000000
--- a/api/src/main/java/org/oasis_open/contextserver/api/rules/Rule.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.rules;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.MetadataItem;
-import org.oasis_open.contextserver.api.actions.Action;
-import org.oasis_open.contextserver.api.conditions.Condition;
-
-import java.util.List;
-
-/**
- * A conditional set of actions to be executed in response to incoming events. 
Triggering of rules is guarded by a condition: the rule is only triggered if 
the associated
- * condition ({@link #getCondition()}) is satisfied. Once a rule triggers, a 
list of actions ({@link #getActions()} can be performed as consequences.
- *
- * When rules trigger, a specific event is raised so that other parts of unomi 
can react to it accordingly. We can control how that event should be raised 
using
- * {@link #isRaiseEventOnlyOnceForProfile()} and {@link 
#isRaiseEventOnlyOnceForSession()}.
- *
- * We could also specify a priority for our rule in case it needs to be 
executed before other ones when similar conditions match. This is accomplished 
using the
- * {@link #getPriority()} property.
- */
-public class Rule extends MetadataItem {
-
-    private static final long serialVersionUID = 3058739939263056507L;
-
-    /**
-     * The Rule ITEM_TYPE.
-     *
-     * @see Item for a discussion of ITEM_TYPE
-     */
-    public static final String ITEM_TYPE = "rule";
-
-    private Condition condition;
-
-    private List<Action> actions;
-
-    private List<String> linkedItems;
-
-    private boolean raiseEventOnlyOnceForProfile = false;
-
-    private boolean raiseEventOnlyOnceForSession = false;
-
-    private int priority;
-
-    /**
-     * Instantiates a new Rule.
-     */
-    public Rule() {
-    }
-
-    /**
-     * Instantiates a new Rule with the specified {@link Metadata}.
-     *
-     * @param metadata the metadata
-     */
-    public Rule(Metadata metadata) {
-        super(metadata);
-    }
-
-    /**
-     * Retrieves the condition that, when satisfied, triggers the rule.
-     *
-     * @return the condition that, when satisfied, triggers the rule.
-     */
-    public Condition getCondition() {
-        return condition;
-    }
-
-    /**
-     * Sets the condition that, when satisfied, triggers the rule..
-     *
-     * @param condition the condition that, when satisfied, triggers the rule.
-     */
-    public void setCondition(Condition condition) {
-        this.condition = condition;
-    }
-
-    /**
-     * Retrieves the actions to be performed when this rule triggers.
-     *
-     * @return the actions to be performed when this rule triggers
-     */
-    public List<Action> getActions() {
-        return actions;
-    }
-
-    /**
-     * Sets the actions to be performed when this rule triggers.
-     *
-     * @param actions the actions to be performed when this rule triggers
-     */
-    public void setActions(List<Action> actions) {
-        this.actions = actions;
-    }
-
-    /**
-     * Retrieves the linked items.
-     *
-     * @return the linked items
-     */
-    public List<String> getLinkedItems() {
-        return linkedItems;
-    }
-
-    /**
-     * Sets the linked items.
-     *
-     * @param linkedItems the linked items
-     */
-    public void setLinkedItems(List<String> linkedItems) {
-        this.linkedItems = linkedItems;
-    }
-
-    /**
-     * Determines whether the event raised when the rule is triggered should 
only be raised once per {@link org.oasis_open.contextserver.api.Profile}.
-     *
-     * @return {@code true} if the rule-triggered event should only be raised 
once per profile, {@code false} otherwise
-     */
-    public boolean isRaiseEventOnlyOnceForProfile() {
-        return raiseEventOnlyOnceForProfile;
-    }
-
-    /**
-     * Specifies whether the event raised when the rule is triggered should 
only be raised once per {@link org.oasis_open.contextserver.api.Profile}.
-     *
-     * @param raiseEventOnlyOnceForProfile {@code true} if the rule-triggered 
event should only be raised once per profile, {@code false} otherwise
-     */
-    public void setRaiseEventOnlyOnceForProfile(boolean 
raiseEventOnlyOnceForProfile) {
-        this.raiseEventOnlyOnceForProfile = raiseEventOnlyOnceForProfile;
-    }
-
-    /**
-     * Determines whether the event raised when the rule is triggered should 
only be raised once per {@link org.oasis_open.contextserver.api.Session}.
-     *
-     * @return {@code true} if the rule-triggered event should only be raised 
once per session, {@code false} otherwise
-     */
-    public boolean isRaiseEventOnlyOnceForSession() {
-        return raiseEventOnlyOnceForSession;
-    }
-
-    /**
-     * Specifies whether the event raised when the rule is triggered should 
only be raised once per {@link org.oasis_open.contextserver.api.Session}.
-     *
-     * @param raiseEventOnlyOnceForSession {@code true} if the rule-triggered 
event should only be raised once per session, {@code false} otherwise
-     */
-    public void setRaiseEventOnlyOnceForSession(boolean 
raiseEventOnlyOnceForSession) {
-        this.raiseEventOnlyOnceForSession = raiseEventOnlyOnceForSession;
-    }
-
-    /**
-     * Retrieves the priority in case this Rule needs to be executed before 
other ones when similar conditions match.
-     *
-     * @return the priority
-     */
-    public int getPriority() {
-        return priority;
-    }
-
-    /**
-     * Sets the priority in case this Rule needs to be executed before other 
ones when similar conditions match.
-     *
-     * @param priority the priority
-     */
-    public void setPriority(int priority) {
-        this.priority = priority;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/segments/Scoring.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/Scoring.java 
b/api/src/main/java/org/oasis_open/contextserver/api/segments/Scoring.java
deleted file mode 100644
index d16089f..0000000
--- a/api/src/main/java/org/oasis_open/contextserver/api/segments/Scoring.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.segments;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.MetadataItem;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.List;
-
-/**
- * A set of conditions associated with a value to assign to {@link 
org.oasis_open.contextserver.api.Profile}s when matching so that the associated 
users can be scored along that
- * dimension. Each {@link ScoringElement} is evaluated and matching profiles' 
scores are incremented with the associated value.
- */
-@XmlRootElement
-public class Scoring extends MetadataItem {
-    private static final long serialVersionUID = 6351058906259967559L;
-
-    /**
-     * The Scoring ITEM_TYPE.
-     *
-     * @see Item for a discussion of ITEM_TYPE
-     */
-    public static final String ITEM_TYPE = "scoring";
-
-    private List<ScoringElement> elements;
-
-    /**
-     * Instantiates a new Scoring.
-     */
-    public Scoring() {
-    }
-
-    /**
-     * Instantiates a new Scoring with the specified metadata.
-     *
-     * @param metadata the metadata
-     */
-    public Scoring(Metadata metadata) {
-        super(metadata);
-    }
-
-    /**
-     * Retrieves the details of this Scoring.
-     *
-     * @return the elements
-     */
-    public List<ScoringElement> getElements() {
-        return elements;
-    }
-
-    /**
-     * Sets the elements.
-     *
-     * @param elements the elements
-     */
-    public void setElements(List<ScoringElement> elements) {
-        this.elements = elements;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/segments/ScoringElement.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/ScoringElement.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/segments/ScoringElement.java
deleted file mode 100644
index 06261d6..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/ScoringElement.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.segments;
-
-import org.oasis_open.contextserver.api.conditions.Condition;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * A scoring dimension along profiles can be evaluated and associated value to 
be assigned.
- */
-@XmlRootElement
-public class ScoringElement {
-    private Condition condition;
-    private int value;
-
-    /**
-     * Instantiates a new Scoring element.
-     */
-    public ScoringElement() {
-    }
-
-    /**
-     * Retrieves the condition.
-     *
-     * @return the condition
-     */
-    public Condition getCondition() {
-        return condition;
-    }
-
-    /**
-     * Sets the condition.
-     *
-     * @param condition the condition
-     */
-    public void setCondition(Condition condition) {
-        this.condition = condition;
-    }
-
-    /**
-     * Retrieves the value.
-     *
-     * @return the value
-     */
-    public int getValue() {
-        return value;
-    }
-
-    /**
-     * Sets the value.
-     *
-     * @param value the value
-     */
-    public void setValue(int value) {
-        this.value = value;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/segments/Segment.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/Segment.java 
b/api/src/main/java/org/oasis_open/contextserver/api/segments/Segment.java
deleted file mode 100644
index 37b0994..0000000
--- a/api/src/main/java/org/oasis_open/contextserver/api/segments/Segment.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.segments;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.MetadataItem;
-import org.oasis_open.contextserver.api.conditions.Condition;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * A dynamically evaluated group of similar profiles in order to categorize 
the associated users. To be considered part of a given segment, users must 
satisfies
- * the segment’s condition. If they match, users are automatically added to 
the segment. Similarly, if at any given point during, they cease to satisfy the 
segment’s condition,
- * they are automatically removed from it.
- */
-@XmlRootElement
-public class Segment extends MetadataItem {
-
-    private static final long serialVersionUID = -1384533444860961296L;
-
-    /**
-     * The Segment ITEM_TYPE.
-     *
-     * @see Item for a discussion of ITEM_TYPE
-     */
-    public static final String ITEM_TYPE = "segment";
-
-    private Condition condition;
-
-    /**
-     * Instantiates a new Segment.
-     */
-    public Segment() {
-    }
-
-    /**
-     * Instantiates a new Segment with the specified metadata.
-     *
-     * @param metadata the metadata
-     */
-    public Segment(Metadata metadata) {
-        super(metadata);
-    }
-
-    /**
-     * Retrieves the condition that users' {@link 
org.oasis_open.contextserver.api.Profile} must satisfy in order to be 
considered member of this Segment.
-     *
-     * @return the condition that users must match
-     */
-    public Condition getCondition() {
-        return condition;
-    }
-
-    /**
-     * Sets the condition that users' {@link 
org.oasis_open.contextserver.api.Profile} must satisfy in order to be 
considered member of this Segment.
-     *
-     * @param condition the condition that users must match
-     */
-    public void setCondition(Condition condition) {
-        this.condition = condition;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/segments/SegmentsAndScores.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/SegmentsAndScores.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/segments/SegmentsAndScores.java
deleted file mode 100644
index 5201b81..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/segments/SegmentsAndScores.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.segments;
-
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A combination of {@link Segment} and scores (usually associated with a 
{@link org.oasis_open.contextserver.api.Profile}).
- */
-public class SegmentsAndScores {
-    private Set<String> segments;
-    private Map<String,Integer> scores;
-
-    /**
-     * Instantiates a new SegmentsAndScores.
-     *
-     * @param segments the set of segment identifiers
-     * @param scores   the scores as a Map of scoring name - associated score 
pairs
-     */
-    public SegmentsAndScores(Set<String> segments, Map<String, Integer> 
scores) {
-        this.segments = segments;
-        this.scores = scores;
-    }
-
-
-    /**
-     * Retrieves the segments identifiers.
-     *
-     * @return the segments identifiers
-     */
-    public Set<String> getSegments() {
-        return segments;
-    }
-
-    /**
-     * Retrieves the scores as a Map of scoring name - associated score pairs.
-     *
-     * @return the scores as a Map of scoring name - associated score pairs
-     */
-    public Map<String, Integer> getScores() {
-        return scores;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/ClusterService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/ClusterService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/ClusterService.java
deleted file mode 100644
index 56981c3..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/ClusterService.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.ClusterNode;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * A service to access information about the context server's cluster.
- *
- * TODO: rename to something less specific like ContextRuntimeService?
- */
-public interface ClusterService {
-
-    /**
-     * Retrieves the list of available nodes for this context server instance.
-     *
-     * @return a list of {@link ClusterNode}
-     */
-    List<ClusterNode> getClusterNodes();
-
-    /**
-     * Removes all data before the specified date from the context server.
-     *
-     * @param date the Date before which all data needs to be removed
-     */
-    void purge(final Date date);
-
-    /**
-     * Removes all data associated with the provided scope.
-     *
-     * @param scope the scope for which we want to remove data
-     */
-    void purge(final String scope);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/DefinitionsService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/DefinitionsService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/DefinitionsService.java
deleted file mode 100644
index e50f9c5..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/DefinitionsService.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.PluginType;
-import org.oasis_open.contextserver.api.PropertyMergeStrategyType;
-import org.oasis_open.contextserver.api.Tag;
-import org.oasis_open.contextserver.api.ValueType;
-import org.oasis_open.contextserver.api.actions.ActionType;
-import org.oasis_open.contextserver.api.conditions.Condition;
-import org.oasis_open.contextserver.api.conditions.ConditionType;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A service to retrieve definition information about core context server 
entities such as conditions, actions and values.
- */
-public interface DefinitionsService {
-    /**
-     * Retrieves all known tags.
-     *
-     * @return the set of all known tags
-     */
-    Set<Tag> getAllTags();
-
-    /**
-     * Retrieves the set of all root tags from which all other tags are 
derived via sub-tags.
-     *
-     * @return the set of all root tags
-     */
-    Set<Tag> getRootTags();
-
-    /**
-     * Retrieves the tag with the specified identifier.
-     *
-     * @param tagId the identifier of the tag to retrieve
-     * @return the tag with the specified identifier
-     */
-    Tag getTag(String tagId);
-
-    /**
-     * Retrieves all condition types.
-     *
-     * @return a Collection of all collection types
-     */
-    Collection<ConditionType> getAllConditionTypes();
-
-    /**
-     * Retrieves the set of condition types with the specified tag also 
retrieving condition types from sub-tags if so specified.
-     *
-     * @param tag                the tag marking the condition types we want 
to retrieve
-     * @param includeFromSubtags {@code true} if we want to also include 
condition types marked by sub-tags of the specified tag
-     * @return the set of condition types with the specified tag (and its 
sub-tags, if specified)
-     */
-    Set<ConditionType> getConditionTypesByTag(Tag tag, boolean 
includeFromSubtags);
-
-    /**
-     * Retrieves the condition type associated with the specified identifier.
-     *
-     * @param id the identifier of the condition type to retrieve
-     * @return the condition type associated with the specified identifier or 
{@code null} if no such condition type exists
-     */
-    ConditionType getConditionType(String id);
-
-    /**
-     * Retrieves all known action types.
-     *
-     * @return all known action types
-     */
-    Collection<ActionType> getAllActionTypes();
-
-    /**
-     * Retrieves the set of action types with the specified tag also 
retrieving action types from sub-tags if so specified.
-     *
-     * @param tag                the tag marking the action types we want to 
retrieve
-     * @param includeFromSubtags {@code true} if we want to also include 
action types marked by sub-tags of the specified tag
-     * @return the set of action types with the specified tag (and its 
sub-tags, if specified)
-     */
-    Set<ActionType> getActionTypeByTag(Tag tag, boolean includeFromSubtags);
-
-    /**
-     * Retrieves the action type associated with the specified identifier.
-     *
-     * @param id the identifier of the action type to retrieve
-     * @return the action type associated with the specified identifier or 
{@code null} if no such action type exists
-     */
-    ActionType getActionType(String id);
-
-    /**
-     * Retrieves all known value types.
-     *
-     * @return all known value types
-     */
-    Collection<ValueType> getAllValueTypes();
-
-    /**
-     * Retrieves the set of value types with the specified tag also retrieving 
value types from sub-tags if so specified.
-     *
-     * @param tag                the tag marking the value types we want to 
retrieve
-     * @param includeFromSubtags {@code true} if we want to also include value 
types marked by sub-tags of the specified tag
-     * @return the set of value types with the specified tag (and its 
sub-tags, if specified)
-     */
-    Set<ValueType> getValueTypeByTag(Tag tag, boolean includeFromSubtags);
-
-    /**
-     * Retrieves the value type associated with the specified identifier.
-     *
-     * @param id the identifier of the value type to retrieve
-     * @return the value type associated with the specified identifier or 
{@code null} if no such value type exists
-     */
-    ValueType getValueType(String id);
-
-    /**
-     * Retrieves a Map of plugin identifier to a list of plugin types defined 
by that particular plugin.
-     *
-     * @return a Map of plugin identifier to a list of plugin types defined by 
that particular plugin
-     */
-    Map<Long, List<PluginType>> getTypesByPlugin();
-
-    /**
-     * Retrieves the property merge strategy type associated with the 
specified identifier.
-     *
-     * @param id the identifier of the property merge strategy type to retrieve
-     * @return the property merge strategy type associated with the specified 
identifier or {@code null} if no such property merge strategy type exists
-     */
-    PropertyMergeStrategyType getPropertyMergeStrategyType(String id);
-
-    /**
-     * Retrieves all conditions of the specified type from the specified root 
condition.
-     *
-     * TODO: remove?
-     *
-     * @param rootCondition the condition from which we want to extract all 
conditions with the specified type
-     * @param typeId the identifier of the condition type we want conditions 
to extract to match
-     * @return a set of conditions contained in the specified root condition 
and matching the specified condition type or an empty set if no such condition 
exists
-     */
-    Set<Condition> extractConditionsByType(Condition rootCondition, String 
typeId);
-
-    /**
-     * Retrieves a condition matching the specified tag identifier from the 
specified root condition.
-     *
-     * TODO: remove from API and move to a different class?
-     * TODO: purpose and behavior not clear
-     *
-     * @param rootCondition
-     * @param tagId
-     * @return
-     */
-    Condition extractConditionByTag(Condition rootCondition, String tagId);
-
-    /**
-     * Resolves (if possible) the {@link ConditionType}s for the specified 
condition and its sub-conditions (if any) from the type identifiers existing on 
the specified condition
-     *
-     * TODO: remove from API and move to a different class?
-     *
-     * @param rootCondition the condition for which we want to resolve the 
condition types from the existing condition type identifiers
-     * @return {@code true}
-     */
-    boolean resolveConditionType(Condition rootCondition);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/EventListenerService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/EventListenerService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/EventListenerService.java
deleted file mode 100644
index c95e8d0..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/EventListenerService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Event;
-
-/**
- * A service that gets notified (via {@link #onEvent(Event)}) whenever an 
event it can handle as decided by {@link #canHandle(Event)} occurs in the 
context server.
- */
-public interface EventListenerService {
-
-    /**
-     * Whether or not this listener can handle the specified event.
-     *
-     * @param event the event to be handled
-     * @return {@code true} if this listener can handle the specified event, 
{@code false} otherwise
-     */
-    boolean canHandle(Event event);
-
-    /**
-     * Handles the specified event.
-     *
-     * @param event the event to be handled
-     * @return the result of the event handling as combination of {@link 
EventService} flags, to be checked using bitwise AND (&amp;) operator
-     * @see EventService#NO_CHANGE
-     * @see EventService#PROFILE_UPDATED
-     * @see EventService#SESSION_UPDATED
-     */
-    int onEvent(Event event);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/EventService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/EventService.java 
b/api/src/main/java/org/oasis_open/contextserver/api/services/EventService.java
deleted file mode 100644
index 1dec2a5..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/EventService.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Event;
-import org.oasis_open.contextserver.api.EventProperty;
-import org.oasis_open.contextserver.api.PartialList;
-import org.oasis_open.contextserver.api.conditions.Condition;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * A service to publish events, notably issued from user interactions with 
tracked entities, in the context server.
- */
-public interface EventService {
-
-    /**
-     * No change occurred following an event being handled.
-     */
-    int NO_CHANGE = 0;
-    /**
-     * The associated session was updated following an event being handled.
-     */
-    int SESSION_UPDATED = 1;
-    /**
-     * The associated profile was updated following an event being handled.
-     */
-    int PROFILE_UPDATED = 2;
-
-    /**
-     * Propagates the specified event in the context server, notifying
-     * {@link EventListenerService} instances if needed. If the event is 
persistent ({@link Event#isPersistent()}, it will be persisted appropriately. 
Once the event is
-     * propagated, any {@link 
org.oasis_open.contextserver.api.actions.ActionPostExecutor} the event defined 
will be executed and the user profile updated if needed.
-     *
-     * @param event the Event to be propagated
-     * @return the result of the event handling as combination of EventService 
flags, to be checked using bitwise AND (&amp;) operator
-     */
-    int send(Event event);
-
-    /**
-     * Retrieves the list of available event properties.
-     *
-     * @return a list of available event properties
-     */
-    List<EventProperty> getEventProperties();
-
-    /**
-     * Retrieves the set of known event type identifiers.
-     *
-     * @return the set of known event type identifiers.
-     */
-    Set<String> getEventTypeIds();
-
-    /**
-     * Retrieves {@link Event}s matching the specified {@link Condition}. 
Events are ordered according to their time stamp ({@link Event#getTimeStamp()} 
and paged: only
-     * {@code size} of them are retrieved, starting with the {@code offset}-th 
one.
-     *
-     * @param condition the Condition we want the Events to match to be 
retrieved
-     * @param offset    zero or a positive integer specifying the position of 
the first event in the total ordered collection of matching events
-     * @param size      a positive integer specifying how many matching events 
should be retrieved or {@code -1} if all of them should be retrieved
-     * @return a {@link PartialList} of matching events
-     */
-    PartialList<Event> searchEvents(Condition condition, int offset, int size);
-
-    /**
-     * Retrieves {@link Event}s for the {@link 
org.oasis_open.contextserver.api.Session} identified by the provided session 
identifier, matching any of the provided event types,
-     * ordered according to the specified {@code sortBy} String and paged: 
only {@code size} of them are retrieved, starting with the {@code offset}-th 
one.
-     * If a {@code query} is provided, a full text search is performed on the 
matching events to further filter them.
-     *
-     * @param sessionId  the identifier of the user session we're considering
-     * @param eventTypes an array of event type names; the events to retrieve 
should at least match one of these
-     * @param query      a String to perform full text filtering on events 
matching the other conditions
-     * @param offset     zero or a positive integer specifying the position of 
the first event in the total ordered collection of matching events
-     * @param size       a positive integer specifying how many matching 
events should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy     an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in
-     *                   the String, considering each in turn and moving on to 
the next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *                   a column ({@code :}) and an order specifier: {@code 
asc} or {@code desc}.
-     * @return a {@link PartialList} of matching events
-     */
-    PartialList<Event> searchEvents(String sessionId, String[] eventTypes, 
String query, int offset, int size, String sortBy);
-
-    /**
-     * Checks whether the specified event has already been raised either for 
the associated session or profile depending on the specified {@code session} 
parameter.
-     *
-     * @param event   the event we want to check
-     * @param session {@code true} if we want to check if the specified event 
has already been raised for the associated session, {@code false} if we want to 
check
-     *                whether the event has already been raised for the 
associated profile
-     * @return {@code true} if the event has already been raised, {@code 
false} otherwise
-     */
-    boolean hasEventAlreadyBeenRaised(Event event, boolean session);
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/GoalsService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/GoalsService.java 
b/api/src/main/java/org/oasis_open/contextserver/api/services/GoalsService.java
deleted file mode 100644
index e4d8dee..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/GoalsService.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.PartialList;
-import org.oasis_open.contextserver.api.campaigns.Campaign;
-import org.oasis_open.contextserver.api.campaigns.CampaignDetail;
-import org.oasis_open.contextserver.api.campaigns.events.CampaignEvent;
-import org.oasis_open.contextserver.api.goals.Goal;
-import org.oasis_open.contextserver.api.goals.GoalReport;
-import org.oasis_open.contextserver.api.query.AggregateQuery;
-import org.oasis_open.contextserver.api.query.Query;
-
-import java.util.Set;
-
-/**
- * A service to interact with {@link Goal}s and {@link Campaign}s.
- */
-public interface GoalsService {
-    /**
-     * Retrieves the set of Metadata associated with existing goals.
-     *
-     * @return the set of Metadata associated with existing goals
-     */
-    Set<Metadata> getGoalMetadatas();
-
-    /**
-     * Retrieves the set of Metadata associated with existing goals matching 
the specified {@link Query}
-     *
-     * @param query the Query used to filter the Goals which metadata we want 
to retrieve
-     * @return the set of Metadata associated with existing goals matching the 
specified {@link Query}
-     */
-    Set<Metadata> getGoalMetadatas(Query query);
-
-    /**
-     * Retrieves the goal associated with the specified identifier.
-     *
-     * @param goalId the identifier of the goal to retrieve
-     * @return the goal associated with the specified identifier or {@code 
null} if no such goal exists
-     */
-    Goal getGoal(String goalId);
-
-    /**
-     * Saves the specified goal in the context server and creates associated 
{@link org.oasis_open.contextserver.api.rules.Rule}s if the goal is enabled.
-     *
-     * TODO: rename to saveGoal
-     *
-     * @param goal the Goal to be saved
-     */
-    void setGoal(Goal goal);
-
-    /**
-     * Removes the goal associated with the specified identifier, also 
removing associated rules if needed.
-     *
-     * @param goalId the identifier of the goal to be removed
-     */
-    void removeGoal(String goalId);
-
-    /**
-     * Retrieves the report for the goal identified with the specified 
identifier.
-     *
-     * @param goalId the identifier of the goal which report we want to 
retrieve
-     * @return the report for the specified goal
-     */
-    GoalReport getGoalReport(String goalId);
-
-    /**
-     * Retrieves the report for the goal identified with the specified 
identifier, considering only elements determined by the specified {@link 
AggregateQuery}.
-     *
-     * @param goalId the identifier of the goal which report we want to 
retrieve
-     * @param query  an AggregateQuery to further specify which elements of 
the report we want
-     * @return the report for the specified goal and query
-     */
-    GoalReport getGoalReport(String goalId, AggregateQuery query);
-
-    /**
-     * Retrieves the set of Metadata associated with existing campaigns.
-     *
-     * @return the set of Metadata associated with existing campaigns
-     */
-    Set<Metadata> getCampaignMetadatas();
-
-    /**
-     * Retrieves the set of Metadata associated with existing campaign 
matching the specified {@link Query}
-     *
-     * @param query the Query used to filter the campagins which metadata we 
want to retrieve
-     * @return the set of Metadata associated with existing campaigns matching 
the specified {@link Query}
-     */
-    Set<Metadata> getCampaignMetadatas(Query query);
-
-    /**
-     * Retrieves campaign details for campaigns matching the specified query.
-     *
-     * @param query the query specifying which campaigns to retrieve
-     * @return a {@link PartialList} of campaign details for the campaigns 
matching the specified query
-     */
-    PartialList<CampaignDetail> getCampaignDetails(Query query);
-
-    /**
-     * Retrieves the {@link CampaignDetail} associated with the campaign 
identified with the specified identifier
-     *
-     * @param id the identifier of the campaign for which we want to retrieve 
the details
-     * @return the CampaignDetail for the campaign identified by the specified 
identifier or {@code null} if no such campaign exists
-     */
-    CampaignDetail getCampaignDetail(String id);
-
-    /**
-     * Retrieves the campaign identified by the specified identifier
-     *
-     * @param campaignId the identifier of the campaign we want to retrieve
-     * @return the campaign associated with the specified identifier or {@code 
null} if no such campaign exists
-     */
-    Campaign getCampaign(String campaignId);
-
-    /**
-     * Saves the specified campaign in the context server and creates 
associated {@link org.oasis_open.contextserver.api.rules.Rule}s if the campaign 
is enabled.
-     *
-     * TODO: rename to saveCampaign
-     *
-     * @param campaign the Campaign to be saved
-     */
-    void setCampaign(Campaign campaign);
-
-    /**
-     * Removes the campaign associated with the specified identifier, also 
removing associated rules if needed.
-     *
-     * @param campaignId the identifier of the campaign to be removed
-     */
-    void removeCampaign(String campaignId);
-
-    /**
-     * Retrieves {@link CampaignEvent}s matching the specified query.
-     *
-     * @param query the Query specifying which CampaignEvents to retrieve
-     * @return a {@link PartialList} of campaign events matching the specified 
query
-     */
-    PartialList<CampaignEvent> getEvents(Query query);
-
-    /**
-     * Saves the specified campaign event in the context server.
-     *
-     * TODO: rename to saveCampaignEvent
-     *
-     * @param event the CampaignEvent to be saved
-     */
-    void setCampaignEvent(CampaignEvent event);
-
-    /**
-     * Removes the campaign event associated with the specified identifier.
-     *
-     * @param campaignEventId the identifier of the campaign event to be 
removed
-     */
-    void removeCampaignEvent(String campaignEventId);
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/PrivacyService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/PrivacyService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/PrivacyService.java
deleted file mode 100644
index 0993896..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/PrivacyService.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.ServerInfo;
-
-import java.util.List;
-
-/**
- * Created by loom on 10.09.15.
- */
-public interface PrivacyService {
-
-    public static final String GLOBAL_ANONYMOUS_PROFILE_ID = 
"global-anonymous-profile";
-
-    ServerInfo getServerInfo();
-
-    Boolean deleteProfile(String profileId);
-
-    String anonymizeBrowsingData(String profileId);
-
-    Boolean deleteProfileData(String profileId);
-
-    Boolean setAnonymous(String profileId, boolean anonymous);
-
-    Boolean isAnonymous(String profileId);
-
-    List<String> getFilteredEventTypes(String profileId);
-
-    Boolean setFilteredEventTypes(String profileId, List<String> eventTypes);
-
-    List<String> getDeniedProperties(String profileId);
-
-    Boolean setDeniedProperties(String profileId, List<String> propertyNames);
-
-    List<String> getDeniedPropertyDistribution(String profileId);
-
-    Boolean setDeniedPropertyDistribution(String profileId, List<String> 
propertyNames);
-
-    Boolean removeProperty(String profileId, String propertyName);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/ProfileService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/ProfileService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/ProfileService.java
deleted file mode 100644
index dca5d40..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/ProfileService.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.*;
-import org.oasis_open.contextserver.api.conditions.Condition;
-import org.oasis_open.contextserver.api.query.Query;
-
-import java.util.*;
-
-/**
- * A service to access and operate on {@link Profile}s, {@link Session}s and 
{@link Persona}s.
- */
-public interface ProfileService {
-
-    /**
-     * Retrieves the number of unique profiles.
-     *
-     * @return the number of unique profiles.
-     */
-    long getAllProfilesCount();
-
-    /**
-     * Retrieves profiles or personas matching the specified query.
-     *
-     * @param <T>   the specific sub-type of {@link Profile} to retrieve
-     * @param query a {@link Query} specifying which elements to retrieve
-     * @param clazz the class of elements to retrieve
-     * @return a {@link PartialList} of {@code T} instances matching the 
specified query
-     */
-    <T extends Profile> PartialList<T> search(Query query, Class<T> clazz);
-
-    /**
-     * Creates a String containing comma-separated values (CSV) formatted 
version of profiles matching the specified query.
-     *
-     * @param query the query specifying which profiles to export
-     * @return a CSV-formatted String version of the profiles matching the 
specified query
-     */
-    String exportProfilesPropertiesToCsv(Query query);
-
-    /**
-     * Find profiles which have the specified property with the specified 
value, ordered according to the specified {@code sortBy} String and paged: only
-     * {@code size} of them are retrieved, starting with the {@code offset}-th 
one.
-     *
-     * TODO: replace with version using a query instead of separate parameters
-     * TODO: remove as it's unused?
-     *
-     * @param propertyName  the name of the property we're interested in
-     * @param propertyValue the value of the property we want profiles to have
-     * @param offset        zero or a positive integer specifying the position 
of the first profile in the total ordered collection of matching profiles
-     * @param size          a positive integer specifying how many matching 
profiles should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy        an optional ({@code null} if no sorting is 
required) String of comma ({@code ,}) separated property names on which 
ordering should be performed, ordering elements according to  the property 
order in
-     *                      the String, considering each in turn and moving on 
to the next one in case of equality of all preceding ones. Each property name 
is optionally
-     *                      followed by a column ({@code :}) and an order 
specifier: {@code asc} or {@code desc}.
-     * @return a {@link PartialList} of matching profiles
-     */
-    PartialList<Profile> findProfilesByPropertyValue(String propertyName, 
String propertyValue, int offset, int size, String sortBy);
-
-    /**
-     * Merges the specified profiles into the provided so-called master 
profile, merging properties according to the {@link PropertyMergeStrategyType} 
specified on their {@link
-     * PropertyType}.
-     *
-     * @param masterProfile   the profile into which the specified profiles 
will be merged
-     * @param profilesToMerge the list of profiles to merge into the specified 
master profile
-     * @return the merged profile
-     */
-    Profile mergeProfiles(Profile masterProfile, List<Profile> 
profilesToMerge);
-
-    /**
-     * Retrieves the profile identified by the specified identifier.
-     *
-     * @param profileId the identifier of the profile to retrieve
-     * @return the profile identified by the specified identifier or {@code 
null} if no such profile exists
-     */
-    Profile load(String profileId);
-
-    /**
-     * Saves the specified profile in the context server.
-     *
-     * @param profile the profile to be saved
-     * @return the newly saved profile
-     */
-    Profile save(Profile profile);
-
-    /**
-     * Removes the profile (or persona if the {@code persona} parameter is set 
to {@code true}) identified by the specified identifier.
-     *
-     * @param profileId the identifier of the profile or persona to delete
-     * @param persona   {@code true} if the specified identifier is supposed 
to refer to a persona, {@code false} if it is supposed to refer to a profile
-     */
-    void delete(String profileId, boolean persona);
-
-    /**
-     * Retrieves the sessions associated with the profile identified by the 
specified identifier that match the specified query (if specified), ordered 
according to the specified
-     * {@code sortBy} String and and paged: only {@code size} of them are 
retrieved, starting with the {@code offset}-th one.
-     *
-     * TODO: use a Query object instead of distinct parameter
-     *
-     * @param profileId the identifier of the profile we want to retrieve 
sessions from
-     * @param query     a String of text used for fulltext filtering which 
sessions we are interested in or {@code null} (or an empty String) if we want 
to retrieve all sessions
-     * @param offset    zero or a positive integer specifying the position of 
the first session in the total ordered collection of matching sessions
-     * @param size      a positive integer specifying how many matching 
sessions should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy    an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in the
-     *                  String, considering each in turn and moving on to the 
next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *                  a column ({@code :}) and an order specifier: {@code 
asc} or {@code desc}.
-     * @return a {@link PartialList} of matching sessions
-     */
-    PartialList<Session> getProfileSessions(String profileId, String query, 
int offset, int size, String sortBy);
-
-    /**
-     * Retrieves the session identified by the specified identifier.
-     *
-     * @param sessionId the identifier of the session to be retrieved
-     * @param dateHint  a Date helping in identifying where the item is located
-     * @return the session identified by the specified identifier
-     */
-    Session loadSession(String sessionId, Date dateHint);
-
-    /**
-     * Saves the specified session.
-     *
-     * @param session the session to be saved
-     * @return the newly saved session
-     */
-    Session saveSession(Session session);
-
-    /**
-     * Retrieves sessions associated with the profile identified by the 
specified identifier.
-     *
-     * @param profileId the profile id for which we want to retrieve the 
sessions
-     * @return a {@link PartialList} of the profile's sessions
-     */
-    PartialList<Session> findProfileSessions(String profileId);
-
-    /**
-     * Checks whether the specified profile and/or session satisfy the 
specified condition.
-     *
-     * @param condition the condition we're testing against which might or 
might not have profile- or session-specific sub-conditions
-     * @param profile   the profile we're testing
-     * @param session   the session we're testing
-     * @return {@code true} if the profile and/or sessions match the specified 
condition, {@code false} otherwise
-     */
-    boolean matchCondition(Condition condition, Profile profile, Session 
session);
-
-    /**
-     * Update all profiles in batch according to the specified {@link 
BatchUpdate}
-     *
-     * @param update the batch update specification
-     */
-    void batchProfilesUpdate(BatchUpdate update);
-
-    /**
-     * Retrieves the persona identified by the specified identifier.
-     *
-     * @param personaId the identifier of the persona to retrieve
-     * @return the persona associated with the specified identifier or {@code 
null} if no such persona exists.
-     */
-    Persona loadPersona(String personaId);
-
-    /**
-     * Persists the specified {@link Persona} in the context server.
-     *
-     * @param persona the persona to persist
-     * @return the newly persisted persona
-     */
-    Persona savePersona(Persona persona);
-
-    /**
-     * Retrieves the persona identified by the specified identifier and all 
its associated sessions
-     *
-     * @param personaId the identifier of the persona to retrieve
-     * @return a {@link PersonaWithSessions} instance with the persona 
identified by the specified identifier and all its associated sessions
-     */
-    PersonaWithSessions loadPersonaWithSessions(String personaId);
-
-    /**
-     * Creates a persona with the specified identifier and automatically 
creates an associated session with it.
-     *
-     * @param personaId the identifier to use for the new persona
-     * @return the newly created persona
-     */
-    Persona createPersona(String personaId);
-
-    /**
-     * Retrieves the sessions associated with the persona identified by the 
specified identifier, ordered according to the specified {@code sortBy} String 
and and paged: only
-     * {@code size} of them are retrieved, starting with the {@code offset}-th 
one.
-     *
-     * @param personaId the persona id
-     * @param offset    zero or a positive integer specifying the position of 
the first session in the total ordered collection of matching sessions
-     * @param size      a positive integer specifying how many matching 
sessions should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy    an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in the
-     *                  String, considering each in turn and moving on to the 
next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *                  a column ({@code :}) and an order specifier: {@code 
asc} or {@code desc}.
-     * @return a {@link PartialList} of sessions for the persona identified by 
the specified identifier
-     */
-    PartialList<Session> getPersonaSessions(String personaId, int offset, int 
size, String sortBy);
-
-    /**
-     * Retrieves all the property types associated with the specified target.
-     *
-     * TODO: move to a different class
-     *
-     * @param target the target for which we want to retrieve the associated 
property types
-     * @return a collection of all the property types associated with the 
specified target
-     */
-    Collection<PropertyType> getAllPropertyTypes(String target);
-
-    /**
-     * Retrieves all known property types.
-     *
-     * TODO: move to a different class
-     * TODO: use Map instead of HashMap
-     *
-     * @return a Map associating targets as keys to related {@link 
PropertyType}s
-     */
-    HashMap<String, Collection<PropertyType>> getAllPropertyTypes();
-
-    /**
-     * Retrieves all property types with the specified tag also retrieving 
property types with sub-tags of the specified tag if so specified.
-     *
-     * TODO: move to a different class
-     *
-     * @param tag                the tag name marking property types we want 
to retrieve
-     * @param includeFromSubtags {@code true} if sub-tags of the specified tag 
should also be considered, {@code false} otherwise
-     * @return a Set of the property types with the specified tag
-     */
-    Set<PropertyType> getPropertyTypeByTag(String tag, boolean 
includeFromSubtags);
-
-    /**
-     * TODO
-     */
-    String getPropertyTypeMapping(String fromPropertyTypeId);
-
-    /**
-     * TODO
-     */
-    Collection<PropertyType> getPropertyTypeByMapping(String propertyName);
-
-    /**
-     * Retrieves the property type identified by the specified identifier.
-     *
-     * TODO: move to a different class
-     *
-     * @param id the identifier of the property type to retrieve
-     * @return the property type identified by the specified identifier or 
{@code null} if no such property type exists
-     */
-    PropertyType getPropertyType(String id);
-
-    /**
-     * Persists the specified property type in the context server.
-     *
-     * TODO: move to a different class
-     *
-     * @param property the property type to persist
-     * @return {@code true} if the property type was properly created, {@code 
false} otherwise (for example, if the property type already existed
-     */
-    boolean createPropertyType(PropertyType property);
-
-    /**
-     * Deletes the property type identified by the specified identifier.
-     *
-     * TODO: move to a different class
-     *
-     * @param propertyId the identifier of the property type to delete
-     * @return {@code true} if the property type was properly deleted, {@code 
false} otherwise
-     */
-    boolean deletePropertyType(String propertyId);
-
-    /**
-     * Retrieves the existing property types for the specified type as defined 
by the Item subclass public field {@code ITEM_TYPE} and with the specified tag.
-     *
-     * TODO: move to a different class
-     *
-     * @param tagId    the tag we're interested in
-     * @param itemType the String representation of the item type we want to 
retrieve the count of, as defined by its class' {@code ITEM_TYPE} field
-     * @return all property types defined for the specified item type and with 
the specified tag
-     */
-    Set<PropertyType> getExistingProperties(String tagId, String itemType);
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/QueryService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/QueryService.java 
b/api/src/main/java/org/oasis_open/contextserver/api/services/QueryService.java
deleted file mode 100644
index b9f9c68..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/QueryService.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.conditions.Condition;
-import org.oasis_open.contextserver.api.query.AggregateQuery;
-
-import java.util.Map;
-
-/**
- * A service to perform queries.
- */
-public interface QueryService {
-
-    /**
-     * Retrieves the number of items with the specified type as defined by the 
Item subclass public field {@code ITEM_TYPE} and aggregated by possible values 
of the specified
-     * property.
-     *
-     * @param itemType the String representation of the item type we want to 
retrieve the count of, as defined by its class' {@code ITEM_TYPE} field
-     * @param property the property we're aggregating on, i.e. for each 
possible value of this property, we are counting how many items of the 
specified type have that value
-     * @return a Map associating a specific value of the property to the 
cardinality of items with that value
-     * @see Item Item for a discussion of {@code ITEM_TYPE}
-     */
-    Map<String, Long> getAggregate(String itemType, String property);
-
-    /**
-     * TODO: rework, this method is confusing since it either behaves like 
{@link #getAggregate(String, String)} if query is null but completely 
differently if it isn't
-     *
-     * Retrieves the number of items with the specified type as defined by the 
Item subclass public field {@code ITEM_TYPE} and aggregated by possible values 
of the specified
-     * property or, if the specified query is not {@code null}, perform that 
aggregate query.
-     *
-     * @param itemType the String representation of the item type we want to 
retrieve the count of, as defined by its class' {@code ITEM_TYPE} field
-     * @param property the property we're aggregating on, i.e. for each 
possible value of this property, we are counting how many items of the 
specified type have that value
-     * @param query    the {@link AggregateQuery} specifying the aggregation 
that should be perfomed
-     * @return a Map associating a specific value of the property to the 
cardinality of items with that value
-     * @see Item Item for a discussion of {@code ITEM_TYPE}
-     */
-    Map<String, Long> getAggregate(String itemType, String property, 
AggregateQuery query);
-
-    /**
-     * Retrieves the number of items of the specified type as defined by the 
Item subclass public field {@code ITEM_TYPE} and matching the specified {@link 
Condition}.
-     *
-     * @param condition the condition the items must satisfy
-     * @param itemType  the String representation of the item type we want to 
retrieve the count of, as defined by its class' {@code ITEM_TYPE} field
-     * @return the number of items of the specified type
-     * @see Item Item for a discussion of {@code ITEM_TYPE}
-     */
-    long getQueryCount(String itemType, Condition condition);
-
-    /**
-     * Retrieves the specified metrics for the specified field of items of the 
specified type as defined by the Item subclass public field {@code ITEM_TYPE} 
and matching the
-     * specified {@link Condition}.
-     *
-     * @param condition                the condition the items must satisfy
-     * @param slashConcatenatedMetrics a String specifying which metrics 
should be computed, separated by a slash ({@code /}) (possible values: {@code 
sum} for the sum of the
-     *                                 values, {@code avg} for the average of 
the values, {@code min} for the minimum value and {@code max} for the maximum 
value)
-     * @param property                 the name of the field for which the 
metrics should be computed
-     * @param type                     the String representation of the item 
type we want to retrieve the count of, as defined by its class' {@code 
ITEM_TYPE} field
-     * @return a Map associating computed metric name as key to its associated 
value
-     * @see Item Item for a discussion of {@code ITEM_TYPE}
-     */
-    Map<String, Double> getMetric(String type, String property, String 
slashConcatenatedMetrics, Condition condition);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/RulesService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/RulesService.java 
b/api/src/main/java/org/oasis_open/contextserver/api/services/RulesService.java
deleted file mode 100644
index 10fbb3f..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/RulesService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.PartialList;
-import org.oasis_open.contextserver.api.conditions.Condition;
-import org.oasis_open.contextserver.api.query.Query;
-import org.oasis_open.contextserver.api.rules.Rule;
-
-import java.util.Set;
-
-/**
- * A service to access and operate on {@link Rule}s.
- */
-public interface RulesService {
-
-    /**
-     * Retrieves the metadata for all known rules.
-     *
-     * @return the Set of known metadata
-     */
-    Set<Metadata> getRuleMetadatas();
-
-    /**
-     * Retrieves rule metadatas for rules matching the specified {@link Query}.
-     *
-     * @param query the query the rules which metadata we want to retrieve 
must match
-     * @return a {@link PartialList} of rules metadata for the rules matching 
the specified query
-     */
-    PartialList<Metadata> getRuleMetadatas(Query query);
-
-    /**
-     * Retrieves the rule identified by the specified identifier.
-     *
-     * @param ruleId the identifier of the rule we want to retrieve
-     * @return the rule identified by the specified identifier or {@code null} 
if no such rule exists.
-     */
-    Rule getRule(String ruleId);
-
-    /**
-     * Persists the specified rule to the context server.
-     *
-     * @param rule the rule to be persisted
-     */
-    void setRule(Rule rule);
-
-    /**
-     * Deletes the rule identified by the specified identifier.
-     *
-     * @param ruleId the identifier of the rule we want to delete
-     */
-    void removeRule(String ruleId);
-
-    /**
-     * Retrieves tracked conditions (rules with a condition marked with the 
{@code trackedCondition} tag and which {@code sourceEventCondition} matches the 
specified item) for the
-     * specified item.
-     *
-     * @param item the item which tracked conditions we want to retrieve
-     * @return the Set of tracked conditions for the specified item
-     */
-    Set<Condition> getTrackedConditions(Item item);
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/api/src/main/java/org/oasis_open/contextserver/api/services/SegmentService.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/org/oasis_open/contextserver/api/services/SegmentService.java
 
b/api/src/main/java/org/oasis_open/contextserver/api/services/SegmentService.java
deleted file mode 100644
index 59a7031..0000000
--- 
a/api/src/main/java/org/oasis_open/contextserver/api/services/SegmentService.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * 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.oasis_open.contextserver.api.services;
-
-import org.oasis_open.contextserver.api.Item;
-import org.oasis_open.contextserver.api.Metadata;
-import org.oasis_open.contextserver.api.PartialList;
-import org.oasis_open.contextserver.api.Profile;
-import org.oasis_open.contextserver.api.query.Query;
-import org.oasis_open.contextserver.api.segments.Scoring;
-import org.oasis_open.contextserver.api.segments.Segment;
-import org.oasis_open.contextserver.api.segments.SegmentsAndScores;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * A service to access and operate on {@link Segment}s and {@link Scoring}s
- */
-public interface SegmentService {
-
-    /**
-     * Retrieves segment metadatas, ordered according to the specified {@code 
sortBy} String and and paged: only {@code size} of them are retrieved, starting 
with the {@code
-     * offset}-th one.
-     *
-     * @param offset zero or a positive integer specifying the position of the 
first element in the total ordered collection of matching elements
-     * @param size   a positive integer specifying how many matching elements 
should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in the
-     *               String, considering each in turn and moving on to the 
next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *               a column ({@code :}) and an order specifier: {@code asc} 
or {@code desc}.
-     * @return a {@link PartialList} of segment metadata
-     */
-    PartialList<Metadata> getSegmentMetadatas(int offset, int size, String 
sortBy);
-
-    /**
-     * Retrieves segment metadatas for segments in the specified scope, 
ordered according to the specified {@code sortBy} String and and paged: only 
{@code size} of them are
-     * retrieved, starting with the {@code offset}-th one.
-     *
-     * TODO: remove?
-     *
-     * @param scope  the scope for which we want to retrieve segment metadata
-     * @param offset zero or a positive integer specifying the position of the 
first element in the total ordered collection of matching elements
-     * @param size   a positive integer specifying how many matching elements 
should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in the
-     *               String, considering each in turn and moving on to the 
next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *               a column ({@code :}) and an order specifier: {@code asc} 
or {@code desc}.
-     * @return a {@link PartialList} of segment metadata
-     */
-    PartialList<Metadata> getSegmentMetadatas(String scope, int offset, int 
size, String sortBy);
-
-    /**
-     * Retrieves the metadata for segments matching the specified {@link 
Query}.
-     *
-     * @param query the query that the segments must match for their metadata 
to be retrieved
-     * @return a {@link PartialList} of segment metadata
-     */
-    PartialList<Metadata> getSegmentMetadatas(Query query);
-
-    /**
-     * Retrieves the segment identified by the specified identifier.
-     *
-     * @param segmentId the identifier of the segment to be retrieved
-     * @return the segment identified by the specified identifier or {@code 
null} if no such segment exists
-     */
-    Segment getSegmentDefinition(String segmentId);
-
-    /**
-     * Persists the specified segment in the context server.
-     *
-     * @param segment the segment to be persisted
-     */
-    void setSegmentDefinition(Segment segment);
-
-    /**
-     * Removes the segment definition identified by the specified identifier. 
We can specify that we want the operation to be validated beforehand so that we 
can
-     * know if any other segment that might use the segment we're trying to 
delete as a condition might be impacted. If {@code validate} is set to {@code 
false}, no
-     * validation is performed. If set to {@code true}, we will first check if 
any segment depends on the one we're trying to delete and if so we will not 
delete the
-     * segment but rather return the list of the metadata of the impacted 
segments. If no dependents are found, then we properly delete the segment.
-     *
-     * @param segmentId the identifier of the segment we want to delete
-     * @param validate  whether or not to perform validation
-     * @return a list of impacted segment metadata if any or an empty list if 
no such impacted segments are found or validation was skipped
-     */
-    List<Metadata> removeSegmentDefinition(String segmentId, boolean validate);
-
-    /**
-     * Retrieves the list of segment metadata of segments depending on the 
segment identified by the specified identifier. A segment is depending on 
another one if it includes
-     * that segment as part of its condition for profile matching.
-     *
-     * TODO: Rename to something clearer, maybe getDependentSegmentMetadata?
-     *
-     * @param segmentId the identifier of the segment which impact we want to 
evaluate
-     * @return a list of metadata of segments depending on the specified 
segment
-     */
-    List<Metadata> getImpactedSegmentMetadata(String segmentId);
-
-    /**
-     * Retrieves a list of profiles matching the conditions defined by the 
segment identified by the specified identifier, ordered according to the 
specified {@code sortBy}
-     * String and and paged: only {@code size} of them are retrieved, starting 
with the {@code offset}-th one.
-     *
-     * @param segmentID the identifier of the segment for which we want to 
retrieve matching profiles
-     * @param offset    zero or a positive integer specifying the position of 
the first element in the total ordered collection of matching elements
-     * @param size      a positive integer specifying how many matching 
elements should be retrieved or {@code -1} if all of them should be retrieved
-     * @param sortBy    an optional ({@code null} if no sorting is required) 
String of comma ({@code ,}) separated property names on which ordering should 
be performed, ordering elements according to the property order in the
-     *                  String, considering each in turn and moving on to the 
next one in case of equality of all preceding ones. Each property name is 
optionally followed by
-     *                  a column ({@code :}) and an order specifier: {@code 
asc} or {@code desc}.
-     * @return a {@link PartialList} of profiles matching the specified segment
-     */
-    PartialList<Profile> getMatchingIndividuals(String segmentID, int offset, 
int size, String sortBy);
-
-    /**
-     * Retrieves the number of profiles matching the conditions defined by the 
segment identified by the specified identifier.
-     *
-     * @param segmentID the identifier of the segment for which we want to 
retrieve matching profiles
-     * @return the number of profiles matching the conditions defined by the 
segment identified by the specified identifier
-     */
-    long getMatchingIndividualsCount(String segmentID);
-
-    /**
-     * Determines whether the specified profile is part of the segment 
identified by the specified identifier.
-     *
-     * @param profile   the profile we want to check
-     * @param segmentId the identifier of the segment against which we want to 
check the profile
-     * @return {@code true} if the specified profile is in the specified 
segment, {@code false} otherwise
-     */
-    Boolean isProfileInSegment(Profile profile, String segmentId);
-
-    /**
-     * Retrieves the segments and scores for the specified profile.
-     *
-     * @param profile the profile for which we want to retrieve segments and 
scores
-     * @return a {@link SegmentsAndScores} instance encapsulating the segments 
and scores for the specified profile
-     */
-    SegmentsAndScores getSegmentsAndScoresForProfile(Profile profile);
-
-    /**
-     * Retrieves the list of segment metadata for the segments the specified 
profile is a member of.
-     *
-     * @param profile the profile for which we want to retrieve the segment 
metadata
-     * @return the (possibly empty) list of segment metadata for the segments 
the specified profile is a member of
-     */
-    List<Metadata> getSegmentMetadatasForProfile(Profile profile);
-
-    /**
-     * Retrieves the set of all scoring metadata.
-     *
-     * @return the set of all scoring metadata
-     */
-    PartialList<Metadata> getScoringMetadatas(int offset, int size, String 
sortBy);
-
-    /**
-     * Retrieves the set of scoring metadata for scorings matching the 
specified query.
-     *
-     * @param query the query the scorings must match for their metadata to be 
retrieved
-     * @return the set of scoring metadata for scorings matching the specified 
query
-     */
-    PartialList<Metadata> getScoringMetadatas(Query query);
-
-    /**
-     * Retrieves the scoring identified by the specified identifier.
-     *
-     * @param scoringId the identifier of the scoring to be retrieved
-     * @return the scoring identified by the specified identifier or {@code 
null} if no such scoring exists
-     */
-    Scoring getScoringDefinition(String scoringId);
-
-    /**
-     * Persists the specified scoring in the context server.
-     *
-     * @param scoring the scoring to be persisted
-     */
-    void setScoringDefinition(Scoring scoring);
-
-    /**
-     * Creates a scoring with the specified scope, identifier, name and 
description.
-     *
-     * @param scope       the scope for the new scoring
-     * @param scoringId   the identifier for the new scoring
-     * @param name        the name of the new scoring
-     * @param description the description of the new scoring
-     * @see Item Item's description for a discussion of scope
-     */
-    void createScoringDefinition(String scope, String scoringId, String name, 
String description);
-
-    /**
-     * Deletes the scoring identified by the specified identifier from the 
context server.
-     *
-     * @param scoringId the identifier of the scoring to be deleted
-     */
-    void removeScoringDefinition(String scoringId);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/dc1d1520/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java
----------------------------------------------------------------------
diff --git 
a/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java
 
b/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java
new file mode 100644
index 0000000..3821760
--- /dev/null
+++ 
b/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java
@@ -0,0 +1,113 @@
+/*
+ * 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.geonames.rest;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.geonames.services.GeonameEntry;
+import org.apache.unomi.geonames.services.GeonamesService;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.PathSegment;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+@WebService
+@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
+@CrossOriginResourceSharing(
+        allowAllOrigins = true,
+        allowCredentials = true
+)
+public class GeonamesEndPoint {
+
+    private GeonamesService geonamesService;
+
+    public GeonamesEndPoint() {
+        System.out.println("Initializing geonames service endpoint...");
+    }
+
+    @WebMethod(exclude = true)
+    public void setGeonamesService(GeonamesService geonamesService) {
+        this.geonamesService = geonamesService;
+    }
+
+    @GET
+    @Path("/reverseGeoCode/{latlon}")
+    public List<GeonameEntry> reverseGeoCode(@PathParam("latlon") String 
latlon, @HeaderParam("Accept-Language") String language) {
+        String[] s = latlon.split(",");
+        List<GeonameEntry> entries = geonamesService.reverseGeoCode(s[0], 
s[1]);
+        translate(entries, new Locale(language));
+        return entries;
+    }
+
+    @GET
+    @Path("/entries/{items:.*}")
+    public PartialList<GeonameEntry> getChildrenEntries(@PathParam("items") 
List<PathSegment> items, @HeaderParam("Accept-Language") String language) {
+        List<String> l = new ArrayList<>();
+        for (PathSegment item : items) {
+            l.add(item.getPath());
+        }
+        PartialList<GeonameEntry> list = geonamesService.getChildrenEntries(l, 
0, 999);
+        translate(list.getList(), new Locale(language));
+        return list;
+    }
+
+    @GET
+    @Path("/cities/{items:.*}")
+    public PartialList<GeonameEntry> getChildrenCities(@PathParam("items") 
List<PathSegment> items, @HeaderParam("Accept-Language") String language) {
+        List<String> l = new ArrayList<>();
+        for (PathSegment item : items) {
+            l.add(item.getPath());
+        }
+        PartialList<GeonameEntry> list = geonamesService.getChildrenCities(l, 
0, 999);
+        translate(list.getList(), new Locale(language));
+        return list;
+    }
+
+    @GET
+    @Path("/hierarchy/{id}")
+    public List<GeonameEntry> getHierarchy(@PathParam("id") String id, 
@HeaderParam("Accept-Language") String language) {
+        List<GeonameEntry> list = geonamesService.getHierarchy(id);
+        translate(list, new Locale(language));
+        return list;
+    }
+
+    @GET
+    @Path("/capitals/{id}")
+    public List<GeonameEntry> getCapitalEntries(@PathParam("id") String id, 
@HeaderParam("Accept-Language") String language) {
+        List<GeonameEntry> list = geonamesService.getCapitalEntries(id);
+        translate(list, new Locale(language));
+        return list;
+    }
+
+    private void translate(List<GeonameEntry> l, Locale locale) {
+        for (GeonameEntry entry : l) {
+            if 
(GeonamesService.COUNTRY_FEATURE_CODES.contains(entry.getFeatureCode())) {
+                String name = new Locale("", 
entry.getCountryCode()).getDisplayCountry(locale);
+                if (!StringUtils.isEmpty(name) && 
!name.equals(entry.getCountryCode())) {
+                    entry.setName(name);
+                }
+            }
+        }
+    }
+}


Reply via email to