annotate ExperimentController.java @ 2:1fe7ac28a3ca

Save results after each presentation. Ignore-this: 5f7d744b55a2f8919f7807bf69fa3d1a
author Marcus Pearce <m.pearce@gold.ac.uk>
date Mon, 14 Jun 2010 13:28:18 +0100
parents 4031cbb02f08
children 5080b65e6963
rev   line source
m@0 1 /*=============================================================================
m@0 2 * File: ExperimentController.java
m@0 3 * Author: Marcus Pearce <m.pearce@gold.ac.uk>
m@0 4 * Created: <2007-12-14 12:06:10 marcusp>
m@2 5 * Time-stamp: <2010-06-14 13:20:03 marcusp>
m@0 6 *=============================================================================
m@0 7 */
m@0 8
m@0 9 import java.awt.*;
m@0 10 import java.awt.event.*;
m@0 11 import javax.swing.*;
m@0 12
m@0 13 public class ExperimentController implements ActionListener, KeyListener {
m@0 14
m@0 15 /* variables */
m@0 16 ExperimentGui gui;
m@0 17
m@0 18 Experiment exp;
m@0 19 SubjectResults results;
m@0 20
m@0 21 InstructionsPanel ip;
m@0 22 StimulusPanel sp;
m@0 23 SubjectDataPanel sdp;
m@0 24 InterBlockPanel ibp;
m@0 25
m@0 26 /* constructor */
m@0 27 public ExperimentController(ExperimentGui eg) {
m@0 28 gui = eg;
m@0 29 exp = gui.getExperiment();
m@0 30 results = exp.getSubjectResults();
m@0 31
m@0 32 ip = gui.getInstructionsPanel();
m@0 33 ibp = gui.getInterBlockPanel();
m@0 34 sp = gui.getStimulusPanel();
m@0 35 sdp = gui.getSubjectDataPanel();
m@0 36
m@0 37 ip.addNextButtonListener(this);
m@0 38 sp.addAllListeners(this);
m@0 39 sdp.addFinishButtonListener(this);
m@0 40 ibp.addContinueButtonListener(this);
m@0 41
m@0 42 sp.setFocusable(true);
m@0 43 sp.addKeyListener(this);
m@0 44 sp.addAllKeyListeners(this);
m@0 45 gui.setFocusable(true);
m@0 46 gui.addKeyListener(this);
m@0 47 }
m@0 48
m@0 49 /* report erroneous input */
m@0 50 protected void reportError (String msg) {
m@0 51 JOptionPane.showMessageDialog (gui, msg);
m@0 52 }
m@0 53
m@0 54 /* actionPerformed */
m@0 55 public void actionPerformed(ActionEvent e) {
m@0 56 long time = System.nanoTime();
m@0 57 Object source = e.getSource();
m@0 58
m@0 59 ip = gui.getInstructionsPanel();
m@0 60 ibp = gui.getInterBlockPanel();
m@0 61 sp = gui.getStimulusPanel();
m@0 62 sdp = gui.getSubjectDataPanel();
m@0 63
m@0 64 Block block = exp.getCurrentBlock();
m@0 65
m@0 66 // InstructionsPanel
m@0 67 if (source == ip.getNextButton()) {
m@0 68 int subjID = ip.getSubjectID();
m@0 69 if (subjID == ip.INVALID_SUBJECT_ID || subjID < 1)
m@0 70 reportError("The Participant ID should be a positive integer.");
m@0 71 // TODO: check that subjID doesn't already exist
m@0 72 else {
m@0 73 exp.setSubjectID(subjID);
m@0 74 gui.showCard("stimulus");
m@0 75 exp.runExperiment();
m@0 76 }
m@0 77 }
m@0 78
m@0 79 // InterBlockPanel
m@0 80 else if (source == ibp.getContinueButton()) {
m@0 81 block.initialiseBlock();
m@0 82 sp.setSongNumberText();
m@0 83 sp.defaultAnswers();
m@0 84 gui.setAcceptingResponses(false);
m@0 85 gui.showCard("stimulus");
m@0 86 exp.runExperiment();
m@0 87 }
m@0 88
m@0 89 // SubjectDataPanel
m@0 90 else if (e.getSource() == sdp.getFinishButton()) {
m@0 91 if (sdp.allDataEntered()) {
m@0 92 sdp.storeData();
m@0 93 results.writeSubjectData();
m@0 94 System.exit(0);
m@0 95 } else
m@0 96 reportError("You have not filled in all the information.");
m@0 97 }
m@0 98
m@0 99 // StimulusPanel
m@0 100 else if (source == sp.getPlayButton()) {
m@0 101 // if (!exp.isRunning() && !exp.hasRun())
m@0 102 // exp.runExperiment();
m@0 103 // else
m@0 104 // reportError("You have already played the melody.");
m@0 105 } else if (source == sp.getNextButton()) {
m@0 106 if (!exp.hasRun() || exp.isRunning())
m@0 107 reportError("You haven't finished playing the melody yet.");
m@0 108 else if (sp.unansweredQuestions())
m@0 109 reportError("There are unanswered questions.");
m@0 110 else {
m@2 111 // store results (and write to file)
m@0 112 String answer1 = (String)(sp.getQ1Box().getSelectedItem());
m@0 113 String answer2 = (String)(sp.getQ2Box().getSelectedItem());
m@0 114 block.addMelodyQA("known", answer1);
m@0 115 block.addMelodyQA("liked", answer2);
m@2 116 block.storeMelodyResult();
m@2 117 results.writeResults();
m@0 118 // proceed to ...
m@0 119 String nextFile = block.nextFile();
m@0 120 if (nextFile == null) {
m@0 121 boolean nb = exp.nextBlock();
m@0 122 if (nb) {
m@0 123 // ... next block of trials
m@0 124 gui.getInterBlockPanel().setText();
m@0 125 gui.getInterBlockPanel().updateMessageDisplay();
m@0 126 gui.showCard("interblock");
m@0 127 } else {
m@0 128 // ... write results and subject questionnaire
m@0 129 results.writeResults();
m@0 130 gui.showCard("subject");
m@0 131 }
m@0 132 } else {
m@0 133 // ... next melody within block
m@0 134 sp.setSongNumberText();
m@0 135 sp.defaultAnswers();
m@0 136 gui.setAcceptingResponses(false);
m@0 137 block.initialiseBlock();
m@0 138 exp.runExperiment();
m@0 139 }
m@0 140 }
m@0 141 } else {
m@0 142 JButton[] rButtons = sp.getResponseButtons();
m@0 143 for (int i = 0; i < rButtons.length; i++) {
m@0 144 if (source == rButtons[i] && (exp.isRunning() || exp.hasRun()) && gui.getAcceptingResponses()) {
m@0 145 block.addResponse(i+1, time);
m@0 146 gui.setAcceptingResponses(false);
m@0 147 }
m@0 148 }
m@0 149 }
m@0 150 }
m@0 151
m@0 152 public void keyPressed(KeyEvent e) {
m@0 153 //System.out.println("Key pressed: " + e.getKeyChar());
m@0 154 long time = System.nanoTime();
m@0 155
m@0 156 Block block = exp.getCurrentBlock();
m@0 157 sp = gui.getStimulusPanel();
m@0 158 JButton[] rButtons = sp.getResponseButtons();
m@0 159
m@0 160 for (int i = 0; i < rButtons.length; i++) {
m@0 161 if ((exp.isRunning() || exp.hasRun()) && gui.getAcceptingResponses()) {
m@0 162 //System.out.println("Char = " + Character.forDigit(i+1, 10));
m@0 163 if (e.getKeyChar() == Character.forDigit(i+1, 10)) {
m@0 164 //System.out.println("Got rating: " + (i + 1));
m@0 165 block.addResponse(i+1, time);
m@0 166 gui.setAcceptingResponses(false);
m@0 167 }
m@0 168 //else
m@0 169 // block.addResponse(0, time);
m@0 170 }
m@0 171 }
m@0 172 }
m@0 173
m@0 174 public void keyReleased(KeyEvent e) {
m@0 175 // System.out.println("Key released: " + e.getKeyChar());
m@0 176 }
m@0 177 public void keyTyped(KeyEvent e) {
m@0 178 //System.out.println("Key typed: " + e.getKeyChar());
m@0 179 }
m@0 180 }