package com.revolsys.record.property;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import com.revolsys.record.Record;
import com.revolsys.record.schema.RecordDefinition;
public class EqualIgnoreFieldNames extends AbstractRecordDefinitionProperty {
public static final String PROPERTY_NAME = EqualIgnoreFieldNames.class.getName()
+ ".propertyName";
public static EqualIgnoreFieldNames getProperty(final Record object) {
final RecordDefinition recordDefinition = object.getRecordDefinition();
return getProperty(recordDefinition);
}
public static EqualIgnoreFieldNames getProperty(final RecordDefinition recordDefinition) {
if (recordDefinition == null) {
return null;
} else {
EqualIgnoreFieldNames property = recordDefinition.getProperty(PROPERTY_NAME);
if (property == null) {
property = new EqualIgnoreFieldNames();
property.setRecordDefinition(recordDefinition);
}
return property;
}
}
private Set<String> fieldNames = new LinkedHashSet<>();
public EqualIgnoreFieldNames() {
}
public EqualIgnoreFieldNames(final Collection<String> fieldNames) {
this.fieldNames.addAll(fieldNames);
}
public EqualIgnoreFieldNames(final String... fieldNames) {
this(Arrays.asList(fieldNames));
}
public void addFieldNames(final Collection<String> fieldNames) {
this.fieldNames.addAll(fieldNames);
}
public void addFieldNames(final String... fieldNames) {
addFieldNames(Arrays.asList(fieldNames));
}
public Set<String> getFieldNames() {
return this.fieldNames;
}
@Override
public String getPropertyName() {
return PROPERTY_NAME;
}
public boolean isFieldIgnored(final String fieldName) {
return this.fieldNames.contains(fieldName);
}
public void setFieldNames(final Collection<String> fieldNames) {
setFieldNames(new LinkedHashSet<>(fieldNames));
}
public void setFieldNames(final Set<String> fieldNames) {
this.fieldNames = fieldNames;
}
public void setFieldNames(final String... fieldNames) {
setFieldNames(Arrays.asList(fieldNames));
}
@Override
public void setRecordDefinition(final RecordDefinition recordDefinition) {
super.setRecordDefinition(recordDefinition);
if (this.fieldNames.contains(Record.EXCLUDE_ID)) {
final String idFieldName = recordDefinition.getIdFieldName();
this.fieldNames.add(idFieldName);
}
if (this.fieldNames.contains(Record.EXCLUDE_GEOMETRY)) {
final String geometryFieldName = recordDefinition.getGeometryFieldName();
this.fieldNames.add(geometryFieldName);
}
}
@Override
public String toString() {
return "EqualIgnore " + this.fieldNames;
}
}