use of edu.cmu.cs.hcii.cogtool.model.CognitiveModelGenerator in project cogtool by cogtool.
the class ComputePredictionCmd method computeAllPredictions.
/**
* Utility to recompute in the main thread all the results for
* all the scripts of a TaskApplication, using the given callback.
*/
public static IUndoableEdit computeAllPredictions(Project project, final TaskApplication ta, final IPredictionAlgo compute, boolean inBackground, Interaction interaction) {
// The list of old results that were replaced.
final Map<CognitiveModelGenerator, APredictionResult> oldResults = new HashMap<CognitiveModelGenerator, APredictionResult>();
// It is possible the set of old results does not include one for the
// specified computation algorithm; after enumerating, track new
// results for that algorithm (needed so that we can unset results
// in the undo action!).
final List<APredictionResult> ensuredResults = new ArrayList<APredictionResult>();
Iterator<CognitiveModelGenerator> modelGens = ta.getModelGenerators();
int obsoleteWaitContainingResults = 0;
while (modelGens.hasNext()) {
CognitiveModelGenerator modelGen = modelGens.next();
APredictionResult oldResult = ta.getResult(modelGen, compute);
// oldResult may be null if not set
oldResults.put(modelGen, oldResult);
Script script = ta.getScript(modelGen);
APredictionResult ensureResult;
if (inBackground) {
ensureResult = computeInBackground(compute, script, interaction);
} else {
ensureResult = computePrediction(compute, script, null);
}
if (ACTRPredictionAlgo.usesObsoleteWaits(ensureResult)) {
++obsoleteWaitContainingResults;
}
ensuredResults.add(ensureResult);
ta.setResult(modelGen, compute, ensureResult);
}
if (obsoleteWaitContainingResults > 0) {
interaction.protestObsoleteWaits();
}
if (ensuredResults.size() > 0) {
IUndoableEdit edit = new AUndoableEdit(ProjectLID.RecomputeScript) {
@Override
public String getPresentationName() {
return L10N.get("UNDO.PM.RecomputeScript(s)", "Recompute Script(s)");
}
protected void setResults(List<APredictionResult> results) {
int numResults = results.size();
for (int i = 0; i < numResults; i++) {
APredictionResult result = results.get(i);
result = PredictionResultProxy.getLatestResult(result);
results.set(i, result);
ta.setResult(result.getScript().getModelGenerator(), result.getPredictionAlgorithm(), result);
}
}
@Override
public void redo() {
super.redo();
setResults(ensuredResults);
}
@Override
public void undo() {
super.undo();
Iterator<Map.Entry<CognitiveModelGenerator, APredictionResult>> resetResults = oldResults.entrySet().iterator();
while (resetResults.hasNext()) {
Map.Entry<CognitiveModelGenerator, APredictionResult> entry = resetResults.next();
// key is modelGen, value part is the old result
CognitiveModelGenerator modelGen = entry.getKey();
APredictionResult oldResult = entry.getValue();
if (oldResult == null) {
ta.unsetResult(modelGen, compute);
} else {
ta.setResult(modelGen, compute, oldResult);
}
}
}
};
addUndoableEditToScripts(edit, ta, project);
return edit;
}
return null;
}
Aggregations