Search in sources :

Example 16 with CognitiveModelGenerator

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;
}
Also used : Script(edu.cmu.cs.hcii.cogtool.model.Script) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) APredictionResult(edu.cmu.cs.hcii.cogtool.model.APredictionResult) CognitiveModelGenerator(edu.cmu.cs.hcii.cogtool.model.CognitiveModelGenerator) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit) ArrayList(java.util.ArrayList) List(java.util.List) IUndoableEdit(edu.cmu.cs.hcii.cogtool.util.IUndoableEdit) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

CognitiveModelGenerator (edu.cmu.cs.hcii.cogtool.model.CognitiveModelGenerator)16 TaskApplication (edu.cmu.cs.hcii.cogtool.model.TaskApplication)11 Script (edu.cmu.cs.hcii.cogtool.model.Script)7 IPredictionAlgo (edu.cmu.cs.hcii.cogtool.model.IPredictionAlgo)6 APredictionResult (edu.cmu.cs.hcii.cogtool.model.APredictionResult)5 AUndertaking (edu.cmu.cs.hcii.cogtool.model.AUndertaking)5 TaskGroup (edu.cmu.cs.hcii.cogtool.model.TaskGroup)4 Demonstration (edu.cmu.cs.hcii.cogtool.model.Demonstration)3 Design (edu.cmu.cs.hcii.cogtool.model.Design)3 AUndoableEdit (edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)3 IUndoableEdit (edu.cmu.cs.hcii.cogtool.util.IUndoableEdit)3 UndoManager (edu.cmu.cs.hcii.cogtool.util.UndoManager)3 DefaultModelGeneratorState (edu.cmu.cs.hcii.cogtool.model.DefaultModelGeneratorState)2 DoublePoint (edu.cmu.cs.hcii.cogtool.model.DoublePoint)2 GraphicsUtil (edu.cmu.cs.hcii.cogtool.util.GraphicsUtil)2 ArrayList (java.util.ArrayList)2 ComputationUndoRedo (edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo)1 AScriptStep (edu.cmu.cs.hcii.cogtool.model.AScriptStep)1 Frame (edu.cmu.cs.hcii.cogtool.model.Frame)1 ITaskDesign (edu.cmu.cs.hcii.cogtool.model.Project.ITaskDesign)1