package context.arch.enactor;
import java.util.Date;
import context.arch.discoverer.ComponentDescription;
import context.arch.discoverer.query.ClassifierQueryItem;
import context.arch.discoverer.query.comparison.ClassifierComparison;
public class ClassifierEnactorReference extends EnactorReference {
protected Date whenClassified;
public ClassifierEnactorReference(ClassifierEnactor enactor) {
super( enactor,
new ClassifierQueryItem(enactor.getClassifier(), new ClassifierComparison()),
"ClassifierOutcome"); // not associated with any single outcomeValue
}
/**
* Since this is tied to multiple outcomeValues,
* need to extract current value from the EnactorComponentInfo
* that was just stored during the comparison.
*/
@Override
public void evaluateComponent(EnactorComponentInfo eci) {
ComponentDescription widgetState = eci.getCurrentState();
// String outcomeValue = Enactor.getAttValue(((ClassifierQueryItem)conditionQuery).getClassAttributeName(), widgetState.getNonConstantAttributes()).toString();
String outcomeValue = ((ClassifierQueryItem)super.conditionQuery).getClassifierComp().getLastOutcomeValue();
// System.out.println("ClassifierEnactorReference outcomeValue = " + outcomeValue);
// System.out.println("ClassifierEnactorReference classAttributeName = " + ((ClassifierQueryItem)conditionQuery).getClassAttributeName());
// update the outcome value of the enactor and reference
enactor.setOutcomeValue(outcomeValue);
enactor.setInWidgetState(widgetState);
this.setOutcomeValue(outcomeValue);
conditionSatisfied(eci); // subclass can do whatever
enactor.fireComponentEvaluated(eci); // notify listeners after reacting
}
// /**
// * Now this may be invoked when outcome takes multiple values.
// * Read the Enactor's outcomeValue to determine what it is.
// */
// @Override
// public abstract void conditionSatisfied(EnactorComponentInfo eci);
}