package agg.xt_basis.csp;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import agg.util.csp.Query;
import agg.util.csp.Variable;
import agg.xt_basis.Arc;
import agg.xt_basis.Node;
public class Query_Incoming extends Query {
private String arcKey;
private boolean withNTI; // graph with Node Type Inheritance
/**
* Construct myself to be a binary query for incoming arcs of
* <code>obj</code> with abstraction <code>abs</code>.
*/
public Query_Incoming(Variable obj, Variable tar) {
super(obj, tar, 3);
this.arcKey = ((Arc)this.itsTarget.getGraphObject()).convertToKey();
this.withNTI = ((Arc)this.itsTarget.getGraphObject()).getContext().getTypeSet().hasInheritance();
}
public final HashSet<?> execute() {//Arc
if (this.withNTI) {
return ((Node) getSourceInstance(0)).getIncomingArcsSet();
}
HashSet<Arc> ins = ((Node) getSourceInstance(0)).getIncomingArcsSet();
HashSet<Arc> result = new LinkedHashSet<Arc>(); //ins.size());
Iterator<Arc> iter = ins.iterator();
while (iter.hasNext()) {
Arc a = iter.next();
if (a.convertToKey().equals(this.arcKey)) {
result.add(a);
}
}
return result;
}
public final int getSize() {
// return 1; // pablo
return getTarget().getTypeQuery().getAvgIncomingDegree(); // pablo
}
/**
* Return the name of this class.
*/
public final String getKind() {
return "Query_Incoming";
}
/* (non-Javadoc)
* @see agg.util.csp.Query#isDomainEmpty()
*/
@Override
public boolean isDomainEmpty() {
// TODO Auto-generated method stub
return false;
}
}