Improve ACR search
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 4 Oct 2023 10:43:21 +0000 (12:43 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 4 Oct 2023 10:43:21 +0000 (12:43 +0200)
12 files changed:
org.argeo.api.acr/src/org/argeo/api/acr/search/ContentFilter.java
org.argeo.api.acr/src/org/argeo/api/acr/search/Eq.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Gt.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Gte.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/IsContentClass.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/IsDefined.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Like.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Lt.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Lte.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/Not.java [new file with mode: 0644]
org.argeo.api.acr/src/org/argeo/api/acr/search/PropertyValueContraint.java [new file with mode: 0644]
org.argeo.init/src/org/argeo/init/logging/ThinLogging.java

index df7d562698bcec40d86f6766bd8d57dae87dcde7..66c7559e968c92d2703b9463a1379ab2c2901ac7 100644 (file)
@@ -79,6 +79,55 @@ public abstract class ContentFilter<COMPOSITION extends Composition> implements
                return eq(attr.qName(), value);
        }
 
+       public COMPOSITION lt(QName attr, Object value) {
+               addConstraint(new Lt(attr, value));
+               return composition;
+       }
+
+       public COMPOSITION lt(QNamed attr, Object value) {
+               return lt(attr.qName(), value);
+       }
+
+       public COMPOSITION lte(QName attr, Object value) {
+               addConstraint(new Lte(attr, value));
+               return composition;
+       }
+
+       public COMPOSITION lte(QNamed attr, Object value) {
+               return lte(attr.qName(), value);
+       }
+
+       public COMPOSITION gt(QName attr, Object value) {
+               addConstraint(new Gt(attr, value));
+               return composition;
+       }
+
+       public COMPOSITION gt(QNamed attr, Object value) {
+               return gt(attr.qName(), value);
+       }
+
+       public COMPOSITION gte(QName attr, Object value) {
+               addConstraint(new Gte(attr, value));
+               return composition;
+       }
+
+       public COMPOSITION gte(QNamed attr, Object value) {
+               return gte(attr.qName(), value);
+       }
+
+       public COMPOSITION like(QName attr, String pattern) {
+               addConstraint(new Like(attr, pattern));
+               return composition;
+       }
+
+       public COMPOSITION like(QNamed attr, String pattern) {
+               return like(attr.qName(), pattern);
+       }
+
+       /*
+        * PROPERTIES CONSTRAINTS
+        */
+
        public COMPOSITION isDefined(QName attr) {
                addConstraint(new IsDefined(attr));
                return composition;
@@ -125,71 +174,6 @@ public abstract class ContentFilter<COMPOSITION extends Composition> implements
         * CLASSES
         */
 
-       public static class Not implements Constraint {
-               final Constraint negated;
-
-               public Not(Constraint negated) {
-                       this.negated = negated;
-               }
-
-               public Constraint getNegated() {
-                       return negated;
-               }
-
-       }
-
-       public static class Eq implements Constraint {
-               final QName prop;
-               final Object value;
-
-               public Eq(QName prop, Object value) {
-                       super();
-                       this.prop = prop;
-                       this.value = value;
-               }
-
-               public QName getProp() {
-                       return prop;
-               }
-
-               public Object getValue() {
-                       return value;
-               }
-
-       }
-
-       public static class IsDefined implements Constraint {
-               final QName prop;
-
-               public IsDefined(QName prop) {
-                       super();
-                       this.prop = prop;
-               }
-
-               public QName getProp() {
-                       return prop;
-               }
-       }
-
-       public static class IsContentClass implements Constraint {
-               final QName[] contentClasses;
-
-               public IsContentClass(QName[] contentClasses) {
-                       this.contentClasses = contentClasses;
-               }
-
-               public IsContentClass(QNamed[] contentClasses) {
-                       this.contentClasses = new QName[contentClasses.length];
-                       for (int i = 0; i < contentClasses.length; i++)
-                               this.contentClasses[i] = contentClasses[i].qName();
-               }
-
-               public QName[] getContentClasses() {
-                       return contentClasses;
-               }
-
-       }
-
 //     public static void main(String[] args) {
 //             AndFilter filter = new AndFilter();
 //             filter.eq(new QName("test"), "test").and().not().eq(new QName("type"), "integer");
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Eq.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Eq.java
new file mode 100644 (file)
index 0000000..73402a2
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property equals this value. */
+public class Eq extends PropertyValueContraint {
+       public Eq(QName prop, Object value) {
+               super(prop, value);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Gt.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Gt.java
new file mode 100644 (file)
index 0000000..4ab454e
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property is strictly greater than this value. */
+public class Gt extends PropertyValueContraint {
+       public Gt(QName prop, Object value) {
+               super(prop, value);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Gte.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Gte.java
new file mode 100644 (file)
index 0000000..4a51fc8
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property is greater than this value or equal. */
+public class Gte extends PropertyValueContraint {
+       public Gte(QName prop, Object value) {
+               super(prop, value);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/IsContentClass.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/IsContentClass.java
new file mode 100644 (file)
index 0000000..cd01f7b
--- /dev/null
@@ -0,0 +1,25 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+import org.argeo.api.acr.QNamed;
+
+/** Whether the content is all these content classes. */
+public class IsContentClass implements Constraint {
+       final QName[] contentClasses;
+
+       public IsContentClass(QName[] contentClasses) {
+               this.contentClasses = contentClasses;
+       }
+
+       public IsContentClass(QNamed[] contentClasses) {
+               this.contentClasses = new QName[contentClasses.length];
+               for (int i = 0; i < contentClasses.length; i++)
+                       this.contentClasses[i] = contentClasses[i].qName();
+       }
+
+       public QName[] getContentClasses() {
+               return contentClasses;
+       }
+
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/IsDefined.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/IsDefined.java
new file mode 100644 (file)
index 0000000..a9c8d09
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property is defined. */
+public class IsDefined implements Constraint {
+       final QName prop;
+
+       public IsDefined(QName prop) {
+               this.prop = prop;
+       }
+
+       public QName getProp() {
+               return prop;
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Like.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Like.java
new file mode 100644 (file)
index 0000000..5af5278
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property equals this value. */
+public class Like extends PropertyValueContraint {
+       public Like(QName prop, String pattern) {
+               super(prop, pattern);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Lt.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Lt.java
new file mode 100644 (file)
index 0000000..25b502e
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property is strictly less than this value. */
+public class Lt extends PropertyValueContraint {
+       public Lt(QName prop, Object value) {
+               super(prop, value);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Lte.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Lte.java
new file mode 100644 (file)
index 0000000..330f29f
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property is less than this value or equal. */
+public class Lte extends PropertyValueContraint {
+       public Lte(QName prop, Object value) {
+               super(prop, value);
+       }
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Not.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Not.java
new file mode 100644 (file)
index 0000000..41a97da
--- /dev/null
@@ -0,0 +1,15 @@
+package org.argeo.api.acr.search;
+
+/** Negates the provided constraint. */
+public class Not implements Constraint {
+       final Constraint negated;
+
+       public Not(Constraint negated) {
+               this.negated = negated;
+       }
+
+       public Constraint getNegated() {
+               return negated;
+       }
+
+}
diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/PropertyValueContraint.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/PropertyValueContraint.java
new file mode 100644 (file)
index 0000000..7fc07bc
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.api.acr.search;
+
+import javax.xml.namespace.QName;
+
+/** Whether this property equals this value. */
+public abstract class PropertyValueContraint implements Constraint {
+       final QName prop;
+       final Object value;
+
+       public PropertyValueContraint(QName prop, Object value) {
+               this.prop = prop;
+               this.value = value;
+       }
+
+       public QName getProp() {
+               return prop;
+       }
+
+       public Object getValue() {
+               return value;
+       }
+
+}
index 44be1aa1b8d833d29b21b93f4e720bb15254e894..c2ce215288171bf94543a5fd0a949013b25b6bf2 100644 (file)
@@ -225,10 +225,13 @@ class ThinLogging implements Consumer<Map<String, Object>> {
                        Thread thread, Throwable thrown, StackTraceElement callLocation) {
                assert level != null;
                assert logger != null;
-               assert msg != null;
+//             assert msg != null;
                assert instant != null;
                assert thread != null;
 
+               if (msg == null)
+                       msg = "null";
+
                final long sequence = nextEntry.incrementAndGet();
 
                Map<String, Serializable> logEntry = new LogEntryMap(sequence);