package org.genedb.querying.core;
import org.springframework.validation.Errors;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class BooleanQuery implements Query {
private BooleanQueryMode mode;
private Query left;
private Query right;
public BooleanQuery(BooleanQueryMode mode, Query left, Query right) {
this.mode = mode;
this.left = left;
this.right = right;
}
@SuppressWarnings("unchecked")
public List<String> getResults() throws QueryException {
List<String> results = new ArrayList(left.getResults());
List<String> rightResults = new ArrayList(right.getResults());
switch (mode) {
case INTERSECT:
results.retainAll(rightResults);
return results;
case SUBTRACT:
results.removeAll(rightResults);
return results;
case UNION:
results.addAll(rightResults);
return results;
}
return null;
}
public String getParseableDescription() {
StringBuilder sb = new StringBuilder();
sb.append('(');
sb.append(left.getParseableDescription());
sb.append(' ');
sb.append(mode);
sb.append(' ');
sb.append(right.getParseableDescription());
sb.append(')');
return sb.toString();
}
public Map<String, Object> prepareModelData() {
return Collections.emptyMap();
}
public int getOrder() {
// Not used for boolean queries
return 0;
}
public String getQueryDescription() {
return "Boolean Query";
}
public String getQueryName() {
return "Boolean Query";
}
@Override
public void validate(Object target, Errors errors) {
return;
}
@Override
@SuppressWarnings("unchecked")
public boolean supports(Class clazz) {
return BooleanQuery.class.isAssignableFrom(clazz);
}
@Override
public boolean isMaxResultsReached() {
// Not Implemented
return false;
}
}