diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java
index 07b41a38bd8..527f72d1c0c 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java
@@ -582,7 +582,7 @@ private WebMarkupContainer createOrgContainer() {
protected ObjectQuery getChooseQuery() {
return QueryBuilder.queryFor(OrgType.class, getPageBase().getPrismContext())
.item(OrgType.F_TENANT).eq(false)
- .or().item(OrgType.F_TENANT).eq(null)
+ .or().item(OrgType.F_TENANT).isNull()
.build();
}
diff --git a/infra/prism/pom.xml b/infra/prism/pom.xml
index 4fcd220ad3e..5a234425281 100644
--- a/infra/prism/pom.xml
+++ b/infra/prism/pom.xml
@@ -60,7 +60,7 @@
org.apache.commons
commons-lang3
-
+
org.apache.santuario
xmlsec
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Itemable.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Itemable.java
index 3697920dc6a..e48e00474a3 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Itemable.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Itemable.java
@@ -24,18 +24,20 @@
*
* Currently provides common abstraction on top of Item and ItemDelta, as both can hold values and
* construct them in a similar way.
+ *
+ * Also used for ValueFilter, although semantics of e.g. getPath() is quite different in this case.
*
* @author Radovan Semancik
*
*/
public interface Itemable {
- public QName getElementName();
+ QName getElementName();
- public ItemDefinition getDefinition();
+ ItemDefinition getDefinition();
- public PrismContext getPrismContext();
+ PrismContext getPrismContext();
- public ItemPath getPath();
+ ItemPath getPath();
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java
index 9c22e04a9cb..0533aec6eff 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java
@@ -278,7 +278,7 @@ private static ObjectFilter parseComparisonFilter(QN
ItemPath rightSidePath = getPath(clauseXMap, ELEMENT_RIGHT_HAND_SIDE_PATH);
ItemDefinition itemDefinition = locateItemDefinition(valueXnode, itemPath, pcd, prismContext);
- if (itemDefinition != null){
+ if (itemDefinition != null) {
itemName = itemDefinition.getName();
}
@@ -299,9 +299,10 @@ private static ObjectFilter parseComparisonFilter(QN
PrismPropertyValue propertyValue = (PrismPropertyValue) item.getValue(0);
propertyValue.clearParent();
if (isGt || isGtEq) {
- return GreaterFilter.createGreater(itemPath, pcd, propertyValue, isGtEq);
+ return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition) itemDefinition, isGtEq, prismContext, propertyValue);
} else {
- return LessFilter.createLess(itemPath, pcd, propertyValue, isLtEq);
+ return LessFilter.createLess(itemPath, (PrismPropertyDefinition) itemDefinition, prismContext,
+ propertyValue, isLtEq);
}
}
} else if (rightSidePath != null) {
@@ -312,9 +313,11 @@ private static ObjectFilter parseComparisonFilter(QN
if (isEq) {
return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition) itemDefinition, matchingRule, rightSidePath, rightSideDefinition);
} else if (isGt || isGtEq) {
- return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition) itemDefinition, rightSidePath, rightSideDefinition, isGtEq);
+ return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition) itemDefinition, rightSidePath,
+ rightSideDefinition, isGtEq);
} else {
- return LessFilter.createLess(itemPath, (PrismPropertyDefinition) itemDefinition, rightSidePath, rightSideDefinition, isLtEq);
+ return LessFilter.createLess(itemPath, (PrismPropertyDefinition) itemDefinition, rightSidePath,
+ rightSideDefinition, isLtEq);
}
}
} else {
@@ -331,9 +334,11 @@ private static ObjectFilter parseComparisonFilter(QN
if (isEq) {
return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition) itemDefinition, matchingRule, expressionWrapper);
} else if (isGt || isGtEq) {
- return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition) itemDefinition, expressionWrapper, isGtEq);
+ return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition) itemDefinition,
+ expressionWrapper, isGtEq);
} else {
- return LessFilter.createLess(itemPath, (PrismPropertyDefinition) itemDefinition, expressionWrapper, isLtEq);
+ return LessFilter.createLess(itemPath, (PrismPropertyDefinition) itemDefinition, expressionWrapper,
+ isLtEq);
}
}
} else {
@@ -343,7 +348,7 @@ private static ObjectFilter parseComparisonFilter(QN
if (preliminaryParsingOnly) {
return null;
} else {
- return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition) itemDefinition, matchingRule, prismContext);
+ return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition) itemDefinition, matchingRule);
}
}
}
@@ -738,7 +743,7 @@ private static MapXNode serializeInOidFilter(InOidFilter filter, XNodeSerializer
return createFilter(CLAUSE_IN_OID, clauseMap);
}
- private static MapXNode serializeComparisonFilter(PropertyValueFilter filter, XNodeSerializer xnodeSerializer) throws SchemaException{
+ private static MapXNode serializeComparisonFilter(PropertyValueFilter filter, XNodeSerializer xnodeSerializer) throws SchemaException{
MapXNode map = new MapXNode();
QName clause;
if (filter instanceof EqualFilter) {
@@ -754,15 +759,15 @@ private static MapXNode serializeComparisonFilter(Propert
return map;
}
- private static MapXNode serializeValueFilter(PropertyValueFilter filter, XNodeSerializer xnodeSerializer) throws SchemaException {
+ private static MapXNode serializeValueFilter(ValueFilter filter, XNodeSerializer xnodeSerializer) throws SchemaException {
MapXNode map = new MapXNode();
serializeMatchingRule(filter, map);
serializePath(map, filter.getFullPath(), filter);
- List values = filter.getValues();
+ List values = filter.getValues();
if (values != null) {
ListXNode valuesNode = new ListXNode();
- for (T val : values) {
+ for (V val : values) {
if (val.getParent() == null) {
val.setParent(filter);
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AllFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AllFilter.java
index 0b83cfbf861..e7f1eeb0877 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AllFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AllFilter.java
@@ -40,6 +40,7 @@ public static AllFilter createAll() {
return new AllFilter();
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public AllFilter clone() {
return new AllFilter();
@@ -61,7 +62,6 @@ public String debugDump(int indent) {
DebugUtil.indentDebugDump(sb, indent);
sb.append("ALL");
return sb.toString();
-
}
@Override
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AndFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AndFilter.java
index 641327bda3a..7fd581d6432 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AndFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/AndFilter.java
@@ -16,20 +16,17 @@
package com.evolveum.midpoint.prism.query;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import com.evolveum.midpoint.prism.Containerable;
-import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.prism.PrismContainerValue;
-import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
+import javax.xml.namespace.QName;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
public class AndFilter extends NaryLogicalFilter {
public static final QName ELEMENT_NAME = new QName(PrismConstants.NS_QUERY, "and");
@@ -39,11 +36,8 @@ public AndFilter(List condition) {
}
public static AndFilter createAnd(ObjectFilter... conditions){
- List filters = new ArrayList();
- for (ObjectFilter condition : conditions){
- filters.add(condition);
- }
-
+ List filters = new ArrayList<>(conditions.length);
+ Collections.addAll(filters, conditions);
return new AndFilter(filters);
}
@@ -51,6 +45,7 @@ public static AndFilter createAnd(List conditions){
return new AndFilter(conditions);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public AndFilter clone() {
return new AndFilter(getClonedConditions());
@@ -75,9 +70,7 @@ public String debugDump(int indent) {
sb.append("\n");
sb.append(filter.debugDump(indent + 1));
}
-
return sb.toString();
-
}
@Override
@@ -87,7 +80,7 @@ public String toString() {
sb.append("(");
for (int i = 0; i < getConditions().size(); i++){
sb.append(getConditions().get(i));
- if (i != getConditions().size() -1){
+ if (i != getConditions().size() - 1) {
sb.append(",");
}
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
index 2ea3404d483..e242af652f8 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
@@ -16,24 +16,31 @@
package com.evolveum.midpoint.prism.query;
+import java.util.Collections;
import java.util.List;
+import java.util.Objects;
-import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
-import com.evolveum.midpoint.prism.PrismPropertyValue;
+import com.evolveum.midpoint.prism.*;
+import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.prism.path.ItemPath;
+import com.evolveum.midpoint.util.exception.SchemaException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
-public abstract class ComparativeFilter extends PropertyValueFilter> {
+import javax.xml.namespace.QName;
+
+public abstract class ComparativeFilter extends PropertyValueFilter {
private boolean equals;
-
- ComparativeFilter(ItemPath path, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals) {
- super(path, definition, value);
- this.equals = equals;
- }
- public ComparativeFilter(ItemPath path, PrismPropertyDefinition definition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- super(path, definition, null, rightSidePath, rightSideDefinition);
+ ComparativeFilter(@NotNull ItemPath path,
+ @Nullable PrismPropertyDefinition definition,
+ @Nullable PrismPropertyValue value,
+ @Nullable ExpressionWrapper expression, @Nullable ItemPath rightHandSidePath,
+ @Nullable ItemDefinition rightHandSideDefinition, boolean equals) {
+ super(path, definition, null,
+ value != null ? Collections.singletonList(value) : null,
+ expression, rightHandSidePath, rightHandSideDefinition);
this.equals = equals;
}
@@ -44,19 +51,17 @@ public boolean isEquals() {
public void setEquals(boolean equals) {
this.equals = equals;
}
-
- static PrismPropertyValue createPropertyValue(PrismPropertyDefinition itemDefinition, T realValue){
- List> values = realValueToPropertyList(itemDefinition, realValue);
- if (values == null || values.isEmpty()){
+
+ @Nullable
+ static PrismPropertyValue anyValueToPropertyValue(@NotNull PrismContext prismContext, Object value) {
+ List> values = anyValueToPropertyValueList(prismContext, value);
+ if (values.isEmpty()) {
return null;
+ } else if (values.size() > 1) {
+ throw new UnsupportedOperationException("Comparative filter with more than one value is not supported");
+ } else {
+ return values.iterator().next();
}
-
- if (values.size() > 1 ){
- throw new UnsupportedOperationException("Greater filter with more than one value is not supported");
- }
-
- return values.iterator().next();
-
}
@Override
@@ -67,17 +72,17 @@ public boolean equals(Object o, boolean exact) {
return false;
if (!super.equals(o, exact))
return false;
-
ComparativeFilter> that = (ComparativeFilter>) o;
-
return equals == that.equals;
+ }
+ @Override
+ public boolean match(PrismContainerValue value, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
+ throw new UnsupportedOperationException("Matching object and greater/less filter is not supported yet");
}
@Override
public int hashCode() {
- int result = super.hashCode();
- result = 31 * result + (equals ? 1 : 0);
- return result;
+ return Objects.hash(super.hashCode(), equals);
}
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/EqualFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/EqualFilter.java
index 2ac2e6cc565..35a748388b6 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/EqualFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/EqualFilter.java
@@ -16,109 +16,98 @@
package com.evolveum.midpoint.prism.query;
-import java.util.Collection;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismContainerValue;
+import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.match.MatchingRule;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
-
-import com.evolveum.midpoint.prism.Containerable;
-import com.evolveum.midpoint.prism.Item;
-import com.evolveum.midpoint.prism.Itemable;
-import com.evolveum.midpoint.prism.PrismConstants;
-import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismProperty;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
-import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.path.ItemPath;
-import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public class EqualFilter extends PropertyValueFilter> implements Itemable {
+import javax.xml.namespace.QName;
+import java.util.List;
+
+public class EqualFilter extends PropertyValueFilter implements Itemable {
private static final long serialVersionUID = 3284478412180258355L;
public static final QName ELEMENT_NAME = new QName(PrismConstants.NS_QUERY, "equal");
- private EqualFilter(@NotNull ItemPath fullPath, PrismPropertyDefinition definition, QName matchingRule,
- @NotNull ItemPath rightSidePath, ItemDefinition rightSideDefinition) {
- super(fullPath, definition, matchingRule, rightSidePath, rightSideDefinition);
- }
-
- private EqualFilter(@NotNull ItemPath fullPath, PrismPropertyDefinition definition, QName matchingRule,
- List> values, ExpressionWrapper expression) {
- super(fullPath, definition, matchingRule, values, expression);
- }
-
- //factory methods
- // Do not require definition. We may want queries for which the definition is supplied later.
-
- // right-side-related
- @NotNull
- public static EqualFilter createEqual(ItemPath propertyPath, PrismPropertyDefinition propertyDefinition, QName matchingRule, ItemPath rightSidePath, ItemDefinition rightSideDefinition) {
- return new EqualFilter<>(propertyPath, propertyDefinition, matchingRule, rightSidePath, rightSideDefinition);
- }
-
- // expression-related
+ /*
+ * The pattern for factory methods and constructors signatures is:
+ * - path and definition
+ * - matching rule (if applicable)
+ * - values (incl. prismContext if needed)
+ * - expressionWrapper
+ * - right hand things
+ * - filter-specific flags (equal, anchors)
+ *
+ * Ordering of methods:
+ * - constructor
+ * - factory methods: [null], value(s), expression, right-side
+ * - match
+ * - equals
+ *
+ * Parent for prism values is set in the appropriate constructor; so there's no need to do that at other places.
+ *
+ * Normalization of "Object"-typed values is done in anyArrayToXXX and anyValueToXXX methods. This includes cloning
+ * of values that have a parent (note that we recompute the PolyString values as part of conversion process; if that's
+ * a problem for the client, it has to do cloning itself).
+ *
+ * Please respect these conventions in order to make these classes understandable and maintainable.
+ */
+
+ public EqualFilter(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition,
+ @Nullable QName matchingRule,
+ @Nullable List> prismPropertyValues,
+ @Nullable ExpressionWrapper expression, @Nullable ItemPath rightHandSidePath,
+ @Nullable ItemDefinition rightHandSideDefinition) {
+ super(path, definition, matchingRule, prismPropertyValues, expression, rightHandSidePath, rightHandSideDefinition);
+ }
+
+ // factory methods
+
+ // empty (different from values as it generates filter with null 'values' attribute)
@NotNull
- public static EqualFilter createEqual(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition,
- @Nullable QName matchingRule, @Nullable ExpressionWrapper expression) {
- return new EqualFilter<>(path, definition, matchingRule, null, expression);
+ public static EqualFilter createEqual(@NotNull ItemPath path, @NotNull PrismPropertyDefinition definition,
+ @Nullable QName matchingRule) {
+ return new EqualFilter(path, definition, matchingRule, null, null, null, null);
}
// values
@NotNull
public static EqualFilter createEqual(@NotNull ItemPath path, @NotNull PrismPropertyDefinition definition,
@Nullable QName matchingRule, @NotNull PrismContext prismContext, Object... values) {
- return new EqualFilter(path, definition, matchingRule, (List) createPropertyListFromArray(prismContext, values), null);
+ List> propertyValues = anyArrayToPropertyValueList(prismContext, values);
+ return new EqualFilter(path, definition, matchingRule, propertyValues, null, null, null);
}
- @Override
- public EqualFilter clone() {
- EqualFilter clone = new EqualFilter<>(getFullPath(), getDefinition(), getMatchingRule(), getCloneValuesList(), getExpression());
- clone.copyRightSideThingsFrom(this);
- return clone;
- }
-
- @Override
- public String debugDump() {
- return debugDump(0);
+ // expression-related
+ @NotNull
+ public static EqualFilter createEqual(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition,
+ @Nullable QName matchingRule, @NotNull ExpressionWrapper expression) {
+ return new EqualFilter<>(path, definition, matchingRule, null, expression, null, null);
}
- @Override
- public String debugDump(int indent) {
- StringBuilder sb = new StringBuilder();
- DebugUtil.indentDebugDump(sb, indent);
- sb.append("EQUAL:");
- return debugDump(indent, sb);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("EQUAL: ");
- return toString(sb);
+ // right-side-related; right side can be supplied later (therefore it's nullable)
+ @NotNull
+ public static EqualFilter createEqual(@NotNull ItemPath propertyPath, PrismPropertyDefinition propertyDefinition,
+ QName matchingRule, @NotNull ItemPath rightSidePath, ItemDefinition rightSideDefinition) {
+ return new EqualFilter<>(propertyPath, propertyDefinition, matchingRule, null, null, rightSidePath, rightSideDefinition);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
- public PrismContext getPrismContext() {
- PrismPropertyDefinition def = getDefinition();
- if (def == null) {
- return null;
- }
- return def.getPrismContext();
+ public EqualFilter clone() {
+ return new EqualFilter<>(getFullPath(), getDefinition(), getMatchingRule(), getClonedValues(),
+ getExpression(), getRightHandSidePath(), getRightHandSideDefinition());
}
@Override
- public ItemPath getPath() {
- return getFullPath();
+ protected String getFilterName() {
+ return "EQUAL";
}
+ // TODO revise
@Override
public boolean match(PrismContainerValue cvalue, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
Item filterItem = getFilterItem();
@@ -172,19 +161,9 @@ private boolean isInFilterItem(PrismPropertyValue v, Item filterItem, MatchingRu
return false;
}
- @Override
- public PrismPropertyDefinition getDefinition(){
- return (PrismPropertyDefinition) super.getDefinition();
- }
-
- @Override
- public List> getValues() {
- return super.getValues();
- }
-
@Override
public boolean equals(Object obj, boolean exact) {
- return super.equals(obj, exact) && obj instanceof EqualFilter;
+ return obj instanceof EqualFilter && super.equals(obj, exact);
}
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ExistsFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ExistsFilter.java
index 3a2bdc9e891..a2723d22f68 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ExistsFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ExistsFilter.java
@@ -16,19 +16,13 @@
package com.evolveum.midpoint.prism.query;
-import com.evolveum.midpoint.prism.Containerable;
-import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismContainerDefinition;
-import com.evolveum.midpoint.prism.PrismContainerValue;
-import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
+import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.PrettyPrinter;
import com.evolveum.midpoint.util.exception.SchemaException;
-
-import javax.xml.namespace.QName;
+import org.jetbrains.annotations.NotNull;
/**
* TODO think about creating abstract ItemFilter (ItemRelatedFilter) for this filter and ValueFilter.
@@ -38,18 +32,19 @@
*/
public class ExistsFilter extends ObjectFilter {
- private ItemPath fullPath;
+ @NotNull private final ItemPath fullPath;
private ItemDefinition definition;
private ObjectFilter filter;
- public ExistsFilter(ItemPath fullPath, ItemDefinition definition, ObjectFilter filter) {
+ public ExistsFilter(@NotNull ItemPath fullPath, ItemDefinition definition, ObjectFilter filter) {
this.fullPath = fullPath;
this.definition = definition;
this.filter = filter;
checkConsistence(true);
}
- public ItemPath getFullPath() {
+ @NotNull
+ public ItemPath getFullPath() {
return fullPath;
}
@@ -77,7 +72,8 @@ public static ExistsFilter createExists(ItemPath itemP
return new ExistsFilter(itemPath, itemDefinition, filter);
}
- @Override
+ @SuppressWarnings("CloneDoesntCallSuperClone")
+ @Override
public ObjectFilter clone() {
ObjectFilter f = filter != null ? filter.clone() : null;
return new ExistsFilter(fullPath, definition, f);
@@ -94,7 +90,7 @@ public boolean match(PrismContainerValue value, MatchingRuleRegistry matchingRul
@Override
public void checkConsistence(boolean requireDefinitions) {
- if (fullPath == null || fullPath.isEmpty()) {
+ if (fullPath.isEmpty()) {
throw new IllegalArgumentException("Null or empty path in "+this);
}
if (requireDefinitions && definition == null) {
@@ -160,7 +156,7 @@ public boolean equals(Object o, boolean exact) {
ExistsFilter that = (ExistsFilter) o;
- if (fullPath != null ? !fullPath.equals(that.fullPath, exact) : that.fullPath != null)
+ if (!fullPath.equals(that.fullPath, exact))
return false;
if (exact) {
if (definition != null ? !definition.equals(that.definition) : that.definition != null)
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
index d989a58e5a5..c8085bf03ce 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
@@ -15,14 +15,9 @@
*/
package com.evolveum.midpoint.prism.query;
-import javax.xml.namespace.QName;
-
-import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
-import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
@@ -30,132 +25,62 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public class GreaterFilter extends ComparativeFilter {
-
- GreaterFilter(ItemPath itemPath, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals) {
- super(itemPath, definition, value, equals);
- }
-
- GreaterFilter(ItemPath itemPath, PrismPropertyDefinition definition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- super(itemPath, definition, rightSidePath, rightSideDefinition, equals);
- }
-
- public static GreaterFilter createGreater(ItemPath itemPath, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals){
- GreaterFilter greaterFilter = new GreaterFilter<>(itemPath, definition, value, equals);
- if (value != null) {
- value.setParent(greaterFilter);
- }
- return greaterFilter;
- }
-
- public static GreaterFilter createGreater(ItemPath itemPath, PrismContainerDefinition containerDef,
- PrismPropertyValue value, boolean equals) throws SchemaException {
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(itemPath, containerDef);
- GreaterFilter greaterFilter = createGreater(itemPath, def, value, equals);
- if (value != null) {
- value.setParent(greaterFilter);
- }
- return greaterFilter;
- }
- public static GreaterFilter createGreater(ItemPath itemPath, PrismPropertyDefinition itemDefinition, T realValue, boolean equals) {
- PrismPropertyValue value = createPropertyValue(itemDefinition, realValue);
-
- if (value == null){
- //TODO: create null
- }
-
- GreaterFilter greaterFilter = createGreater(itemPath, itemDefinition, value, equals);
- value.setParent(greaterFilter);
- return greaterFilter;
+ public GreaterFilter(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition,
+ @Nullable PrismPropertyValue prismPropertyValue,
+ @Nullable ExpressionWrapper expression, @Nullable ItemPath rightHandSidePath,
+ @Nullable ItemDefinition rightHandSideDefinition, boolean equals) {
+ super(path, definition, prismPropertyValue, expression, rightHandSidePath, rightHandSideDefinition, equals);
}
- public static GreaterFilter createGreater(ItemPath itemPath, PrismContainerDefinition containerDef,
- T realValue, boolean equals) throws SchemaException {
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(itemPath, containerDef);
- return createGreater(itemPath, def, realValue, equals);
- }
-
- public static GreaterFilter createGreater(QName propertyName, Class type, PrismContext prismContext, T realValue, boolean equals)
- throws SchemaException {
- return createGreater(new ItemPath(propertyName), type, prismContext, realValue, equals);
- }
-
- public static GreaterFilter createGreater(ItemPath path, Class type, PrismContext prismContext, T realValue, boolean equals)
- throws SchemaException {
-
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(path, type, prismContext);
-
- return createGreater(path, def, realValue, equals);
- }
+ // factory methods
- public static GreaterFilter createGreater(ItemPath propertyPath, PrismPropertyDefinition propertyDefinition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- return new GreaterFilter(propertyPath, propertyDefinition, rightSidePath, rightSideDefinition, equals);
- }
-
- @Override
- public GreaterFilter clone() {
- PrismPropertyValue clonedValue = null;
- PrismPropertyValue value = getSingleValue();
- if (value != null) {
- clonedValue = value.clone();
- }
- GreaterFilter clone = new GreaterFilter<>(getFullPath(), getDefinition(), clonedValue, isEquals());
- if (clonedValue != null) {
- clonedValue.setParent(clone);
- }
- clone.copyRightSideThingsFrom(this);
- return clone;
+ // empty (can be filled-in later)
+ @NotNull
+ public static GreaterFilter createGreater(@NotNull ItemPath itemPath, PrismPropertyDefinition definition, boolean equals) {
+ return new GreaterFilter(itemPath, definition, null, null, null, null, equals);
}
- @Override
- public String debugDump() {
- return debugDump(0);
+ // value
+ @NotNull
+ public static GreaterFilter createGreater(@NotNull ItemPath itemPath, PrismPropertyDefinition definition,
+ boolean equals, @NotNull PrismContext prismContext, Object anyValue) {
+ PrismPropertyValue propertyValue = anyValueToPropertyValue(prismContext, anyValue);
+ return new GreaterFilter(itemPath, definition, propertyValue, null, null, null, equals);
}
- @Override
- public String debugDump(int indent) {
- StringBuilder sb = new StringBuilder();
- DebugUtil.indentDebugDump(sb, indent);
- sb.append("GREATER:");
- return debugDump(indent, sb);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("GREATER: ");
- return toString(sb);
+ // expression-related
+ @NotNull
+ public static GreaterFilter createGreater(@NotNull ItemPath itemPath, PrismPropertyDefinition definition,
+ @NotNull ExpressionWrapper wrapper, boolean equals) {
+ return new GreaterFilter<>(itemPath, definition, null, wrapper, null, null, equals);
}
- @Override
- public boolean match(PrismContainerValue value, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
- throw new UnsupportedOperationException("Matching object and greater filter not supported yet");
- }
-
- @Override
- public PrismPropertyDefinition getDefinition() {
- return (PrismPropertyDefinition) super.getDefinition();
+ // right-side-related
+ @NotNull
+ public static GreaterFilter createGreater(@NotNull ItemPath propertyPath, PrismPropertyDefinition definition,
+ @NotNull ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
+ return new GreaterFilter<>(propertyPath, definition, null, null, rightSidePath, rightSideDefinition, equals);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
- public PrismContext getPrismContext() {
- return getDefinition().getPrismContext();
+ public GreaterFilter clone() {
+ return new GreaterFilter(getFullPath(), getDefinition(), getClonedValue(), getExpression(),
+ getRightHandSidePath(), getRightHandSideDefinition(), isEquals());
}
@Override
- public ItemPath getPath() {
- return getFullPath();
- }
-
- public static GreaterFilter createGreaterThanItem(ItemPath itemPath, PrismPropertyDefinition propertyDefinition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- return new GreaterFilter<>(itemPath, propertyDefinition, rightSidePath, rightSideDefinition, equals);
+ protected String getFilterName() {
+ return "GREATER";
}
@Override
public boolean equals(Object obj, boolean exact) {
- return super.equals(obj, exact) && obj instanceof GreaterFilter;
+ return obj instanceof GreaterFilter && super.equals(obj, exact);
}
-
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/InFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/InFilter.java
deleted file mode 100644
index 35ad6ad2c7f..00000000000
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/InFilter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2010-2014 Evolveum
- *
- * Licensed 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 com.evolveum.midpoint.prism.query;
-
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
-import com.evolveum.midpoint.prism.PrismPropertyValue;
-import com.evolveum.midpoint.prism.path.ItemPath;
-import com.evolveum.midpoint.util.DebugUtil;
-
-@Deprecated // deprecated because of confusing name/semantics; see https://wiki.evolveum.com/display/midPoint/Query+API+Evolution
-public class InFilter extends PropertyValueFilter {
-
- InFilter(ItemPath path, PrismPropertyDefinition definition, QName matchingRule, List values ) {
- super(path, definition, matchingRule, values);
- }
-
- public static InFilter createIn(ItemPath path, PrismPropertyDefinition definition, QName matchingRule, V values){
-
- List> pVals = realValueToPropertyList(definition, values);
-
- return new InFilter(path, definition, matchingRule, pVals);
- }
-
-
- public static InFilter createIn(ItemPath path, PrismPropertyDefinition definition, QName matchingRule, PrismPropertyValue... values) {
-
- List> pVals = createPropertyList(definition, values);
-
- return new InFilter(path, definition, matchingRule, pVals);
- }
-
- public static InFilter createIn(ItemPath path, PrismPropertyDefinition definition, PrismPropertyValue... values) {
- return createIn(path, definition, null, values);
- }
-
- public static InFilter createIn(ItemPath path, Class type, PrismContext prismContext, QName matchingRule, V values) {
-
- PrismPropertyDefinition definition = (PrismPropertyDefinition) FilterUtils.findItemDefinition(path, type, prismContext);
- return createIn(path, definition, null, values);
- }
-
-
-
- @Override
- public PrismContext getPrismContext() {
- return getDefinition().getPrismContext();
- }
-
- @Override
- public ItemPath getPath() {
- return getFullPath();
- }
-
- @Override
- public String debugDump() {
- return debugDump(0);
- }
-
- @Override
- public String debugDump(int indent) {
- StringBuilder sb = new StringBuilder();
- DebugUtil.indentDebugDump(sb, indent);
- sb.append("IN: ");
- return debugDump(indent, sb);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("IN: ");
- return toString(sb);
- }
-
- @Override
- public InFilter clone() {
- return new InFilter(getFullPath(), getDefinition(),getMatchingRule(), getValues());
- }
-
- @Override
- public PrismPropertyDefinition getDefinition() {
- return (PrismPropertyDefinition) super.getDefinition();
- }
-
- @Override
- public boolean equals(Object obj, boolean exact) {
- return super.equals(obj, exact) && obj instanceof InFilter;
- }
-
-}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
index c58dd73a215..546a55f86ae 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
@@ -16,153 +16,66 @@
package com.evolveum.midpoint.prism.query;
-import javax.xml.namespace.QName;
-
-import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.Objectable;
-import com.evolveum.midpoint.prism.PrismContainerDefinition;
-import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
-import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.prism.path.ItemPath;
-import com.evolveum.midpoint.util.DebugUtil;
-import com.evolveum.midpoint.util.exception.SchemaException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public class LessFilter extends ComparativeFilter {
- LessFilter(ItemPath itemPath, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals) {
- super(itemPath, definition, value, equals);
- }
-
- LessFilter(ItemPath itemPath, PrismPropertyDefinition definition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- super(itemPath, definition, rightSidePath, rightSideDefinition, equals);
- }
-
- public static LessFilter createLess(QName itemPath, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals){
- LessFilter lessFilter = new LessFilter<>(new ItemPath(itemPath), definition, value, equals);
- if (value != null) {
- value.setParent(lessFilter);
- }
- return lessFilter;
- }
-
- public static LessFilter createLess(ItemPath itemPath, PrismPropertyDefinition definition, PrismPropertyValue value, boolean equals){
- LessFilter lessFilter = new LessFilter<>(itemPath, definition, value, equals);
- if (value != null) {
- value.setParent(lessFilter);
- }
- return lessFilter;
- }
-
- public static LessFilter createLess(ItemPath itemPath, PrismContainerDefinition containerDef,
- PrismPropertyValue value, boolean equals) throws SchemaException {
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(itemPath, containerDef);
- return createLess(itemPath, def, value, equals);
+ public LessFilter(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition,
+ @Nullable PrismPropertyValue value, @Nullable ExpressionWrapper expression,
+ @Nullable ItemPath rightHandSidePath, @Nullable ItemDefinition rightHandSideDefinition, boolean equals) {
+ super(path, definition, value, expression, rightHandSidePath, rightHandSideDefinition, equals);
}
- public static LessFilter createLess(QName itemPath, PrismPropertyDefinition itemDefinition, T realValue, boolean equals) {
- return createLess(new ItemPath(itemPath), itemDefinition, realValue, equals);
- }
-
- public static LessFilter createLess(ItemPath itemPath, PrismPropertyDefinition itemDefinition, T realValue, boolean equals) {
- PrismPropertyValue value = createPropertyValue(itemDefinition, realValue);
-
- if (value == null){
- // create null filter
- }
-
- return createLess(itemPath, itemDefinition, value, equals);
- }
+ // factory methods
- public static LessFilter createLessThanItem(ItemPath itemPath, PrismPropertyDefinition propertyDefinition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- return new LessFilter<>(itemPath, propertyDefinition, rightSidePath, rightSideDefinition, equals);
+ // empty (can be filled-in later)
+ @NotNull
+ public static LessFilter createLess(@NotNull ItemPath itemPath, PrismPropertyDefinition definition, boolean equals) {
+ return new LessFilter(itemPath, definition, null, null, null, null, equals);
}
- public static LessFilter createLess(ItemPath itemPath, PrismContainerDefinition containerDef,
- T realValue, boolean equals) throws SchemaException {
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(itemPath, containerDef);
- return createLess(itemPath, def, realValue, equals);
+ // value
+ @NotNull
+ public static LessFilter createLess(@NotNull ItemPath itemPath, PrismPropertyDefinition definition,
+ @NotNull PrismContext prismContext, Object anyValue, boolean equals) {
+ PrismPropertyValue propertyValue = anyValueToPropertyValue(prismContext, anyValue);
+ return new LessFilter(itemPath, definition, propertyValue, null, null, null, equals);
}
- public static LessFilter createLess(QName propertyName, Class type, PrismContext prismContext, T realValue, boolean equals)
- throws SchemaException {
- return createLess(new ItemPath(propertyName), type, prismContext, realValue, equals);
- }
-
- public static LessFilter createLess(ItemPath path, Class type, PrismContext prismContext, T realValue, boolean equals)
- throws SchemaException {
-
- PrismPropertyDefinition def = (PrismPropertyDefinition) FilterUtils.findItemDefinition(path, type, prismContext);
-
- return createLess(path, def, realValue, equals);
+ // expression-related
+ @NotNull
+ public static LessFilter createLess(@NotNull ItemPath itemPath, PrismPropertyDefinition itemDefinition,
+ @NotNull ExpressionWrapper wrapper, boolean equals) {
+ return new LessFilter<>(itemPath, itemDefinition, null, wrapper, null, null, equals);
}
- public static LessFilter createLess(ItemPath propertyPath, PrismPropertyDefinition propertyDefinition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
- return new LessFilter<>(propertyPath, propertyDefinition, rightSidePath, rightSideDefinition, equals);
+ // right-side-related
+ @NotNull
+ public static LessFilter createLess(@NotNull ItemPath propertyPath, PrismPropertyDefinition definition,
+ @NotNull ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
+ return new LessFilter<>(propertyPath, definition, null, null, rightSidePath, rightSideDefinition, equals);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public LessFilter clone() {
- PrismPropertyValue clonedValue = null;
- PrismPropertyValue value = getSingleValue();
- if (value != null) {
- clonedValue = value.clone();
- }
- LessFilter clone = new LessFilter<>(getFullPath(), getDefinition(), clonedValue, isEquals());
- if (clonedValue != null) {
- clonedValue.setParent(clone);
- }
- clone.copyRightSideThingsFrom(this);
- return clone;
- }
-
- @Override
- public String debugDump() {
- return debugDump(0);
- }
-
- @Override
- public String debugDump(int indent) {
- StringBuilder sb = new StringBuilder();
- DebugUtil.indentDebugDump(sb, indent);
- sb.append("LESS:");
- return debugDump(indent, sb);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("LESS: ");
- return toString(sb);
- }
-
- @Override
- public boolean match(PrismContainerValue value, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
- throw new UnsupportedOperationException("Matching object and less filter not supported yet");
- }
-
- @Override
- public PrismPropertyDefinition getDefinition() {
- return (PrismPropertyDefinition) super.getDefinition();
+ return new LessFilter(getFullPath(), getDefinition(), getClonedValue(), getExpression(),
+ getRightHandSidePath(), getRightHandSideDefinition(), isEquals());
}
@Override
- public PrismContext getPrismContext() {
- return getDefinition().getPrismContext();
- }
-
- @Override
- public ItemPath getPath() {
- return getFullPath();
+ protected String getFilterName() {
+ return "LESS";
}
@Override
public boolean equals(Object obj, boolean exact) {
- return super.equals(obj, exact) && obj instanceof LessFilter;
+ return obj instanceof LessFilter && super.equals(obj, exact);
}
-
-
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/NotFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/NotFilter.java
index 77321630c4f..e8c4f79bf70 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/NotFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/NotFilter.java
@@ -32,10 +32,7 @@
public class NotFilter extends UnaryLogicalFilter {
-// private ObjectFilter filter;
-
public NotFilter() {
-
}
public NotFilter(ObjectFilter filter) {
@@ -46,6 +43,7 @@ public static NotFilter createNot(ObjectFilter filter) {
return new NotFilter(filter);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public NotFilter clone() {
return new NotFilter(getFilter().clone());
@@ -70,9 +68,7 @@ public String debugDump(int indent) {
sb.append("\n");
sb.append(getFilter().debugDump(indent + 1));
}
-
return sb.toString();
-
}
@Override
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectFilter.java
index 6b555a4c673..a35c675aef1 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectFilter.java
@@ -27,11 +27,10 @@
import com.evolveum.midpoint.util.exception.SchemaException;
public abstract class ObjectFilter implements DebugDumpable, Serializable, Revivable {
-
- ObjectFilter() {
- // Nothing to do
- }
-
+
+ /**
+ * Does a SHALLOW clone.
+ */
public abstract ObjectFilter clone();
public abstract boolean match(PrismContainerValue value, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException;
@@ -41,7 +40,7 @@ public void accept(Visitor visitor) {
}
@Override
- public void revive(final PrismContext prismContext) throws SchemaException {
+ public void revive(PrismContext prismContext) throws SchemaException {
QueryConvertor.revive(this, prismContext);
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectQuery.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectQuery.java
index f5cde569b33..19570e63bd0 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectQuery.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ObjectQuery.java
@@ -209,6 +209,7 @@ public Integer getMaxSize() {
return paging.getMaxSize();
}
+ @SuppressWarnings("EqualsWhichDoesntCheckParameterClass")
public boolean equals(Object o) {
return equals(o, true);
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrFilter.java
index 137a40cda76..a2f97bf1eec 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrFilter.java
@@ -17,6 +17,7 @@
package com.evolveum.midpoint.prism.query;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import com.evolveum.midpoint.prism.Containerable;
@@ -33,13 +34,9 @@ public OrFilter(List condition) {
super(condition);
}
-
public static OrFilter createOr(ObjectFilter... conditions){
List filters = new ArrayList();
- for (ObjectFilter condition : conditions){
- filters.add(condition);
- }
-
+ Collections.addAll(filters, conditions);
return new OrFilter(filters);
}
@@ -47,6 +44,7 @@ public static OrFilter createOr(List conditions){
return new OrFilter(conditions);
}
+ @SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public OrFilter clone() {
return new OrFilter(getClonedConditions());
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrgFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrgFilter.java
index 30b87629cba..f8e657681c1 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrgFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/OrgFilter.java
@@ -50,10 +50,6 @@ public static OrgFilter createOrg(String baseOrgOid, Scope scope) {
return new OrgFilter(new PrismReferenceValue(baseOrgOid), scope);
}
- public static OrgFilter createOrg(String baseOrgRef) {
- return new OrgFilter(new PrismReferenceValue(baseOrgRef), Scope.SUBTREE);
- }
-
public static OrgFilter createRootOrg() {
OrgFilter filter = new OrgFilter();
filter.setRoot(true);
@@ -64,18 +60,10 @@ public PrismReferenceValue getOrgRef() {
return baseOrgRef;
}
- public void setOrgRef(PrismReferenceValue baseOrgRef) {
- this.baseOrgRef = baseOrgRef;
- }
-
public Scope getScope() {
return scope;
}
- public void setScope(Scope scope) {
- this.scope = scope;
- }
-
private void setRoot(boolean root) {
this.root = root;
}
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/PropertyValueFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/PropertyValueFilter.java
index 615aff6b81b..5b43e02dc10 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/PropertyValueFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/PropertyValueFilter.java
@@ -32,87 +32,51 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public abstract class PropertyValueFilter extends ValueFilter implements Itemable {
-
- private ExpressionWrapper expression;
- private List values;
- private ItemPath rightHandSidePath; // alternative to "values"
- private ItemDefinition rightHandSideDefinition; // optional (needed only if path points to extension item)
-
- /*
- * TODO clean up the right side path/definition mess
- */
-
- PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable QName matchingRule,
- @NotNull ItemPath rightHandSidePath, @Nullable ItemDefinition rightHandSideDefinition) {
- super(path, definition, matchingRule);
- this.rightHandSidePath = rightHandSidePath;
- this.rightHandSideDefinition = rightHandSideDefinition;
- }
-
- protected PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable QName matchingRule,
- @Nullable List values, @Nullable ExpressionWrapper expression) {
- super(path, definition, matchingRule);
- if (values != null) {
- for (V value : values) {
- value.setParent(this);
- }
- }
- this.values = values;
- this.expression = expression;
- }
-
- PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable QName matchingRule, @Nullable List values) {
- this(path, definition, matchingRule, values, null);
- }
-
- PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable V value) {
- this(path, definition, (QName) null, value != null ? Collections.singletonList(value) : null);
- }
-
- PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable QName matchingRule) {
- this(path, definition, matchingRule, (List) null);
- }
-
- PropertyValueFilter(@NotNull ItemPath path, @Nullable ItemDefinition definition, @Nullable ExpressionWrapper expression, @Nullable List values) {
- this(path, definition, null, values, expression);
- }
-
- static protected List> createPropertyList(@NotNull PrismPropertyDefinition itemDefinition, @Nullable PrismPropertyValue pValue) {
- List> pValues = new ArrayList<>();
- if (pValue == null) {
- return pValues;
- } else {
- PrismUtil.recomputePrismPropertyValue(pValue, itemDefinition.getPrismContext());
- pValues.add(pValue);
- return pValues;
- }
- }
-
- static List> createPropertyList(PrismPropertyDefinition itemDefinition, PrismPropertyValue[] values) {
- Validate.notNull(itemDefinition, "Item definition in substring filter must not be null.");
-
- List> pValues = new ArrayList>();
-
- for (PrismPropertyValue val : values){
- PrismUtil.recomputePrismPropertyValue(val, itemDefinition.getPrismContext());
- pValues.add(val);
- }
-
- return pValues;
- }
+public abstract class PropertyValueFilter extends ValueFilter, PrismPropertyDefinition> implements Itemable {
+
+ PropertyValueFilter(@NotNull ItemPath path, @Nullable PrismPropertyDefinition definition, @Nullable QName matchingRule,
+ @Nullable List> values, @Nullable ExpressionWrapper expression,
+ @Nullable ItemPath rightHandSidePath, @Nullable ItemDefinition rightHandSideDefinition) {
+ super(path, definition, matchingRule, values, expression, rightHandSidePath, rightHandSideDefinition);
+ }
+
+// static protected List> createPropertyList(@NotNull PrismPropertyDefinition itemDefinition, @Nullable PrismPropertyValue pValue) {
+// List> pValues = new ArrayList<>();
+// if (pValue == null) {
+// return pValues;
+// } else {
+// PrismUtil.recomputePrismPropertyValue(pValue, itemDefinition.getPrismContext());
+// pValues.add(pValue);
+// return pValues;
+// }
+// }
+//
+// static List> createPropertyList(PrismPropertyDefinition itemDefinition, PrismPropertyValue[] values) {
+// Validate.notNull(itemDefinition, "Item definition in substring filter must not be null.");
+//
+// List> pValues = new ArrayList>();
+//
+// for (PrismPropertyValue val : values){
+// PrismUtil.recomputePrismPropertyValue(val, itemDefinition.getPrismContext());
+// pValues.add(val);
+// }
+//
+// return pValues;
+// }
- static List> createPropertyListFromArray(PrismContext prismContext, Object[] values) {
- List> pVals = new ArrayList<>();
+ @NotNull
+ static List> anyArrayToPropertyValueList(PrismContext prismContext, Object[] values) {
+ List> pVals = new ArrayList<>();
if (values != null) {
for (Object value : values) {
- addToPrismValues(pVals, prismContext, value);
+ addToPrismValues((List) pVals, prismContext, value);
}
}
return pVals;
}
- static List> createPropertyListFromValue(PrismContext prismContext, Object value) {
+ @NotNull
+ static List> anyValueToPropertyValueList(PrismContext prismContext, Object value) {
List> pVals = new ArrayList<>();
if (value != null) {
addToPrismValues((List) pVals, prismContext, value);
@@ -120,14 +84,6 @@ static List> createPropertyListFromValue(PrismContext
return pVals;
}
-// static List> createPropertyListFromCollection(PrismContext prismContext, Collection realValues) {
-// List