# HG changeset patch # User Jaroslav Tulach # Date 1213430820 -7200 # Node ID a89ad3d1da0861fa1c2a2353d5c53c033c78bb7f # Parent 877c6654f10e157a4f927dc4645bd94cbcb53dab Solution with properties diff -r 877c6654f10e -r a89ad3d1da08 samples/componentinjection/anagram-modular/build.xml --- a/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:06:59 2008 +0200 +++ b/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:07:00 2008 +0200 @@ -23,16 +23,26 @@ + + + + - + + + + + + + diff -r 877c6654f10e -r a89ad3d1da08 samples/componentinjection/anagram-modular/nbproject/project.xml --- a/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:06:59 2008 +0200 +++ b/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:07:00 2008 +0200 @@ -40,6 +40,12 @@ UTF-8 + + java + src-app-property + UTF-8 + + . UTF-8 @@ -98,6 +104,10 @@ src-app-register + + + src-app-property + build.xml @@ -143,6 +153,12 @@ 1.5 + src-app-property + src-api:src-scrambler-simple:src-word-static:src-gui + build/app-property/classes + 1.5 + + src-test src-new-api:../libs/dist/junit-4.4.jar 1.5 diff -r 877c6654f10e -r a89ad3d1da08 samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java Sat Jun 14 10:07:00 2008 +0200 @@ -0,0 +1,51 @@ +package org.apidesign.anagram.app.register; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apidesign.anagram.api.Scrambler; +import org.apidesign.anagram.api.WordLibrary; +import org.apidesign.anagram.gui.Anagrams; + +public final class AnagramsWithProperties extends Anagrams { + private WordLibrary wordLibrary; + private Scrambler scrambler; + + public AnagramsWithProperties() { + } + + private static Class loadImpl(Class clazz) throws ClassNotFoundException { + String implName = System.getProperty(clazz.getName()); + assert implName != null; + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) { + loader = AnagramsWithProperties.class.getClassLoader(); + } + Class impl = Class.forName(implName, false, loader); + return impl.asSubclass(clazz); + } + + + @Override + protected WordLibrary getWordLibrary() { + try { + if (wordLibrary == null) { + wordLibrary = loadImpl(WordLibrary.class).newInstance(); + } + return wordLibrary; + } catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + + @Override + protected Scrambler getScrambler() { + try { + if (scrambler == null) { + scrambler = loadImpl(Scrambler.class).newInstance(); + } + return scrambler; + } catch (Exception ex) { + throw new IllegalStateException(ex); + } + } +} diff -r 877c6654f10e -r a89ad3d1da08 samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/Main.java Sat Jun 14 10:07:00 2008 +0200 @@ -0,0 +1,23 @@ +package org.apidesign.anagram.app.property; + +import org.apidesign.anagram.api.UI; + +public final class Main { + private Main() { } + + public static void main(String[] args) throws Exception { + System.setProperty( + "org.apidesign.anagram.api.WordLibrary", + "org.apidesign.anagram.wordstatic.StaticWordLibrary" + ); + System.setProperty( + "org.apidesign.anagram.api.Scrambler", + "org.apidesign.anagram.scramblersimple.SimpleScrambler" + ); + + UI ui = new org.apidesign.anagram.app.register.AnagramsWithProperties(); + ui.display(); + } + + +}