* @author Petr Kremen
*/
public class QuerySizeEstimator {
public static void computeSizeEstimate(final Query query) {
final SizeEstimate sizeEstimate = query.getKB().getSizeEstimate();
final Set<ATermAppl> concepts = new HashSet<ATermAppl>();
final Set<ATermAppl> properties = new HashSet<ATermAppl>();
// boolean fullDone = false;
for (final QueryAtom atom : query.getAtoms()) {
// if (!fullDone) {
// switch (atom.getPredicate()) {
// case Type:
// if (query.getDistVars()
// .contains(atom.getArguments().get(1))) {
// fullDone = true;
// }
// break;
// case PropertyValue:
// if (query.getDistVars()
// .contains(atom.getArguments().get(1))) {
// fullDone = true;
// }
// break;
// case SameAs:
// case DifferentFrom:
// break;
// default:
//// fullDone = true;
// ;
// }
// if (fullDone) {
// sizeEstimate.computeAll();
// }
// }
for (final ATermAppl argument : atom.getArguments()) {
if (!ATermUtils.isVar(argument)) {
if ((query.getKB().isClass(argument) || ATermUtils
.isComplexClass(argument))
&& !sizeEstimate.isComputed(argument)) {
concepts.add(argument);
}
if (query.getKB().isProperty(argument)
&& !sizeEstimate.isComputed(argument)) {
properties.add(argument);
}
}
}
}
sizeEstimate.compute(concepts, properties);
}