use of org.apache.directory.api.ldap.codec.search.NotFilter in project directory-ldap-api by apache.
the class InitNotFilter method action.
/**
* {@inheritDoc}
*/
public void action(LdapMessageContainer<SearchRequestDecorator> container) throws DecoderException {
TLV tlv = container.getCurrentTLV();
if (tlv.getLength() == 0) {
String msg = I18n.err(I18n.ERR_04009);
LOG.error(msg);
throw new DecoderException(msg);
}
SearchRequestDecorator searchRequestDecorator = container.getMessage();
// We can allocate the SearchRequest
Filter notFilter = new NotFilter(container.getTlvId());
// Set the filter
searchRequestDecorator.addCurrentFilter(notFilter);
if (IS_DEBUG) {
LOG.debug("Initialize NOT filter");
}
}
use of org.apache.directory.api.ldap.codec.search.NotFilter in project directory-ldap-api by apache.
the class SearchRequestDecorator method transform.
/**
* Transform an ExprNode filter to a Filter
*
* @param exprNode The filter to be transformed
* @return A filter
*/
private static Filter transform(ExprNode exprNode) {
if (exprNode != null) {
Filter filter = null;
// Transform OR, AND or NOT leaves
if (exprNode instanceof BranchNode) {
if (exprNode instanceof AndNode) {
filter = new AndFilter();
} else if (exprNode instanceof OrNode) {
filter = new OrFilter();
} else {
filter = new NotFilter();
}
List<ExprNode> children = ((BranchNode) exprNode).getChildren();
// Loop on all AND/OR children
if (children != null) {
for (ExprNode child : children) {
try {
((ConnectorFilter) filter).addFilter(transform(child));
} catch (DecoderException de) {
return null;
}
}
}
} else {
if (exprNode instanceof PresenceNode) {
// Transform Presence Node
filter = new PresentFilter();
((PresentFilter) filter).setAttributeDescription(((PresenceNode) exprNode).getAttribute());
} else if (exprNode instanceof SimpleNode<?>) {
if (exprNode instanceof EqualityNode<?>) {
filter = new AttributeValueAssertionFilter(LdapCodecConstants.EQUALITY_MATCH_FILTER);
AttributeValueAssertion assertion = new AttributeValueAssertion();
assertion.setAttributeDesc(((EqualityNode<?>) exprNode).getAttribute());
assertion.setAssertion(((EqualityNode<?>) exprNode).getValue().getBytes());
((AttributeValueAssertionFilter) filter).setAssertion(assertion);
} else if (exprNode instanceof GreaterEqNode<?>) {
filter = new AttributeValueAssertionFilter(LdapCodecConstants.GREATER_OR_EQUAL_FILTER);
AttributeValueAssertion assertion = new AttributeValueAssertion();
assertion.setAttributeDesc(((GreaterEqNode<?>) exprNode).getAttribute());
assertion.setAssertion(((GreaterEqNode<?>) exprNode).getValue().getBytes());
((AttributeValueAssertionFilter) filter).setAssertion(assertion);
} else if (exprNode instanceof LessEqNode<?>) {
filter = new AttributeValueAssertionFilter(LdapCodecConstants.LESS_OR_EQUAL_FILTER);
AttributeValueAssertion assertion = new AttributeValueAssertion();
assertion.setAttributeDesc(((LessEqNode<?>) exprNode).getAttribute());
assertion.setAssertion(((LessEqNode<?>) exprNode).getValue().getBytes());
((AttributeValueAssertionFilter) filter).setAssertion(assertion);
} else if (exprNode instanceof ApproximateNode<?>) {
filter = new AttributeValueAssertionFilter(LdapCodecConstants.APPROX_MATCH_FILTER);
AttributeValueAssertion assertion = new AttributeValueAssertion();
assertion.setAttributeDesc(((ApproximateNode<?>) exprNode).getAttribute());
assertion.setAssertion(((ApproximateNode<?>) exprNode).getValue().getBytes());
((AttributeValueAssertionFilter) filter).setAssertion(assertion);
}
} else if (exprNode instanceof SubstringNode) {
// Transform Substring Nodes
filter = new SubstringFilter();
((SubstringFilter) filter).setType(((SubstringNode) exprNode).getAttribute());
String initialString = ((SubstringNode) exprNode).getInitial();
String finalString = ((SubstringNode) exprNode).getFinal();
List<String> anyStrings = ((SubstringNode) exprNode).getAny();
if (initialString != null) {
((SubstringFilter) filter).setInitialSubstrings(initialString);
}
if (finalString != null) {
((SubstringFilter) filter).setFinalSubstrings(finalString);
}
if (anyStrings != null) {
for (String any : anyStrings) {
((SubstringFilter) filter).addAnySubstrings(any);
}
}
} else if (exprNode instanceof ExtensibleNode) {
// Transform Extensible Node
filter = new ExtensibleMatchFilter();
String attribute = ((ExtensibleNode) exprNode).getAttribute();
String matchingRule = ((ExtensibleNode) exprNode).getMatchingRuleId();
boolean dnAttributes = ((ExtensibleNode) exprNode).hasDnAttributes();
Value value = ((ExtensibleNode) exprNode).getValue();
if (attribute != null) {
((ExtensibleMatchFilter) filter).setType(attribute);
}
if (matchingRule != null) {
((ExtensibleMatchFilter) filter).setMatchingRule(matchingRule);
}
((ExtensibleMatchFilter) filter).setMatchValue(value);
((ExtensibleMatchFilter) filter).setDnAttributes(dnAttributes);
}
}
return filter;
} else {
// We have found nothing to transform. Return null then.
return null;
}
}
Aggregations