package StevensLevel.logging; import StevensLevel.EventBusHelper; import StevensLevel.listeners.StevensLogListener; import StevensLevel.parts.Trial; import common.logging.ExperimentLogging.PathParts; import experiment.Subject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; import render.GraphStyleSheet; import sun.java2d.SunGraphicsEnvironment.T1Filter; /** * * @author Tristan Goffman(tgoffman@gmail.com) Nov 14, 2011 */ public class ExperimentLogging implements StevensLogListener{ private static ExperimentLogging singleton; final static String boolgetter = "is"; final static String getter = "get"; final static String setter = "set"; private static TrialView trView = new ExperimentLogging.TrialView(); static{ singleton = new ExperimentLogging(); EventBusHelper.listen(singleton, StevensLogListener.class); } static abstract class ObjView<E> { abstract List<String> getMethStrs(); String tab = "\t"; String nextline = "\n"; public String getTitleString(){ String out = ""; List<String> strs = getMethStrs(); for (String str : strs) { out+= str + tab; } return out; } public String getStringFor(E obj) { List<String> methStrs = getMethStrs(); String toReturn = ""; for (String name : methStrs) { Method meth = null; try { meth = obj.getClass().getMethod(getter + name, null); } catch (Exception ex) { Logger.getLogger(ExperimentLogging.class.getName()).log(Level.SEVERE, "No javabean getter for: " + name, ex); } if (meth == null) { try { meth = obj.getClass().getMethod(boolgetter + name, null); } catch (Exception ex) { Logger.getLogger(ExperimentLogging.class.getName()).log(Level.SEVERE, "No javabean boolean getter for: " + name, ex); } } try { toReturn += (meth.invoke(obj)).toString() + tab; } catch (Exception ex) { Logger.getLogger(ExperimentLogging.class.getName()).log(Level.SEVERE, "No method found at all for: " + name, ex); } } return toReturn + nextline; } } static class TrialView extends ObjView<Trial> { @Override List<String> getMethStrs() { return Arrays.asList("AdjustedCorr", "HighCorr", "LowCorr", "Points"); } @Override public String getStringFor(Trial trial){ GraphStyleSheetView gssView = new GraphStyleSheetView(); return super.getStringFor(trial).replaceAll(nextline, "") + gssView.getStringFor(trial.getStylesheet()); } public String titlesRepresent(){ return getTitleString() + (new GraphStyleSheetView().getTitleString()) + nextline; } } static class GraphStyleSheetView extends ObjView<GraphStyleSheet> { @Override List<String> getMethStrs() { return Arrays.asList("AxisOn", "DotHue", "DotStyle", "LabelsOn", "DotScaling", "DotSize"); } } public static void setup() { common.logging.ExperimentLogging.createLogfileAndFolder(singleton.subj); writeTitleString(); } private Subject subj; private ExperimentLogging() { } public static void setSubject(Subject subject) { singleton.subj = (subject); } @Override public void logTrial(Trial trial) { singleton.write(trView.getStringFor(trial)); } public void write(String string) { synchronized (singleton.subj) { common.logging.ExperimentLogging.writeToFile(singleton.subj, PathParts.StevensTrials, string); } } private static void writeTitleString(){ singleton.write(trView.titlesRepresent()); } }