use of edu.cmu.cs.hcii.cogtool.model.AUndertaking in project cogtool by cogtool.
the class ProjectController method getTraces.
/**
* Utility to accumulate all of the (ACT-R) trace lines for the given
* task, design, and algorithm.
* <p>
* If the given task is an <code>TaskGroup</code>, the trace lines
* are accumulated recursively by appending together those associated
* with descendant tasks.
* Traces are associated with results, which are determined for the
* given task and design by which algorithm generated the cognitive model
* and which prediction algorithm computed the result from that model.
*
* @param task the task for which to find results associated with
* the given algorithm
* @param design the design for which to find results associated with
* the given algorithm
* @param modelGen the algorithm for generating cognitive models (i.e.,
* scripts) from demonstrations
* @param computeAlg the algorithm for generating results from
* cognitive models
* @author mlh/alex
*/
protected List<String> getTraces(AUndertaking task, Design design, CognitiveModelGenerator modelGen, IPredictionAlgo computeAlg) {
List<String> traces = new ArrayList<String>();
// and append to the current state.
if (task.isTaskGroup()) {
Iterator<AUndertaking> allTasks = ((TaskGroup) task).getUndertakings().iterator();
traces.add("For TaskGroup " + task.getName());
while (allTasks.hasNext()) {
traces.addAll(getTraces(allTasks.next(), design, modelGen, computeAlg));
}
return traces;
}
// Base case; find the result for the given task/design/algorithm
TaskApplication taskApp = project.getTaskApplication(task, design);
// Result must exist and be current
if (taskApp != null) {
APredictionResult result = taskApp.getResult(modelGen, computeAlg);
// Result may be null (although unlikely at this point).
if ((result != null) && (result.getResultState() == APredictionResult.IS_COMPUTED)) {
traces.add("Standard OUTPUT from Task " + task.getName());
// Add the trace lines from the result
traces.addAll(result.getTraceLines());
traces.add("\nStandard ERROR from Task " + task.getName());
traces.addAll(result.getErrorLines());
}
}
return traces;
}
use of edu.cmu.cs.hcii.cogtool.model.AUndertaking in project cogtool by cogtool.
the class ProjectController method createCutTaskAction.
// Action for CutTask
protected IListenerAction createCutTaskAction() {
return new IListenerAction() {
public Class<?> getParameterClass() {
return TaskSelectionState.class;
}
public boolean performAction(Object prms) {
TaskSelectionState selection = (TaskSelectionState) prms;
AUndertaking[] selectedTasks = selection.getSelectedTasks(TaskSelectionState.PRUNE_SELECTION);
// Can only cut if one or more tasks are currently selected.
if ((selectedTasks != null) && (selectedTasks.length > 0)) {
try {
ObjectSaver saver = CogToolClipboard.startClipboardSave(CogToolClipboard.CopyTasks, CogToolClipboard.SAVE_TO_CLIPBOARD);
deleteTasks(selectedTasks, saver, undoMgr);
// flush!
saver.finish();
return true;
} catch (IOException e) {
throw new RcvrClipboardException("Could not execute cut", e);
} catch (OutOfMemoryError error) {
throw new RcvrOutOfMemoryException("Cutting Tasks", error);
}
} else {
interaction.protestNoSelection();
}
return false;
}
};
}
use of edu.cmu.cs.hcii.cogtool.model.AUndertaking in project cogtool by cogtool.
the class ProjectController method createDisplayTraces.
// Action for DisplayTraces
protected IListenerAction createDisplayTraces() {
return new IListenerAction() {
public Class<?> getParameterClass() {
return ProjectSelectionState.class;
}
public boolean performAction(Object actionParms) {
ProjectSelectionState sel = (ProjectSelectionState) actionParms;
Design design = sel.getSelectedDesign();
AUndertaking[] tasks = sel.getSelectedTasks(TaskSelectionState.PRUNE_SELECTION | TaskSelectionState.ORDER_SELECTION);
if (design != null) {
if ((tasks != null) && (tasks.length > 0)) {
for (AUndertaking task : tasks) {
displayTraces(task, design);
}
} else {
Iterator<AUndertaking> allTasks = project.getUndertakings().iterator();
while (allTasks.hasNext()) {
displayTraces(allTasks.next(), design);
}
}
} else if ((tasks != null) && (tasks.length > 0)) {
for (AUndertaking task : tasks) {
Iterator<Design> allDesigns = project.getDesigns().iterator();
while (allDesigns.hasNext()) {
displayTraces(task, allDesigns.next());
}
}
}
return true;
}
};
}
use of edu.cmu.cs.hcii.cogtool.model.AUndertaking in project cogtool by cogtool.
the class ProjectController method regenerateScripts.
protected boolean regenerateScripts(ProjectSelectionState seln) {
Design design = seln.getSelectedDesign();
AUndertaking[] tasks = seln.getSelectedTasks(TaskSelectionState.PRUNE_SELECTION);
String editLabel = ui.hasMultipleScripts(seln) ? REGENERATE_SCRIPTS : REGENERATE_SCRIPT;
CompoundUndoableEdit editSequence = new CompoundUndoableEdit(editLabel, ProjectLID.RegenerateScript);
editSequence.setManager(undoMgr);
if (design != null) {
DemoStateManager demoStateMgr = DemoStateManager.getStateManager(project, design);
if ((tasks != null) && (tasks.length > 0)) {
for (int i = 0; i < tasks.length; i++) {
if (!regenerateScripts(tasks[i], design, demoStateMgr, editSequence)) {
return false;
}
}
} else {
Iterator<AUndertaking> allTasks = project.getUndertakings().iterator();
while (allTasks.hasNext()) {
if (!regenerateScripts(allTasks.next(), design, demoStateMgr, editSequence)) {
return false;
}
}
}
} else if ((tasks != null) && (tasks.length > 0)) {
for (int i = 0; i < tasks.length; i++) {
Iterator<Design> allDesigns = project.getDesigns().iterator();
while (allDesigns.hasNext()) {
design = allDesigns.next();
DemoStateManager demoStateMgr = DemoStateManager.getStateManager(project, design);
if (!regenerateScripts(tasks[i], design, demoStateMgr, editSequence)) {
return false;
}
}
}
}
if (editSequence.isSignificant()) {
editSequence.end();
undoMgr.addEdit(editSequence);
}
return true;
}
use of edu.cmu.cs.hcii.cogtool.model.AUndertaking in project cogtool by cogtool.
the class ProjectController method createImportHumanCSVFileAction.
// Action for ImportHumanCSVFile
protected IListenerAction createImportHumanCSVFileAction() {
return new IListenerAction() {
public Class<?> getParameterClass() {
return ProjectSelectionState.class;
}
public boolean performAction(Object prms) {
ProjectSelectionState seln = (ProjectSelectionState) prms;
// Must have selected tasks and design
Design design = seln.getSelectedDesign();
AUndertaking[] tasks = seln.getSelectedTasks(TaskSelectionState.PRUNE_SELECTION);
if ((design == null) || (tasks == null) || (tasks.length == 0)) {
return false;
}
List<String> outputLines = new LinkedList<String>();
List<String> errorLines = new LinkedList<String>();
// Get csv file
File dataFile = interaction.selectCSVFile();
if (dataFile == null) {
interaction.setStatusMessage(IMPORT_FAIL_NOFILE_MSG);
return false;
}
// Read lines out of file
FileReader reader = null;
try {
reader = new FileReader(dataFile);
FileUtil.readLines(reader, outputLines);
} catch (FileNotFoundException e) {
interaction.setStatusMessage(IMPORT_FAIL_NOFILE_MSG);
throw new RcvrIOTempException("Error in parsing csv", e);
} catch (IOException e) {
interaction.setStatusMessage(IMPORT_FAIL_NOREAD_MSG);
throw new RcvrParsingException("Error in parsing csv", e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// ignore
}
reader = null;
}
}
// parse ResultSteps out of trace lines
TraceParser<ResultStep> parser = new HumanCSVParser();
List<ResultStep> steps;
try {
steps = parser.parseTrace(outputLines);
} catch (TraceParser.ParseException e) {
interaction.setStatusMessage(IMPORT_FAIL_PARSE_IMPL_MSG);
throw new RcvrParsingException("Error in parsing implementation", e);
}
System.out.println(steps);
if (steps.size() < 1) {
interaction.setStatusMessage(IMPORT_FAIL_PARSE_MSG);
return false;
}
double taskTime = -1.0;
Iterator<ResultStep> stepIt = steps.iterator();
while (stepIt.hasNext()) {
ResultStep step = stepIt.next();
taskTime = Math.max(taskTime, step.startTime + step.duration);
}
// Scale time to seconds.
taskTime /= 1000.0;
// -------------- Done parsing
DemoStateManager demoMgr = DemoStateManager.getStateManager(project, design);
final TaskApplication[] taskApps = new TaskApplication[tasks.length];
final APredictionResult[] oldResults = new APredictionResult[tasks.length];
final APredictionResult[] results = new APredictionResult[tasks.length];
final IPredictionAlgo[] oldActiveAlgos = new IPredictionAlgo[tasks.length];
for (int i = 0; i < tasks.length; i++) {
taskApps[i] = ensureTaskApplication(tasks[i], design, MODELGEN_ALG, demoMgr);
// If for some reason there are no result steps,
// create a TimePredictionResult that
// reflects COMPUTATION_FAILED.
// Otherwise, create a normal one.
Script script = taskApps[i].getScript(MODELGEN_ALG);
if (taskTime < 0.0) {
results[i] = new TimePredictionResult(dataFile.getName(), script, HumanDataAlgo.ONLY, outputLines, errorLines, steps);
} else {
results[i] = new TimePredictionResult(dataFile.getName(), script, HumanDataAlgo.ONLY, outputLines, errorLines, steps, taskTime);
}
oldResults[i] = taskApps[i].getResult(MODELGEN_ALG, HumanDataAlgo.ONLY);
taskApps[i].setResult(MODELGEN_ALG, HumanDataAlgo.ONLY, results[i]);
oldActiveAlgos[i] = taskApps[i].getActiveAlgorithm();
taskApps[i].setActiveAlgorithm(HumanDataAlgo.ONLY);
}
IUndoableEdit edit = new AUndoableEdit(ProjectLID.RecomputeScript) {
@Override
public String getPresentationName() {
return IMPORT_HUMAN_CSV;
}
@Override
public void redo() {
super.redo();
for (int i = 0; i < taskApps.length; i++) {
taskApps[i].setResult(MODELGEN_ALG, HumanDataAlgo.ONLY, results[i]);
taskApps[i].setActiveAlgorithm(HumanDataAlgo.ONLY);
}
}
@Override
public void undo() {
super.undo();
for (int i = 0; i < taskApps.length; i++) {
taskApps[i].setResult(MODELGEN_ALG, HumanDataAlgo.ONLY, oldResults[i]);
taskApps[i].setActiveAlgorithm(oldActiveAlgos[i]);
}
}
};
undoMgr.addEdit(edit);
interaction.setStatusMessage(IMPORT_SUCCESS_MSG);
return true;
}
};
}
Aggregations