package context.arch.discoverer.query;
import java.util.Collection;
import java.util.List;
import context.arch.comm.DataObject;
import context.arch.discoverer.ComponentDescription;
import context.arch.discoverer.component.dataModel.AbstractDataModel;
/**
*
* @author Brian Y. Lim
*
*/
public class HmmQueryItem extends AbstractQueryItem<HmmWrapper, ComponentDescription> {
private static final long serialVersionUID = 1108567664776021828L;
public static final String HMM_QUERY_ITEM = "HMM_QUERY_ITEM";
protected HmmWrapper hmm;
// protected WidgetElement elementToMatch; // not really using a comparison paradigm, so this is not compatible
protected List<String> lastOutcomeValueSequence;
public HmmQueryItem(HmmWrapper hmm) {
this.hmm = hmm;
// TODO consider format of inputs
// AbstractDescriptionElement outcomeValue
// or it could be an Instances training set if classifier is not yet trained
// but that would be computationally expensive, and doesn't allow customization, but allows online learning
// can be used for kNN clustering or any other lazy learners
// AbstractComparison as classifier (then can plug different ones)
}
public HmmWrapper getHMMWrapper() {
return hmm;
}
public List<String> getLastOutcomeValueSequence() {
return lastOutcomeValueSequence;
}
@Override
public Collection<ComponentDescription> search(AbstractDataModel dataModel) {
// TODO Auto-generated method stub
return null;
}
@Override
public Boolean match(ComponentDescription widgetState) {
// // save inputs
// List<String> inputsSequence = new ArrayList<String>(widgetState.getNonConstantAttributeNameValues());
// enactor.setInputsSequence(inputsSequence);
// System.out.println("process widgetState = " + widgetState);
lastOutcomeValueSequence = hmm.classify(widgetState);
// System.out.println("process lastOutcomeValueSequence = " + lastOutcomeValueSequence);
if (lastOutcomeValueSequence == null) { return null; }
else { return true; }
}
@Override
public DataObject toDataObject() {
// DataObjects v = new DataObjects();
// v.add(classifier.toDataObject());
// return new DataObject(CLASSIFIER_QUERY_ITEM, v);
return null; // TODO
}
public static AbstractQueryItem<?,?> fromDataObject(DataObject data) {
// TODO
return null; // TODO: do I need to implement this?
}
@Override
public String toString() {
return "HMMQueryItem : " + hmm;
}
}