package StevensLevel; import experiment.Subject; import StevensLevel.filesystem.FileSystemConstants; import StevensLevel.logging.ExperimentLogging; import configuration.ExperimentConfiguration; import configuration.StevensLevelDesign; import experiment.AbstractExperiment; import experiment.ExperimentType; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import org.yaml.snakeyaml.Yaml; import java.util.logging.Level; import java.util.logging.Logger; import yaml.StevensLevelDesignConstructor; import static StevensLevel.EventBusHelper.*; /** * * @author tristangoffman */ public class Experiment extends AbstractExperiment{ /** Members **/ private static Experiment exp; private ExperimentControl eCon = null; private Subject subject; /** * Can't set a new experiment configuration publicly, can only manipulate pre-existing configuration (ExperimentControl is built with one) * @return */ public ExperimentConfiguration getExperimentConfiguration() { return getExperimentControl().getConfiguration(); } public Experiment(){ EventBusHelper.setupEventBus(); this.eCon = new ExperimentControl(); } public ExperimentControl getExperimentControl(){ return eCon; } public void run(int subjectNum, String initials) { setSubject(new Subject(subjectNum, initials, ExperimentType.StevensLevel)); loadAndRun(FileSystemConstants.CONF_FILENAME); } private void loadAndRun(String filename) { ExperimentConfiguration conf = new ExperimentConfiguration(); BufferedReader stream = getConfFileStream(filename); Yaml yaml = new Yaml(new StevensLevelDesignConstructor()); conf.setDesign(StevensLevelDesign.class.cast(yaml.load(stream))); conf.counterbalance(getSubject()); getExperimentControl().setConfiguration(conf); getExperimentControl().run(); } private BufferedReader getConfFileStream(String filename) { File confFile = configuration.ConfigurationHelper.retrieveConfFile(filename); BufferedReader stream = null; try { stream = new BufferedReader(new FileReader(confFile)); } catch (FileNotFoundException ex) { Logger.getLogger(Experiment.class.getName()).log(Level.SEVERE, "No file: '" + filename + "' found in configuration directory. Needed to run StevensLevel experiment." , ex); } return stream; } @Override public void test() { ExperimentConfiguration conf = new ExperimentConfiguration(); setSubject(new Subject(1, "testSubject", ExperimentType.StevensLevel)); loadAndRun(FileSystemConstants.CONF_TEST_FILENAME); } @Override public void showConfigureFrame(boolean isShowFrame) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void loadConfiguration() { throw new UnsupportedOperationException("Not supported yet."); } @Override public void loadConfigurationFromFile(File configFile) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void loadConfigurationFromString(String str) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void saveConfiguration() { throw new UnsupportedOperationException("Not supported yet."); } @Override public void saveConfigurationToFile(File configFile) { throw new UnsupportedOperationException("Not supported yet."); } @Override public boolean checkConfigurationString(String conf) { throw new UnsupportedOperationException("Not supported yet."); } private void setSubject(Subject subject) { this.subject = subject; ExperimentLogging.setSubject(getSubject()); //used by both run/test so make sure subject is set for both ExperimentLogging.setup(); } public Subject getSubject() { return subject; } }