Skip to content

Commit

Permalink
Continuing filters cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Oct 12, 2016
1 parent c31a693 commit 24d0516
Show file tree
Hide file tree
Showing 40 changed files with 861 additions and 1,529 deletions.
Expand Up @@ -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();
}

Expand Down
2 changes: 1 addition & 1 deletion infra/prism/pom.xml
Expand Up @@ -60,7 +60,7 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
</dependency>
Expand Down
Expand Up @@ -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();

}
Expand Up @@ -278,7 +278,7 @@ private static <T,C extends Containerable> 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();
}

Expand All @@ -299,9 +299,10 @@ private static <T,C extends Containerable> ObjectFilter parseComparisonFilter(QN
PrismPropertyValue<T> propertyValue = (PrismPropertyValue<T>) item.getValue(0);
propertyValue.clearParent();
if (isGt || isGtEq) {
return GreaterFilter.createGreater(itemPath, pcd, propertyValue, isGtEq);
return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition<T>) itemDefinition, isGtEq, prismContext, propertyValue);
} else {
return LessFilter.createLess(itemPath, pcd, propertyValue, isLtEq);
return LessFilter.createLess(itemPath, (PrismPropertyDefinition<T>) itemDefinition, prismContext,
propertyValue, isLtEq);
}
}
} else if (rightSidePath != null) {
Expand All @@ -312,9 +313,11 @@ private static <T,C extends Containerable> 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 {
Expand All @@ -331,9 +334,11 @@ private static <T,C extends Containerable> ObjectFilter parseComparisonFilter(QN
if (isEq) {
return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition<T>) itemDefinition, matchingRule, expressionWrapper);
} else if (isGt || isGtEq) {
return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition<T>) itemDefinition, expressionWrapper, isGtEq);
return GreaterFilter.createGreater(itemPath, (PrismPropertyDefinition<T>) itemDefinition,
expressionWrapper, isGtEq);
} else {
return LessFilter.createLess(itemPath, (PrismPropertyDefinition<T>) itemDefinition, expressionWrapper, isLtEq);
return LessFilter.createLess(itemPath, (PrismPropertyDefinition<T>) itemDefinition, expressionWrapper,
isLtEq);
}
}
} else {
Expand All @@ -343,7 +348,7 @@ private static <T,C extends Containerable> ObjectFilter parseComparisonFilter(QN
if (preliminaryParsingOnly) {
return null;
} else {
return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition<T>) itemDefinition, matchingRule, prismContext);
return EqualFilter.createEqual(itemPath, (PrismPropertyDefinition<T>) itemDefinition, matchingRule);
}
}
}
Expand Down Expand Up @@ -738,7 +743,7 @@ private static MapXNode serializeInOidFilter(InOidFilter filter, XNodeSerializer
return createFilter(CLAUSE_IN_OID, clauseMap);
}

private static <T extends PrismValue> MapXNode serializeComparisonFilter(PropertyValueFilter<T> filter, XNodeSerializer xnodeSerializer) throws SchemaException{
private static <T> MapXNode serializeComparisonFilter(PropertyValueFilter<T> filter, XNodeSerializer xnodeSerializer) throws SchemaException{
MapXNode map = new MapXNode();
QName clause;
if (filter instanceof EqualFilter) {
Expand All @@ -754,15 +759,15 @@ private static <T extends PrismValue> MapXNode serializeComparisonFilter(Propert
return map;
}

private static <T extends PrismValue> MapXNode serializeValueFilter(PropertyValueFilter<T> filter, XNodeSerializer xnodeSerializer) throws SchemaException {
private static <V extends PrismValue, D extends ItemDefinition> MapXNode serializeValueFilter(ValueFilter<V,D> filter, XNodeSerializer xnodeSerializer) throws SchemaException {
MapXNode map = new MapXNode();
serializeMatchingRule(filter, map);
serializePath(map, filter.getFullPath(), filter);

List<T> values = filter.getValues();
List<V> 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);
}
Expand Down
Expand Up @@ -40,6 +40,7 @@ public static AllFilter createAll() {
return new AllFilter();
}

@SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public AllFilter clone() {
return new AllFilter();
Expand All @@ -61,7 +62,6 @@ public String debugDump(int indent) {
DebugUtil.indentDebugDump(sb, indent);
sb.append("ALL");
return sb.toString();

}

@Override
Expand Down
Expand Up @@ -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");
Expand All @@ -39,18 +36,16 @@ public AndFilter(List<ObjectFilter> condition) {
}

public static AndFilter createAnd(ObjectFilter... conditions){
List<ObjectFilter> filters = new ArrayList<ObjectFilter>();
for (ObjectFilter condition : conditions){
filters.add(condition);
}

List<ObjectFilter> filters = new ArrayList<>(conditions.length);
Collections.addAll(filters, conditions);
return new AndFilter(filters);
}

public static AndFilter createAnd(List<ObjectFilter> conditions){
return new AndFilter(conditions);
}

@SuppressWarnings("CloneDoesntCallSuperClone")
@Override
public AndFilter clone() {
return new AndFilter(getClonedConditions());
Expand All @@ -75,9 +70,7 @@ public String debugDump(int indent) {
sb.append("\n");
sb.append(filter.debugDump(indent + 1));
}

return sb.toString();

}

@Override
Expand All @@ -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(",");
}
}
Expand Down
Expand Up @@ -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<T extends Object> extends PropertyValueFilter<PrismPropertyValue<T>> {
import javax.xml.namespace.QName;

public abstract class ComparativeFilter<T extends Object> extends PropertyValueFilter<T> {

private boolean equals;

ComparativeFilter(ItemPath path, PrismPropertyDefinition definition, PrismPropertyValue<T> value, boolean equals) {
super(path, definition, value);
this.equals = equals;
}

public <T> ComparativeFilter(ItemPath path, PrismPropertyDefinition<T> definition, ItemPath rightSidePath, ItemDefinition rightSideDefinition, boolean equals) {
super(path, definition, null, rightSidePath, rightSideDefinition);
ComparativeFilter(@NotNull ItemPath path,
@Nullable PrismPropertyDefinition<T> definition,
@Nullable PrismPropertyValue<T> 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;
}

Expand All @@ -44,19 +51,17 @@ public boolean isEquals() {
public void setEquals(boolean equals) {
this.equals = equals;
}

static <T> PrismPropertyValue<T> createPropertyValue(PrismPropertyDefinition itemDefinition, T realValue){
List<PrismPropertyValue<T>> values = realValueToPropertyList(itemDefinition, realValue);
if (values == null || values.isEmpty()){

@Nullable
static <T> PrismPropertyValue<T> anyValueToPropertyValue(@NotNull PrismContext prismContext, Object value) {
List<PrismPropertyValue<T>> 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
Expand All @@ -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);
}
}

0 comments on commit 24d0516

Please sign in to comment.