package context.arch.discoverer.query; import java.util.Collection; import java.util.List; import context.arch.discoverer.ComponentDescription; import context.arch.discoverer.component.dataModel.AbstractDataModel; /** * Takes its constituent queries and checks if any (OR) of them is true. If so, then this returns false. * Essentially, it is a NOT of OR (equivalently AND or NOTs). * Use this similarly to OR or AND query item by adding queries to it. * @author Brian Y. Lim * */ public class ElseQueryItem extends BooleanQueryItem { private static final long serialVersionUID = -5922149356714874831L; public static final String ELSE_QUERY_ITEM = "elseQueryItem"; public ElseQueryItem(AbstractQueryItem<?,?> ... childrenArray) { super(ELSE_QUERY_ITEM, childrenArray); } public ElseQueryItem (List<AbstractQueryItem<?,?>> children) { super(ELSE_QUERY_ITEM, children); } /** * Perform a NOT(OR(...)) which is the same as AND(NOT(...), NOT(...), ...) */ @Override public Collection<ComponentDescription> search(AbstractDataModel dataModel) { // OR processing Collection<ComponentDescription> notComponents = ORQueryItem.search(dataModel, children); // NOT processing Collection<ComponentDescription> components = NOTQueryItem.process(dataModel, notComponents); return components; } @Override public Boolean match(ComponentDescription component) { Boolean result = false; // if (component.id.contains("WAvailabilityFusion")) { // System.out.println(); // System.out.println("ElseQueryItem.process component = " + component); // } for (AbstractQueryItem<?,?> child : children) { Boolean childResult = child.match(component); // if (component.id.contains("WAvailabilityFusion")) { // System.out.println("ElseQueryItem.process child = " + child); // System.out.println("ElseQueryItem.process childResult = " + childResult); // } if (childResult == null) { return null; } else { result |= childResult; } } // if (component.id.contains("WAvailabilityFusion")) { // System.out.println("ElseQueryItem.process !result = " + (!result)); // } return !result; // NOT of OR } }