package com.revolsys.record.filter;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Predicate;
import com.revolsys.datatype.DataType;
import com.revolsys.record.Record;
import com.revolsys.record.Records;
/**
* Filter Records by the value of the property.
*
* @author Paul Austin
*/
public class MultipleAttributeValuesFilter implements Predicate<Record> {
/** The values to match. */
private Map<String, ? extends Object> values = Collections.emptyMap();
public MultipleAttributeValuesFilter(final Map<String, ? extends Object> values) {
this.values = values;
}
public Map<String, ? extends Object> getValues() {
return this.values;
}
public void setValues(final Map<String, ? extends Object> values) {
this.values = values;
}
/**
* Match the property on the data object with the required value.
*
* @param object The object.
* @return True if the object matched the filter, false otherwise.
*/
@Override
public boolean test(final Record object) {
for (final Entry<String, ? extends Object> entry : this.values.entrySet()) {
final String fieldName = entry.getKey();
final Object value = entry.getValue();
final Object objectValue = Records.getFieldByPath(object, fieldName);
if (objectValue == null) {
if (value != null) {
if (!DataType.equal(value, objectValue)) {
return false;
}
}
} else {
if (!DataType.equal(objectValue, value)) {
return false;
}
}
}
return true;
}
/**
* @return the name
*/
@Override
public String toString() {
return this.values.toString();
}
}