1.1 --- a/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:07:11 2008 +0200
1.2 +++ b/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:07:15 2008 +0200
1.3 @@ -24,6 +24,10 @@
1.4 <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
1.5 </antcall>
1.6 <antcall target="-build-one">
1.7 + <param name="version" value="app-register-general"/>
1.8 + <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
1.9 + </antcall>
1.10 + <antcall target="-build-one">
1.11 <param name="version" value="app-property"/>
1.12 <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
1.13 </antcall>
1.14 @@ -53,6 +57,12 @@
1.15 <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes:../../libs/dist/spring-2.5.jar:../../libs/dist/commons-logging-1.1.jar"/>
1.16 <param name="main" value="org.apidesign.anagram.app.spring.Main"/>
1.17 </antcall>
1.18 + <echo level="info" message="Running registerGeneral version"/>
1.19 + <antcall target="-run-one">
1.20 + <param name="version" value="app-register-general"/>
1.21 + <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
1.22 + <param name="main" value="org.apidesign.anagram.app.registergeneral.Main"/>
1.23 + </antcall>
1.24 </target>
1.25
1.26 <!-- support methods -->
2.1 --- a/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:07:11 2008 +0200
2.2 +++ b/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:07:15 2008 +0200
2.3 @@ -40,6 +40,12 @@
2.4 <encoding>UTF-8</encoding>
2.5 </source-folder>
2.6 <source-folder>
2.7 + <label>src-app-register-general</label>
2.8 + <type>java</type>
2.9 + <location>src-app-register-general</location>
2.10 + <encoding>UTF-8</encoding>
2.11 + </source-folder>
2.12 + <source-folder>
2.13 <label>src-app-property</label>
2.14 <type>java</type>
2.15 <location>src-app-property</location>
2.16 @@ -111,6 +117,10 @@
2.17 <location>src-app-register</location>
2.18 </source-folder>
2.19 <source-folder style="packages">
2.20 + <label>src-app-register-general</label>
2.21 + <location>src-app-register-general</location>
2.22 + </source-folder>
2.23 + <source-folder style="packages">
2.24 <label>src-app-property</label>
2.25 <location>src-app-property</location>
2.26 </source-folder>
2.27 @@ -163,6 +173,12 @@
2.28 <source-level>1.5</source-level>
2.29 </compilation-unit>
2.30 <compilation-unit>
2.31 + <package-root>src-app-register-general</package-root>
2.32 + <classpath mode="compile">src-api:src-scrambler-simple:src-word-static:src-gui</classpath>
2.33 + <built-to>build/app-register/classes</built-to>
2.34 + <source-level>1.5</source-level>
2.35 + </compilation-unit>
2.36 + <compilation-unit>
2.37 <package-root>src-app-property</package-root>
2.38 <classpath mode="compile">src-api:src-scrambler-simple:src-word-static:src-gui</classpath>
2.39 <built-to>build/app-property/classes</built-to>
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/AnagramsWithRegistry.java Sat Jun 14 10:07:15 2008 +0200
3.3 @@ -0,0 +1,22 @@
3.4 +package org.apidesign.anagram.app.registergeneral;
3.5 +
3.6 +import org.apidesign.anagram.api.Scrambler;
3.7 +import org.apidesign.anagram.api.WordLibrary;
3.8 +import org.apidesign.anagram.gui.Anagrams;
3.9 +
3.10 +class AnagramsWithRegistry extends Anagrams {
3.11 +
3.12 + public AnagramsWithRegistry() {
3.13 + }
3.14 +
3.15 + @Override
3.16 + protected WordLibrary getWordLibrary() {
3.17 + return Registry.find(WordLibrary.class);
3.18 + }
3.19 +
3.20 + @Override
3.21 + protected Scrambler getScrambler() {
3.22 + return Registry.find(Scrambler.class);
3.23 + }
3.24 +
3.25 +}
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Main.java Sat Jun 14 10:07:15 2008 +0200
4.3 @@ -0,0 +1,19 @@
4.4 +package org.apidesign.anagram.app.registergeneral;
4.5 +
4.6 +import org.apidesign.anagram.api.UI;
4.7 +import org.apidesign.anagram.scramblersimple.SimpleScrambler;
4.8 +import org.apidesign.anagram.wordstatic.StaticWordLibrary;
4.9 +
4.10 +public final class Main {
4.11 + private Main() { }
4.12 +
4.13 + public static void main(String[] args) throws Exception {
4.14 + Registry.registerClass(SimpleScrambler.class);
4.15 + Registry.registerClass(StaticWordLibrary.class);
4.16 +
4.17 + UI ui = new AnagramsWithRegistry();
4.18 + ui.display();
4.19 + }
4.20 +
4.21 +
4.22 +}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Registry.java Sat Jun 14 10:07:15 2008 +0200
5.3 @@ -0,0 +1,32 @@
5.4 +package org.apidesign.anagram.app.registergeneral;
5.5 +
5.6 +import java.util.LinkedHashMap;
5.7 +import java.util.Map;
5.8 +
5.9 +public final class Registry {
5.10 + private static Map<Class<?>,Object[]> instances = new LinkedHashMap<Class<?>,Object[]>();
5.11 +
5.12 + private Registry() {
5.13 + }
5.14 +
5.15 + public static void registerClass(Class<?> impl) {
5.16 + instances.put(impl, new Object[1]);
5.17 + }
5.18 +
5.19 + public static <T> T find(Class<T> whatType) {
5.20 + for (Map.Entry<Class<?>, Object[]> entry : instances.entrySet()) {
5.21 + if (whatType.isAssignableFrom(entry.getKey())) {
5.22 + if (entry.getValue()[0] == null) {
5.23 + try {
5.24 + entry.getValue()[0] = entry.getKey().newInstance();
5.25 + } catch (Exception ex) {
5.26 + throw new IllegalStateException(ex);
5.27 + }
5.28 + }
5.29 + return whatType.cast(entry.getValue()[0]);
5.30 + }
5.31 + }
5.32 + return null;
5.33 + }
5.34 +}
5.35 +