Showing how such a general registry might look like
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:07:15 +0200
changeset 228984a01bbac90
parent 227 c62f8dacf553
child 229 b01da7eb41dd
Showing how such a general registry might look like
samples/componentinjection/anagram-modular/build.xml
samples/componentinjection/anagram-modular/nbproject/project.xml
samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/AnagramsWithRegistry.java
samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Main.java
samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Registry.java
     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 +