/*
* NOTQueryItem.java
*
* Created on July 5, 2001, 4:22 PM
*/
package context.arch.discoverer.query;
import java.util.ArrayList;
import java.util.Collection;
import context.arch.discoverer.ComponentDescription;
import context.arch.discoverer.component.dataModel.AbstractDataModel;
/**
*
* @author Agathe
* @author Brian Y. Lim
*/
public class NOTQueryItem extends BooleanQueryItem {
private static final long serialVersionUID = -3548656350971935438L;
public static final String NOT_QUERY_ITEM = "notQueryItem";
protected AbstractQueryItem<?,?> child;
/** Creates new ANDQueryItem */
public NOTQueryItem(AbstractQueryItem<?,?> child) {
super(NOT_QUERY_ITEM, child);
this.child = child;
}
/**
* Perform a NOT
*/
@Override
public Collection<ComponentDescription> search(AbstractDataModel dataModel) {
return process(dataModel, child.search(dataModel));
}
/**
* Package protected and static to be reused by ElseQueryItem.
* @param dataModel
* @param children
* @return
*/
static Collection<ComponentDescription> process(AbstractDataModel dataModel, Collection<ComponentDescription> notComponents) {
// pre-populate with all components
Collection<ComponentDescription> components = new ArrayList<ComponentDescription>(dataModel.getComponents());
// remove from components if in child notComponents
components.removeAll(notComponents);
return components;
}
@Override
public Boolean match(ComponentDescription component){
Boolean childResult = child.match(component);
return childResult != null ? !childResult : null;
}
public AbstractQueryItem<?,?> getChild() {
return child;
}
}