package de.danielluedecke.zettelkasten; import java.io.File; import java.lang.reflect.Field; import org.jdesktop.application.SingleFrameApplication; import de.danielluedecke.zettelkasten.database.AcceleratorKeys; import de.danielluedecke.zettelkasten.database.AutoKorrektur; import de.danielluedecke.zettelkasten.database.Daten; import de.danielluedecke.zettelkasten.database.Settings; import de.danielluedecke.zettelkasten.database.StenoData; import de.danielluedecke.zettelkasten.database.Synonyms; import de.danielluedecke.zettelkasten.database.TasksData; /** * This class offers convenience access testable Zettelkasten objects. * * @author Timm Heuss * */ public class TestObjectFactory { /** * Implementation of a thread safe, synchronized singleton pattern * {@link http://de.wikibooks.org/wiki/Java_Standard:_Muster_Singleton}. */ private static TestObjectFactory instance; public static synchronized TestObjectFactory getInstance() throws Exception { if (TestObjectFactory.instance == null) { TestObjectFactory.instance = new TestObjectFactory(); } return TestObjectFactory.instance; } private final StenoData stenoData; private final AutoKorrektur autoKorrektur; private final TasksData tasksData; private final AcceleratorKeys acceleratorKeys; private final Synonyms synonyms; private TestObjectFactory() throws Exception { stenoData = null; autoKorrektur = null; tasksData = null; acceleratorKeys = new AcceleratorKeys(); synonyms = new Synonyms(); } /** * Abstracts sample files and settings */ public enum ZKN3Settings { ZKN3_SAMPLE("zkn3_sample.zkn3", false), ZKN3_TRICKY_NON_MARKDOWN( "zkn3_tricky.zkn3", false), ZKN3_TRICKY_MARKDOWN( "zkn3_tricky.zkn3", true); public Settings settings; public File file; ZKN3Settings(String file, boolean markdownActivated) { try { settings = new Settings( TestObjectFactory.getInstance().acceleratorKeys, TestObjectFactory.getInstance().autoKorrektur, TestObjectFactory.getInstance().synonyms, TestObjectFactory.getInstance().stenoData); File fileObject = new File(TestObjectFactory.class .getClassLoader().getResource(file).getPath()); settings.setFilePath(fileObject); this.file = fileObject; settings.setMarkdownActivated(markdownActivated); } catch (Exception e) { throw new RuntimeException(e); } } } public static Daten getDaten(ZKN3Settings zkn3Settings) throws Exception { Settings settings = zkn3Settings.settings; ZettelkastenView zettelkastenView = new ZettelkastenView( new SingleFrameApplication() { @Override protected void startup() { } }, settings, TestObjectFactory.getInstance().acceleratorKeys, TestObjectFactory.getInstance().autoKorrektur, TestObjectFactory.getInstance().synonyms, TestObjectFactory.getInstance().stenoData, TestObjectFactory.getInstance().tasksData); return (Daten) getPrivateField(zettelkastenView, "data"); } /** * Helper to retrieve a private / protected field. * @param instance * @param fieldName * @return * @throws java.lang.Exception */ public static Object getPrivateField(Object instance, String fieldName) throws Exception { Field field = instance.getClass().getDeclaredField(fieldName); field.setAccessible(true); return (Daten) field.get(instance); } }