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

shuber pushed a commit to branch opensearch-persistence
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/opensearch-persistence by this 
push:
     new 65cf66e4c - Rename all query builder IDs to no longer use a reference 
to ElasticSearch - Remove hover event query builder that is replaced with a 
condition definition with a parent condition - Add a JSON schema for the hover 
event type - Add missing JavaDocs
65cf66e4c is described below

commit 65cf66e4c21989ed0ca3c16a878a54f9d7ec7883
Author: Serge Huber <[email protected]>
AuthorDate: Tue Oct 14 11:12:47 2025 +0200

    - Rename all query builder IDs to no longer use a reference to ElasticSearch
    - Remove hover event query builder that is replaced with a condition 
definition with a parent condition
    - Add a JSON schema for the hover event type
    - Add missing JavaDocs
---
 .../cxs/conditions/userListPropertyCondition.json  |  2 +-
 .../src/main/asciidoc/builtin-condition-types.adoc |  4 +-
 manual/src/main/asciidoc/writing-plugins.adoc      |  4 +-
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  6 +--
 .../resources/OSGI-INF/blueprint/blueprint.xml     | 12 ++---
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  6 +--
 .../resources/OSGI-INF/blueprint/blueprint.xml     | 12 ++---
 .../persistence/spi/conditions/DateUtils.java      | 29 ++++++++++++
 .../datemath/DateMathParseException.java           |  3 ++
 .../spi/conditions/datemath/DateMathParser.java    | 10 ++++
 .../spi/conditions/datemath/JavaDateFormatter.java | 10 ++++
 .../spi/conditions/geo/DistanceUnit.java           | 10 ++++
 .../spi/conditions/geo/GeoDistance.java            | 11 +++++
 .../conditions/datemath/DateMathParserTest.java    |  5 ++
 .../conditions/datemath/JavaDateFormatterTest.java | 12 ++---
 .../META-INF/cxs/conditions/IdsCondition.json      |  2 +-
 .../META-INF/cxs/conditions/booleanCondition.json  |  2 +-
 .../cxs/conditions/eventPropertyCondition.json     |  2 +-
 .../geoLocationByPointSessionCondition.json        |  2 +-
 .../META-INF/cxs/conditions/matchAllCondition.json |  2 +-
 .../META-INF/cxs/conditions/nestedCondition.json   |  2 +-
 .../META-INF/cxs/conditions/notCondition.json      |  2 +-
 .../cxs/conditions/pastEventCondition.json         |  2 +-
 .../profileAliasesPropertyCondition.json           |  2 +-
 .../cxs/conditions/profilePropertyCondition.json   |  2 +-
 .../cxs/conditions/sessionPropertyCondition.json   |  2 +-
 .../conditions/sourceEventPropertyCondition.json   |  2 +-
 .../cxs/conditions/topicPropertyCondition.json     |  2 +-
 plugins/hover-event/pom.xml                        |  8 ----
 .../HoverEventConditionESQueryBuilder.java         | 53 ----------------------
 .../cxs/conditions/hoverEventCondition.json        | 43 +++++++++++++++++-
 .../META-INF/cxs/schemas/hover-event.json          | 25 ++++++++++
 .../resources/OSGI-INF/blueprint/blueprint.xml     | 29 ------------
 .../src/main/resources/messages_en.properties      | 20 --------
 .../src/main/resources/messages_fr.properties      | 20 --------
 .../UnomiManagementServiceConfiguration.java       | 20 +++++++-
 36 files changed, 203 insertions(+), 177 deletions(-)

diff --git 
a/graphql/cxs-impl/src/main/resources/META-INF/cxs/conditions/userListPropertyCondition.json
 
