From d0e3d2246086746e73b2b68c9a6aaf8395ee93b7 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 4 Oct 2023 12:43:21 +0200 Subject: [PATCH] Improve ACR search --- .../argeo/api/acr/search/ContentFilter.java | 114 ++++++++---------- .../src/org/argeo/api/acr/search/Eq.java | 10 ++ .../src/org/argeo/api/acr/search/Gt.java | 10 ++ .../src/org/argeo/api/acr/search/Gte.java | 10 ++ .../argeo/api/acr/search/IsContentClass.java | 25 ++++ .../org/argeo/api/acr/search/IsDefined.java | 16 +++ .../src/org/argeo/api/acr/search/Like.java | 10 ++ .../src/org/argeo/api/acr/search/Lt.java | 10 ++ .../src/org/argeo/api/acr/search/Lte.java | 10 ++ .../src/org/argeo/api/acr/search/Not.java | 15 +++ .../acr/search/PropertyValueContraint.java | 23 ++++ .../org/argeo/init/logging/ThinLogging.java | 5 +- 12 files changed, 192 insertions(+), 66 deletions(-) create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Eq.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Gt.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Gte.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/IsContentClass.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/IsDefined.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Like.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Lt.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Lte.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/Not.java create mode 100644 org.argeo.api.acr/src/org/argeo/api/acr/search/PropertyValueContraint.java diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/ContentFilter.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/ContentFilter.java index df7d56269..66c7559e9 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/search/ContentFilter.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/ContentFilter.java @@ -79,6 +79,55 @@ public abstract class ContentFilter 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 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 index 000000000..73402a2f4 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Eq.java @@ -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 index 000000000..4ab454e74 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Gt.java @@ -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 index 000000000..4a51fc8fb --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Gte.java @@ -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 index 000000000..cd01f7b81 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/IsContentClass.java @@ -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 index 000000000..a9c8d09d1 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/IsDefined.java @@ -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 index 000000000..5af527891 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Like.java @@ -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 index 000000000..25b502eb1 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Lt.java @@ -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 index 000000000..330f29f91 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Lte.java @@ -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 index 000000000..41a97da67 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Not.java @@ -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 index 000000000..7fc07bc28 --- /dev/null +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/PropertyValueContraint.java @@ -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; + } + +} diff --git a/org.argeo.init/src/org/argeo/init/logging/ThinLogging.java b/org.argeo.init/src/org/argeo/init/logging/ThinLogging.java index 44be1aa1b..c2ce21528 100644 --- a/org.argeo.init/src/org/argeo/init/logging/ThinLogging.java +++ b/org.argeo.init/src/org/argeo/init/logging/ThinLogging.java @@ -225,10 +225,13 @@ class ThinLogging implements Consumer> { 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 logEntry = new LogEntryMap(sequence); -- 2.30.2