private static void export( PropertyIsNotEqualTo operator, XMLStreamWriter writer ) throws XMLStreamException { writer.writeStartElement( FES_20_NS, "PropertyIsNotEqualTo" ); String matchAction = retrieveMatchActionAsString( operator, writer ); if ( matchAction != null ) writer.writeAttribute( "matchAction", matchAction ); writer.writeAttribute( "matchCase", Boolean.toString( operator.isMatchCase() ) ); export( operator.getParameter1(), writer ); export( operator.getParameter2(), writer ); writer.writeEndElement(); }
@Override public <T> boolean evaluate( T obj, XPathEvaluator<T> xpathEvaluator ) throws FilterEvaluationException { TypedObjectNode[] param1Values = param1.evaluate( obj, xpathEvaluator ); TypedObjectNode[] param2Values = param2.evaluate( obj, xpathEvaluator ); // evaluate to true if at least one pair of values matches the condition for ( TypedObjectNode value1 : param1Values ) { for ( TypedObjectNode value2 : param2Values ) { if ( value1 == null && value2 == null ) { return true; } if ( value1 != null && value2 != null ) { Pair<PrimitiveValue, PrimitiveValue> comparablePair = getPrimitiveValues( value1, value2 ); if ( !matchCase ) { if ( !comparablePair.first.toString().equalsIgnoreCase( comparablePair.second.toString() ) ) { return true; } } else { if ( !comparablePair.first.equals( comparablePair.second ) ) { return true; } } } } } return false; }
case PROPERTY_IS_NOT_EQUAL_TO: PropertyIsNotEqualTo pine = (PropertyIsNotEqualTo) op; return new PropertyIsNotEqualTo( copyExpression( pine.getParameter1(), values ), copyExpression( pine.getParameter2(), values ), pine.isMatchCase(), pine.getMatchAction() ); case PROPERTY_IS_NULL: PropertyIsNull pin = (PropertyIsNull) op;
break; case PROPERTY_IS_NOT_EQUAL_TO: export( ( (PropertyIsNotEqualTo) operator ).getParameter1(), writer ); export( ( (PropertyIsNotEqualTo) operator ).getParameter2(), writer ); break; case PROPERTY_IS_NULL:
break; case PROPERTY_IS_NOT_EQUAL_TO: comparisonOperator = new PropertyIsNotEqualTo( parameter1, parameter2, matchCase, null ); break; case PROPERTY_IS_LESS_THAN:
break; case PROPERTY_IS_NOT_EQUAL_TO: comparisonOperator = new PropertyIsNotEqualTo( parameter1, parameter2, matchCase, null ); break; case PROPERTY_IS_LESS_THAN:
PropertyIsNotEqualTo propIsNotEqualTo = (PropertyIsNotEqualTo) op; SQLOperationBuilder builder = new SQLOperationBuilder( BOOLEAN ); SQLExpression param1 = toProtoSQL( propIsNotEqualTo.getParameter1(), true ); SQLExpression param2 = toProtoSQL( propIsNotEqualTo.getParameter2(), true ); if ( !param1.isMultiValued() && !param2.isMultiValued() ) { inferType( param1, param2 ); sqlOper = builder.toOperation(); } else { Expression propName = propIsNotEqualTo.getParameter1(); Expression literal = propIsNotEqualTo.getParameter2(); if ( propName instanceof ValueReference && literal instanceof Literal ) { PropertyIsLike propIsLike = buildIsLike( propName, literal, propIsNotEqualTo.isMatchCase() ); sqlOper = toProtoSQL( new Not( propIsLike ) ); } else {
break; case PROPERTY_IS_NOT_EQUAL_TO: comparisonOperator = new PropertyIsNotEqualTo( parameter1, parameter2, matchCase, matchAction ); break; case PROPERTY_IS_LESS_THAN:
return new PropertyIsNil( exs[0], pin.getNilReason(), o.getMatchAction() ); case PROPERTY_IS_NOT_EQUAL_TO: return new PropertyIsNotEqualTo( exs[0], exs[1], o.isMatchCase(), o.getMatchAction() ); case PROPERTY_IS_NULL: return new PropertyIsNull( exs[0], o.getMatchAction() );