package context.arch.discoverer.component; import java.util.ArrayList; import java.util.Collection; import context.arch.discoverer.ComponentDescription; import context.arch.discoverer.query.comparison.AbstractComparison; public abstract class AbstractCollectionElement<C1,C2> extends AbstractElement<Collection<C1>, C1, C2> { @SuppressWarnings("unchecked") protected AbstractCollectionElement(String elementName, Class<C1> c1, Class<C2> c2) { super(elementName, /* * This quite a hack to be able to get a class * representation of Collection<C1> to inform about the E generic parameter. */ (Class<Collection<C1>>) new ArrayList<C1>().getClass(), c1, c2); } @SuppressWarnings("unchecked") protected AbstractCollectionElement(String elementName, Class<C1> c1, Class<C2> c2, C2 value) { super(elementName, (Class<Collection<C1>>) new ArrayList<C1>().getClass(), c1, c2, value); } @Override public Boolean processQueryItem(ComponentDescription component, AbstractComparison<C1,C2> comparison) { Boolean result; for (C1 element : extractElement(component)) { result = comparison.compare(element, getValue()); if (result == null) { return null; } else if (result) { return true; } } return false; } }