package org.geotools.data.efeature.query;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.query.conditions.Condition;
import org.eclipse.emf.query.conditions.eobjects.structuralfeatures.EObjectAttributeValueCondition;
import org.geotools.data.efeature.EFeatureUtils;
import org.opengis.feature.Feature;
import org.opengis.filter.identity.Identifier;
public class EAttributeValueIsID extends EObjectAttributeValueCondition {
public EAttributeValueIsID(EAttribute eAttribute, Object eIDs) throws EFeatureEncoderException {
this(eAttribute, toEIDs(eIDs));
}
public EAttributeValueIsID(EAttribute eAttribute, String... eIDs) throws EFeatureEncoderException {
this(eAttribute, EFeatureUtils.toEIDs((Object[])eIDs));
}
public EAttributeValueIsID(EAttribute eAttribute, Set<Identifier> eIDs) throws EFeatureEncoderException {
super(eAttribute, eq(eIDs));
}
public static final Set<Identifier> toEIDs(Object eIDs) throws IllegalArgumentException {
if( !(eIDs instanceof Set)) {
throw new IllegalArgumentException("eIDs must be an instance of java.util.Set");
}
Set<Identifier> eIDSet = new HashSet<Identifier>();
for(Object it : (Set<?>)eIDs) {
if( !(it instanceof Identifier)) {
throw new IllegalArgumentException("Items in set must implement " +
"org.opengis.filter.identity.Identifier");
}
eIDSet.add((Identifier)it);
}
return eIDSet;
}
public static final Condition eq(final Set<Identifier> eIDs) {
return new Condition() {
@Override
public boolean isSatisfied(Object value) {
if(value instanceof Feature) {
for(Identifier it : eIDs) {
if(it.matches(value))
return true;
}
} else if(value instanceof String) {
for(Identifier it : eIDs) {
if(it.getID().equals(value))
return true;
}
}
return false;
}
};
}
}