Solution with properties
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:07:00 +0200
changeset 221a89ad3d1da08
parent 220 877c6654f10e
child 222 def08b238fa5
Solution with properties
samples/componentinjection/anagram-modular/build.xml
samples/componentinjection/anagram-modular/nbproject/project.xml
samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java
samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/Main.java
     1.1 --- a/samples/componentinjection/anagram-modular/build.xml	Sat Jun 14 10:06:59 2008 +0200
     1.2 +++ b/samples/componentinjection/anagram-modular/build.xml	Sat Jun 14 10:07:00 2008 +0200
     1.3 @@ -23,16 +23,26 @@
     1.4              <param name="version" value="app-register"/>
     1.5              <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
     1.6          </antcall>
     1.7 +        <antcall target="-build-one">
     1.8 +            <param name="version" value="app-property"/>
     1.9 +            <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
    1.10 +        </antcall>
    1.11          
    1.12      </target>
    1.13      
    1.14      <target name="test" depends="build">
    1.15 -        <echo level="info" message="Running the tests with bridge enabled. This should succeeds."/>
    1.16 +        <echo level="info" message="Running registerXYZ version"/>
    1.17          <antcall target="-run-one">
    1.18              <param name="version" value="app-register"/>
    1.19              <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
    1.20              <param name="main" value="org.apidesign.anagram.app.register.Main"/>
    1.21          </antcall>
    1.22 +        <echo level="info" message="Running System.getProperty version"/>
    1.23 +        <antcall target="-run-one">
    1.24 +            <param name="version" value="app-property"/>
    1.25 +            <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
    1.26 +            <param name="main" value="org.apidesign.anagram.app.property.Main"/>
    1.27 +        </antcall>
    1.28      </target>
    1.29      
    1.30      <!-- support methods -->
     2.1 --- a/samples/componentinjection/anagram-modular/nbproject/project.xml	Sat Jun 14 10:06:59 2008 +0200
     2.2 +++ b/samples/componentinjection/anagram-modular/nbproject/project.xml	Sat Jun 14 10:07:00 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-property</label>
     2.8 +                    <type>java</type>
     2.9 +                    <location>src-app-property</location>
    2.10 +                    <encoding>UTF-8</encoding>
    2.11 +                </source-folder>
    2.12 +                <source-folder>
    2.13                      <label>Anagram Modular</label>
    2.14                      <location>.</location>
    2.15                      <encoding>UTF-8</encoding>
    2.16 @@ -98,6 +104,10 @@
    2.17                          <label>src-app-register</label>
    2.18                          <location>src-app-register</location>
    2.19                      </source-folder>
    2.20 +                    <source-folder style="packages">
    2.21 +                        <label>src-app-property</label>
    2.22 +                        <location>src-app-property</location>
    2.23 +                    </source-folder>
    2.24                      <source-file>
    2.25                          <location>build.xml</location>
    2.26                      </source-file>
    2.27 @@ -143,6 +153,12 @@
    2.28                  <source-level>1.5</source-level>
    2.29              </compilation-unit>
    2.30              <compilation-unit>
    2.31 +                <package-root>src-app-property</package-root>
    2.32 +                <classpath mode="compile">src-api:src-scrambler-simple:src-word-static:src-gui</classpath>
    2.33 +                <built-to>build/app-property/classes</built-to>
    2.34 +                <source-level>1.5</source-level>
    2.35 +            </compilation-unit>
    2.36 +            <compilation-unit>
    2.37                  <package-root>src-test</package-root>
    2.38                  <classpath mode="compile">src-new-api:../libs/dist/junit-4.4.jar</classpath>
    2.39                  <source-level>1.5</source-level>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java	Sat Jun 14 10:07:00 2008 +0200
     3.3 @@ -0,0 +1,51 @@
     3.4 +package org.apidesign.anagram.app.register;
     3.5 +
     3.6 +import java.util.logging.Level;
     3.7 +import java.util.logging.Logger;
     3.8 +import org.apidesign.anagram.api.Scrambler;
     3.9 +import org.apidesign.anagram.api.WordLibrary;
    3.10 +import org.apidesign.anagram.gui.Anagrams;
    3.11 +
    3.12 +public final class AnagramsWithProperties extends Anagrams {
    3.13 +    private WordLibrary wordLibrary;
    3.14 +    private Scrambler scrambler;
    3.15 +    
    3.16 +    public AnagramsWithProperties() {
    3.17 +    }
    3.18 +    
    3.19 +    private static <T> Class<? extends T> loadImpl(Class<T> clazz) throws ClassNotFoundException {
    3.20 +        String implName = System.getProperty(clazz.getName());
    3.21 +        assert implName != null;
    3.22 +        ClassLoader loader = Thread.currentThread().getContextClassLoader();
    3.23 +        if (loader == null) {
    3.24 +            loader = AnagramsWithProperties.class.getClassLoader();
    3.25 +        }
    3.26 +        Class<?> impl = Class.forName(implName, false, loader);
    3.27 +        return impl.asSubclass(clazz);
    3.28 +    }
    3.29 +    
    3.30 +
    3.31 +    @Override
    3.32 +    protected WordLibrary getWordLibrary() {
    3.33 +        try {
    3.34 +            if (wordLibrary == null) {
    3.35 +                wordLibrary = loadImpl(WordLibrary.class).newInstance();
    3.36 +            }
    3.37 +            return wordLibrary;
    3.38 +        } catch (Exception ex) {
    3.39 +            throw new IllegalStateException(ex);
    3.40 +        }
    3.41 +    }
    3.42 +
    3.43 +    @Override
    3.44 +    protected Scrambler getScrambler() {
    3.45 +        try {
    3.46 +            if (scrambler == null) {
    3.47 +                scrambler = loadImpl(Scrambler.class).newInstance();
    3.48 +            }
    3.49 +            return scrambler;
    3.50 +        } catch (Exception ex) {
    3.51 +            throw new IllegalStateException(ex);
    3.52 +        }
    3.53 +    }
    3.54 +}
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/Main.java	Sat Jun 14 10:07:00 2008 +0200
     4.3 @@ -0,0 +1,23 @@
     4.4 +package org.apidesign.anagram.app.property;
     4.5 +
     4.6 +import org.apidesign.anagram.api.UI;
     4.7 +
     4.8 +public final class Main {
     4.9 +    private Main() { }
    4.10 +    
    4.11 +    public static void main(String[] args) throws Exception {
    4.12 +        System.setProperty(
    4.13 +            "org.apidesign.anagram.api.WordLibrary", 
    4.14 +            "org.apidesign.anagram.wordstatic.StaticWordLibrary"
    4.15 +        );
    4.16 +        System.setProperty(
    4.17 +            "org.apidesign.anagram.api.Scrambler", 
    4.18 +            "org.apidesign.anagram.scramblersimple.SimpleScrambler"
    4.19 +        );
    4.20 +        
    4.21 +        UI ui = new org.apidesign.anagram.app.register.AnagramsWithProperties();
    4.22 +        ui.display();
    4.23 +    }
    4.24 +    
    4.25 +    
    4.26 +}