b/graphql/cxs-impl/src/main/resources/META-INF/cxs/conditions/userListPropertyCondition.json
index 5a6be5e13..6c13037f8 100644
--- 
a/graphql/cxs-impl/src/main/resources/META-INF/cxs/conditions/userListPropertyCondition.json
+++ 
b/graphql/cxs-impl/src/main/resources/META-INF/cxs/conditions/userListPropertyCondition.json
@@ -10,7 +10,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "propertyConditionEvaluator",
-  "queryBuilder": "propertyConditionESQueryBuilder",
+  "queryBuilder": "propertyConditionQueryBuilder",
   "parameters": [
     {
       "id": "propertyName",
diff --git a/manual/src/main/asciidoc/builtin-condition-types.adoc 
b/manual/src/main/asciidoc/builtin-condition-types.adoc
index 4e1acf05c..fc0352fe0 100644
--- a/manual/src/main/asciidoc/builtin-condition-types.adoc
+++ b/manual/src/main/asciidoc/builtin-condition-types.adoc
@@ -36,7 +36,7 @@ find here an overview of what a JSON condition descriptor 
looks like:
     "readOnly": true
   },
   "conditionEvaluator": "booleanConditionEvaluator",
-  "queryBuilder": "booleanConditionESQueryBuilder",
+  "queryBuilder": "booleanConditionQueryBuilder",
   "parameters": [
     {
       "id": "operator",
@@ -70,7 +70,7 @@ When implementing a new condition type, you need to provide 
implementations for
 <!-- ElasticSearch Query Builder -->
 <service 
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
     <service-properties>
-        <entry key="queryBuilderId" value="booleanConditionESQueryBuilder"/>
+        <entry key="queryBuilderId" value="booleanConditionQueryBuilder"/>
     </service-properties>
     <bean 
class="org.apache.unomi.persistence.elasticsearch.BooleanConditionESQueryBuilder"/>
 </service>
diff --git a/manual/src/main/asciidoc/writing-plugins.adoc 
b/manual/src/main/asciidoc/writing-plugins.adoc
index 2848a4cab..73a056e70 100644
--- a/manual/src/main/asciidoc/writing-plugins.adoc
+++ b/manual/src/main/asciidoc/writing-plugins.adoc
@@ -621,7 +621,7 @@ Here is an example of JSON custom condition type definition:
     "readOnly": true
   },
   "conditionEvaluator": "matchAllConditionEvaluator",
-  "queryBuilder": "matchAllConditionESQueryBuilder",
+  "queryBuilder": "matchAllConditionQueryBuilder",
 
   "parameters": [
   ]
@@ -643,7 +643,7 @@ src/main/resources/OSGI-INF/blueprint/blueprint.xml
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="matchAllConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="matchAllConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="conditions.org.apache.unomi.persistence.elasticsearch.MatchAllConditionESQueryBuilder"/>
     </service>
diff --git 
a/persistence-elasticsearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/persistence-elasticsearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 94fff8b51..db3e63c7a 100644
--- 
a/persistence-elasticsearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/persistence-elasticsearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -38,7 +38,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="idsConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="idsConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.advanced.IdsConditionESQueryBuilder">
             <property name="maximumIdsQueryCount" 
value="${es.maximumIdsQueryCount}"/>
@@ -48,7 +48,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="geoLocationByPointSessionConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="geoLocationByPointSessionConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.advanced.GeoLocationByPointSessionConditionESQueryBuilder"/>
     </service>
@@ -59,7 +59,7 @@
             
<value>org.apache.unomi.persistence.spi.conditions.PastEventConditionPersistenceQueryBuilder</value>
         </interfaces>
         <service-properties>
-            <entry key="queryBuilderId" 
value="pastEventConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="pastEventConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.advanced.PastEventConditionESQueryBuilder">
             <property name="definitionsService" ref="definitionsService"/>
diff --git 
a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index b94416a6a..77ebd264b 100644
--- 
a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -161,7 +161,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="booleanConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="booleanConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.BooleanConditionESQueryBuilder"/>
     </service>
@@ -169,7 +169,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="notConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="notConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.NotConditionESQueryBuilder"/>
     </service>
@@ -177,7 +177,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="matchAllConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="matchAllConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.MatchAllConditionESQueryBuilder"/>
     </service>
@@ -185,7 +185,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="propertyConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="propertyConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.PropertyConditionESQueryBuilder"/>
     </service>
@@ -193,7 +193,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="sourceEventPropertyConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="sourceEventPropertyConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.SourceEventPropertyConditionESQueryBuilder"/>
     </service>
@@ -201,7 +201,7 @@
     <service
             
interface="org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="nestedConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="nestedConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.elasticsearch.querybuilders.core.NestedConditionESQueryBuilder"/>
     </service>
diff --git 
a/persistence-opensearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/persistence-opensearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 3fd1df1ec..6b4c88a67 100644
--- 
a/persistence-opensearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/persistence-opensearch/conditions/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -53,7 +53,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="idsConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="idsConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.advanced.IdsConditionOSQueryBuilder">
             <property name="maximumIdsQueryCount" 
value="${os.maximumIdsQueryCount}"/>
@@ -63,7 +63,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="geoLocationByPointSessionConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="geoLocationByPointSessionConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.advanced.GeoLocationByPointSessionConditionOSQueryBuilder"/>
     </service>
@@ -74,7 +74,7 @@
             
<value>org.apache.unomi.persistence.spi.conditions.PastEventConditionPersistenceQueryBuilder</value>
         </interfaces>
         <service-properties>
-            <entry key="queryBuilderId" 
value="pastEventConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="pastEventConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.advanced.PastEventConditionOSQueryBuilder">
             <property name="definitionsService" ref="definitionsService"/>
diff --git 
a/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index ccfb8e73e..38260a7ff 100644
--- 
a/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -156,7 +156,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="booleanConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="booleanConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.BooleanConditionOSQueryBuilder"/>
     </service>
@@ -164,7 +164,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="notConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="notConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.NotConditionOSQueryBuilder"/>
     </service>
@@ -172,7 +172,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="matchAllConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="matchAllConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.MatchAllConditionOSQueryBuilder"/>
     </service>
@@ -180,7 +180,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="propertyConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="propertyConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.PropertyConditionOSQueryBuilder"/>
     </service>
@@ -188,7 +188,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" 
value="sourceEventPropertyConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" 
value="sourceEventPropertyConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.SourceEventPropertyConditionOSQueryBuilder"/>
     </service>
@@ -196,7 +196,7 @@
     <service
             
interface="org.apache.unomi.persistence.opensearch.ConditionOSQueryBuilder">
         <service-properties>
-            <entry key="queryBuilderId" value="nestedConditionESQueryBuilder"/>
+            <entry key="queryBuilderId" value="nestedConditionQueryBuilder"/>
         </service-properties>
         <bean 
class="org.apache.unomi.persistence.opensearch.querybuilders.core.NestedConditionOSQueryBuilder"/>
     </service>
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/DateUtils.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/DateUtils.java
index 996cc0a05..f09c35e98 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/DateUtils.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/DateUtils.java
@@ -27,10 +27,39 @@ import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 
+/**
+ * Utility methods for working with dates in Unomi's persistence condition 
layer.
+ * <p>
+ * Provides a helper to convert various date representations (for example a
+ * {@link java.util.Date} instance, an ISO-8601 timestamp, epoch milliseconds,
+ * or an Elasticsearch/OpenSearch date math expression) into a {@link 
java.util.Date}
+ * in UTC.
+ * <p>
+ * This class and the associated classes in the {@code datemath} and {@code 
geo} packages are
+ * 100% compatible replacements for classes that used to be provided by 
Elasticsearch. They were
+ * introduced to remove the direct dependency on Elasticsearch after it 
stopped exposing those
+ * utility classes. Keeping them here ensures backward-compatible behavior 
across our persistence
+ * implementations, including OpenSearch.
+ * <p>
+ * This class is stateless and thread-safe.
+ */
 public class DateUtils {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DateUtils.class.getName());
 
+    /**
+     * Resolves the provided value to a {@link Date}.
+     * <ul>
+     *     <li>If the value is {@code null}, returns {@code null}.</li>
+     *     <li>If the value is already a {@link Date}, returns it 
unchanged.</li>
+     *     <li>Otherwise, attempts to parse the value as a string using a date 
math parser
+     *     that supports {@code strict_date_optional_time}, {@code 
epoch_millis}, ISO-8601
+     *     formats, and Elasticsearch/OpenSearch date math expressions, all 
evaluated in UTC.</li>
+     * </ul>
+     *
+     * @param value a date-like value (may be a {@link Date} or a parseable 
{@link String})
+     * @return a {@link Date} if parsing succeeds; {@code null} otherwise
+     */
     public static Date getDate(Object value) {
         if (value == null) {
             return null;
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParseException.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParseException.java
index 60f5af9be..f89e44e73 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParseException.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParseException.java
@@ -18,6 +18,9 @@ package org.apache.unomi.persistence.spi.conditions.datemath;
 
 /**
  * Exception thrown by the {@link DateMathParser} when a malformed date math 
expression is encountered.
+ * <p>
+ * Part of the Unomi-internal replacement for prior Elasticsearch utilities, 
allowing us to keep
+ * the same semantics without a direct dependency on Elasticsearch.
  */
 public class DateMathParseException extends RuntimeException {
     public DateMathParseException(String message) {
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParser.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParser.java
index 4c599c1c9..46fb505b1 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParser.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParser.java
@@ -25,6 +25,16 @@ import java.time.temporal.TemporalQueries;
 import java.util.function.Function;
 import java.util.function.LongSupplier;
 
+/**
+ * Parser for Elasticsearch/OpenSearch-style date math expressions such as
+ * {@code now-1d/d} or {@code 2001-01-01||+1M-1d}. The parser supports rounding
+ * and arithmetic on calendar units and returns results as {@link 
java.time.Instant}s.
+ * <p>
+ * This implementation is a 100% compatible replacement for functionality that 
was
+ * historically available in Elasticsearch but not exposed as a reusable 
library. It is
+ * included in Unomi to decouple from Elasticsearch while preserving expected 
behavior
+ * across persistence backends, including OpenSearch.
+ */
 public class DateMathParser {
 
     public static boolean isNullOrEmpty(CharSequence cs) {
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatter.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatter.java
index bc21e3908..2cb3fae7d 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatter.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatter.java
@@ -25,6 +25,16 @@ import java.time.temporal.TemporalQueries;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * A formatter for parsing date/time strings supporting a subset of 
Elasticsearch/OpenSearch
+ * built-in date patterns (for example {@code strict_date_optional_time}, 
{@code epoch_millis},
+ * and others) as well as custom Java date-time patterns. Parsing is performed 
in UTC by default.
+ * <p>
+ * This class is a 100% compatible replacement for utilities previously 
provided by Elasticsearch
+ * that are no longer exposed. It exists in Unomi to remove the hard 
dependency on Elasticsearch
+ * while preserving the same behavior used by our persistence implementations, 
including
+ * OpenSearch.
+ */
 public class JavaDateFormatter {
     private final List<FormatDefinition> formats;
     private final boolean allowEpochMillis;
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/DistanceUnit.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/DistanceUnit.java
index 292cbd383..4c89f0afb 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/DistanceUnit.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/DistanceUnit.java
@@ -19,6 +19,16 @@ package org.apache.unomi.persistence.spi.conditions.geo;
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * Units of distance and conversion helpers compatible with those used 
historically by Elasticsearch.
+ * <p>
+ * This enum replaces prior Elasticsearch utilities with a 100% compatible 
implementation hosted
+ * within Unomi, allowing us to remove the dependency while retaining 
identical behavior in the
+ * persistence layer and tests.
+ * 
+ * TODO maybe evaluate https://github.com/unitsofmeasurement/indriya instead 
of this implementation
+ * to see if it can be a 100% compatible replacement.
+ */
 public enum DistanceUnit {
     KILOMETERS(1000.0, "km", "kilometers"),
     MILES(1609.344, "mi", "miles"),
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/GeoDistance.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/GeoDistance.java
index 117671c02..cdb0e4827 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/GeoDistance.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/geo/GeoDistance.java
@@ -16,6 +16,17 @@
  */
 package org.apache.unomi.persistence.spi.conditions.geo;
 
+/**
+ * Distance calculation strategies compatible with those historically used in 
Elasticsearch.
+ * <p>
+ * This enum provides 100% compatible replacements for distance computations 
(plane, arc,
+ * and haversine) that were previously sourced from Elasticsearch utilities. 
Keeping these
+ * here removes the need for an Elasticsearch dependency while preserving 
identical behavior
+ * for Unomi persistence layers, including OpenSearch.
+ * 
+ * TODO maybe evaluate https://github.com/unitsofmeasurement/indriya instead 
of this implementation
+ * to see if it can be a 100% compatible replacement.
+ */
 public enum GeoDistance {
     HAVERSINE {
         @Override
diff --git 
a/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParserTest.java
 
b/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParserTest.java
index 348523a59..9504fedc4 100644
--- 
a/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParserTest.java
+++ 
b/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/DateMathParserTest.java
@@ -26,6 +26,11 @@ import java.util.function.LongSupplier;
 
 import static org.junit.Assert.*;
 
+/**
+ * Tests for {@link DateMathParser} to ensure full compatibility with the 
semantics from
+ * Elasticsearch/OpenSearch date math, confirming Unomi's internal 
implementation behaves as a
+ * drop-in replacement without requiring the Elasticsearch dependency.
+ */
 public class DateMathParserTest {
 
     // Create the JavaDateFormatter with epoch millis support
diff --git 
a/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatterTest.java
 
b/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatterTest.java
index e43ad7c30..c8b007174 100644
--- 
a/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatterTest.java
+++ 
b/persistence-spi/src/test/java/org/apache/unomi/persistence/spi/conditions/datemath/JavaDateFormatterTest.java
@@ -23,14 +23,10 @@ import java.time.Instant;
 import static org.junit.Assert.*;
 
 /**
- * Comprehensive tests for JavaDateFormatter covering various formats:
- * - Epoch formats (epoch_millis, epoch_second)
- * - ISO-based formats (strict_date_optional_time, strict_date_time_no_millis, 
etc.)
- * - Basic formats (basic_date, basic_date_time, etc.)
- * - Ordinal formats (ordinal_date, etc.)
- * - Strict vs non-strict variants
- * - Custom patterns
- * - Fallback between multiple formats
+ * Comprehensive tests for {@link JavaDateFormatter} covering a wide range of 
built-in and custom
+ * patterns to ensure compatibility with behavior historically provided by 
Elasticsearch utilities.
+ * These tests verify that Unomi's formatter remains a drop-in replacement, 
allowing removal of the
+ * Elasticsearch dependency while preserving expected parsing semantics.
  */
 public class JavaDateFormatterTest {
 
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/IdsCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/IdsCondition.json
index 530e7fffb..a4a86850f 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/IdsCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/IdsCondition.json
@@ -7,7 +7,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "idsConditionEvaluator",
-  "queryBuilder": "idsConditionESQueryBuilder",
+  "queryBuilder": "idsConditionQueryBuilder",
   "parameters": [
     {
       "id": "ids",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/booleanCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/booleanCondition.json
index 45464ab63..3dbf1b04b 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/booleanCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/booleanCondition.json
@@ -15,7 +15,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "booleanConditionEvaluator",
-  "queryBuilder": "booleanConditionESQueryBuilder",
+  "queryBuilder": "booleanConditionQueryBuilder",
   "parameters": [
     {
       "id": "operator",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/eventPropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/eventPropertyCondition.json
index 024c3a3b1..e3d7a6174 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/eventPropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/eventPropertyCondition.json
@@ -12,7 +12,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "propertyConditionEvaluator",
-  "queryBuilder": "propertyConditionESQueryBuilder",
+  "queryBuilder": "propertyConditionQueryBuilder",
 
   "parameters": [
     {
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/geoLocationByPointSessionCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/geoLocationByPointSessionCondition.json
index 6312b07d7..037fa8ef6 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/geoLocationByPointSessionCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/geoLocationByPointSessionCondition.json
@@ -13,7 +13,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "geoLocationByPointSessionConditionEvaluator",
-  "queryBuilder": "geoLocationByPointSessionConditionESQueryBuilder",
+  "queryBuilder": "geoLocationByPointSessionConditionQueryBuilder",
 
   "parameters": [
     {
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/matchAllCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/matchAllCondition.json
index 19fa0656f..48aaf16d6 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/matchAllCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/matchAllCondition.json
@@ -15,7 +15,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "matchAllConditionEvaluator",
-  "queryBuilder": "matchAllConditionESQueryBuilder",
+  "queryBuilder": "matchAllConditionQueryBuilder",
 
   "parameters": [
   ]
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/nestedCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/nestedCondition.json
index 6fd44ac9d..426cc3c94 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/nestedCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/nestedCondition.json
@@ -13,7 +13,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "nestedConditionEvaluator",
-  "queryBuilder": "nestedConditionESQueryBuilder",
+  "queryBuilder": "nestedConditionQueryBuilder",
   "parameters": [
     {
       "id": "path",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/notCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/notCondition.json
index e030e62c5..736929d28 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/notCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/notCondition.json
@@ -15,7 +15,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "notConditionEvaluator",
-  "queryBuilder": "notConditionESQueryBuilder",
+  "queryBuilder": "notConditionQueryBuilder",
 
   "parameters": [
     {
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/pastEventCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/pastEventCondition.json
index ca5dd0731..3411cd66b 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/pastEventCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/pastEventCondition.json
@@ -14,7 +14,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "pastEventConditionEvaluator",
-  "queryBuilder": "pastEventConditionESQueryBuilder",
+  "queryBuilder": "pastEventConditionQueryBuilder",
 
   "parameters": [
     {
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profileAliasesPropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profileAliasesPropertyCondition.json
index 50fa56b1f..ef421ba26 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profileAliasesPropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profileAliasesPropertyCondition.json
@@ -10,7 +10,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "propertyConditionEvaluator",
-  "queryBuilder": "propertyConditionESQueryBuilder",
+  "queryBuilder": "propertyConditionQueryBuilder",
   "parameters": [
     {
       "id": "propertyName",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profilePropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profilePropertyCondition.json
index 7e18963bb..bddf515fd 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profilePropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/profilePropertyCondition.json
@@ -13,7 +13,7 @@
         "readOnly": true
     },
     "conditionEvaluator": "propertyConditionEvaluator",
-    "queryBuilder": "propertyConditionESQueryBuilder",
+    "queryBuilder": "propertyConditionQueryBuilder",
     "parameters": [
         {
             "id": "propertyName",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sessionPropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sessionPropertyCondition.json
index e3807db5e..8dad7607f 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sessionPropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sessionPropertyCondition.json
@@ -14,7 +14,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "propertyConditionEvaluator",
-  "queryBuilder": "propertyConditionESQueryBuilder",
+  "queryBuilder": "propertyConditionQueryBuilder",
   "parameters": [
     {
       "id": "propertyName",
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sourceEventPropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sourceEventPropertyCondition.json
index fb61dd2ea..ed52b8e77 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sourceEventPropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/sourceEventPropertyCondition.json
@@ -10,7 +10,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "sourceEventPropertyConditionEvaluator",
-  "queryBuilder": "sourceEventPropertyConditionESQueryBuilder",
+  "queryBuilder": "sourceEventPropertyConditionQueryBuilder",
 
   "parameters": [
     {
diff --git 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/topicPropertyCondition.json
 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/topicPropertyCondition.json
index f6ee28dff..83c7496e1 100644
--- 
a/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/topicPropertyCondition.json
+++ 
b/plugins/baseplugin/src/main/resources/META-INF/cxs/conditions/topicPropertyCondition.json
@@ -10,7 +10,7 @@
     "readOnly": true
   },
   "conditionEvaluator": "propertyConditionEvaluator",
-  "queryBuilder": "propertyConditionESQueryBuilder",
+  "queryBuilder": "propertyConditionQueryBuilder",
   "parameters": [
     {
       "id": "propertyName",
diff --git a/plugins/hover-event/pom.xml b/plugins/hover-event/pom.xml
index 715031699..e7ae5b6b8 100644
--- a/plugins/hover-event/pom.xml
+++ b/plugins/hover-event/pom.xml
@@ -40,14 +40,6 @@
         </dependencies>
     </dependencyManagement>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.unomi</groupId>
-            <artifactId>unomi-persistence-elasticsearch-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
     <build>
         <plugins>
             <plugin>
diff --git 
a/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
 
b/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.java
deleted file mode 100644
index 7a6a7efe0..000000000
--- 
a/plugins/hover-event/src/main/java/org/apache/unomi/plugins/events/hover/querybuilders/HoverEventConditionESQueryBuilder.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.apache.unomi.plugins.events.hover.querybuilders;
-
-import co.elastic.clients.elasticsearch._types.query_dsl.Query;
-import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
-import org.apache.unomi.api.conditions.Condition;
-import org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilder;
-import 
org.apache.unomi.persistence.elasticsearch.ConditionESQueryBuilderDispatcher;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Condition builder for hover event types
- */
-public class HoverEventConditionESQueryBuilder implements 
ConditionESQueryBuilder {
-
-    public HoverEventConditionESQueryBuilder() {
-    }
-
-    public Query buildQuery(Condition condition, Map<String, Object> context, 
ConditionESQueryBuilderDispatcher dispatcher) {
-        List<Query> queries = new ArrayList<>();
-        queries.add(QueryBuilders.term(builder -> 
builder.field("eventType").value("hover")));
-        String targetId = (String) condition.getParameter("targetId");
-        String targetPath = (String) condition.getParameter("targetPath");
-
-        if (targetId != null && !targetId.trim().isEmpty()) {
-            queries.add(QueryBuilders.term(builder -> 
builder.field("target.itemId").value(targetId)));
-        } else if (targetPath != null && targetPath.trim().length() > 0) {
-            queries.add(QueryBuilders.term(builder -> 
builder.field("target.properties.pageInfo.pagePath").value(targetPath)));
-        } else {
-            queries.add(QueryBuilders.term(builder -> 
builder.field("target.itemId").value("")));
-        }
-        return QueryBuilders.bool().must(queries).build()._toQuery();
-    }
-}
diff --git 
a/plugins/hover-event/src/main/resources/META-INF/cxs/conditions/hoverEventCondition.json
 
b/plugins/hover-event/src/main/resources/META-INF/cxs/conditions/hoverEventCondition.json
index d67e690c1..c0bfe4dc4 100644
--- 
a/plugins/hover-event/src/main/resources/META-INF/cxs/conditions/hoverEventCondition.json
+++ 
b/plugins/hover-event/src/main/resources/META-INF/cxs/conditions/hoverEventCondition.json
@@ -12,7 +12,46 @@
     ],
     "readOnly": true
   },
-  "queryBuilder": "hoverEventConditionESQueryBuilder",
+  "parentCondition": {
+    "type": "booleanCondition",
+    "parameterValues": {
+      "operator": "and",
+      "subConditions": [
+        {
+          "type": "eventPropertyCondition",
+          "parameterValues": {
+            "propertyName": "eventType",
+            "propertyValue": "hover",
+            "comparisonOperator": "equals"
+          }
+        },
+        {
+          "type": "booleanCondition",
+          "parameterValues": {
+            "operator": "or",
+            "subConditions": [
+              {
+                "type": "eventPropertyCondition",
+                "parameterValues": {
+                  "propertyName": "target.itemId",
+                  "propertyValue": "parameter::targetId",
+                  "comparisonOperator": "equals"
+                }
+              },
+              {
+                "type": "eventPropertyCondition",
+                "parameterValues": {
+                  "propertyName": "target.properties.pageInfo.pagePath",
+                  "propertyValue": "parameter::targetPath",
+                  "comparisonOperator": "equals"
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  },
   "parameters": [
     {
       "id": "targetId",
@@ -25,4 +64,4 @@
       "multivalued": false
     }
   ]
-}
\ No newline at end of file
+}
diff --git 
a/plugins/hover-event/src/main/resources/META-INF/cxs/schemas/hover-event.json 
b/plugins/hover-event/src/main/resources/META-INF/cxs/schemas/hover-event.json
new file mode 100644
index 000000000..948c504d6
--- /dev/null
+++ 
b/plugins/hover-event/src/main/resources/META-INF/cxs/schemas/hover-event.json
@@ -0,0 +1,25 @@
+{
+  "$id": "https://unomi.apache.org/schemas/json/events/hover/1-0-0";,
+  "$schema": "https://json-schema.org/draft/2019-09/schema";,
+  "self": {
+    "vendor": "org.apache.unomi",
+    "target": "events",
+    "name": "hover",
+    "format": "jsonschema",
+    "version": "1-0-0"
+  },
+  "title": "HoverEvent",
+  "type": "object",
+  "allOf": [
+    { "$ref": "https://unomi.apache.org/schemas/json/event/1-0-0"; }
+  ],
+  "properties": {
+    "source": {
+      "$ref": "https://unomi.apache.org/schemas/json/items/page/1-0-0";
+    },
+    "target": {
+      "$ref": "https://unomi.apache.org/schemas/json/item/1-0-0";
+    }
+  },
+  "unevaluatedProperties": false
+}
diff --git 
a/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml 
b/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 3a3e50f0e..000000000
--- a/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
-
-    <service interface="ConditionESQueryBuilder">
-        <service-properties>
-            <entry key="queryBuilderId" 
value="hoverEventConditionESQueryBuilder" />
-        </service-properties>
-        <bean 
class="org.apache.unomi.plugins.events.hover.querybuilders.HoverEventConditionESQueryBuilder"/>
-    </service>
-
-</blueprint>
diff --git a/plugins/hover-event/src/main/resources/messages_en.properties 
b/plugins/hover-event/src/main/resources/messages_en.properties
deleted file mode 100644
index 6aac72d5f..000000000
--- a/plugins/hover-event/src/main/resources/messages_en.properties
+++ /dev/null
@@ -1,20 +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.
-#
-condition.hoverEventCondition.description=A content has been hovered
-condition.hoverEventCondition.forContent=Event hover for content with id
-condition.hoverEventCondition.name=Hover event
-condition.hoverEventCondition.withPath=or with path
diff --git a/plugins/hover-event/src/main/resources/messages_fr.properties 
b/plugins/hover-event/src/main/resources/messages_fr.properties
deleted file mode 100644
index 76ed07ee5..000000000
--- a/plugins/hover-event/src/main/resources/messages_fr.properties
+++ /dev/null
@@ -1,20 +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.
-#
-condition.hoverEventCondition.description=La souris est pass�e par dessus un 
contenu
-condition.hoverEventCondition.forContent=�v�nement de survol d'un contenu avec 
l'id
-condition.hoverEventCondition.name=�v�nement de survol
-condition.hoverEventCondition.withPath=ou avec le chemin
diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/services/internal/UnomiManagementServiceConfiguration.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/services/internal/UnomiManagementServiceConfiguration.java
index c7aa4154f..fc6152985 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/services/internal/UnomiManagementServiceConfiguration.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/services/internal/UnomiManagementServiceConfiguration.java
@@ -19,6 +19,13 @@ package org.apache.unomi.shell.services.internal;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 
+/**
+ * OSGi metatype configuration for the Unomi Management service.
+ * <p>
+ * Allows specifying a list of feature sets to start when the management
+ * service initializes. Each entry is a string that maps a logical key to
+ * one or more features.
+ */
 @ObjectClassDefinition(
         name = "Unomi Management Configuration",
         description = "Configuration for Unomi Management Service"
@@ -27,8 +34,19 @@ public @interface UnomiManagementServiceConfiguration {
 
     @AttributeDefinition(
             name = "Start Features",
-            description = "An array of strings representing start features in 
the format '[\"key=feature1,feature2\", \"key2:feature3\"]."
+            description = "An array of strings representing start features in 
the format '[\"key=feature1,feature2\", \"key2:feature3\"]'."
     )
+    /**
+     * Defines one or more feature sets to start.
+     * <p>
+     * Each element is a string using one of these forms:
+     * - key=featureA,featureB (comma-separated list assigned to a key)
+     * - key:featureC (single feature assigned to a key)
+     * <p>
+     * Example: ["ui=feature1,feature2", "backend:feature3"].
+     *
+     * @return an array of feature-set descriptors; empty by default
+     */
     String[] startFeatures() default "";
 
 }

Reply via email to