samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java
changeset 221 a89ad3d1da08
child 222 def08b238fa5
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java	Sat Jun 14 10:07:00 2008 +0200
     1.3 @@ -0,0 +1,51 @@
     1.4 +package org.apidesign.anagram.app.register;
     1.5 +
     1.6 +import java.util.logging.Level;
     1.7 +import java.util.logging.Logger;
     1.8 +import org.apidesign.anagram.api.Scrambler;
     1.9 +import org.apidesign.anagram.api.WordLibrary;
    1.10 +import org.apidesign.anagram.gui.Anagrams;
    1.11 +
    1.12 +public final class AnagramsWithProperties extends Anagrams {
    1.13 +    private WordLibrary wordLibrary;
    1.14 +    private Scrambler scrambler;
    1.15 +    
    1.16 +    public AnagramsWithProperties() {
    1.17 +    }
    1.18 +    
    1.19 +    private static <T> Class<? extends T> loadImpl(Class<T> clazz) throws ClassNotFoundException {
    1.20 +        String implName = System.getProperty(clazz.getName());
    1.21 +        assert implName != null;
    1.22 +        ClassLoader loader = Thread.currentThread().getContextClassLoader();
    1.23 +        if (loader == null) {
    1.24 +            loader = AnagramsWithProperties.class.getClassLoader();
    1.25 +        }
    1.26 +        Class<?> impl = Class.forName(implName, false, loader);
    1.27 +        return impl.asSubclass(clazz);
    1.28 +    }
    1.29 +    
    1.30 +
    1.31 +    @Override
    1.32 +    protected WordLibrary getWordLibrary() {
    1.33 +        try {
    1.34 +            if (wordLibrary == null) {
    1.35 +                wordLibrary = loadImpl(WordLibrary.class).newInstance();
    1.36 +            }
    1.37 +            return wordLibrary;
    1.38 +        } catch (Exception ex) {
    1.39 +            throw new IllegalStateException(ex);
    1.40 +        }
    1.41 +    }
    1.42 +
    1.43 +    @Override
    1.44 +    protected Scrambler getScrambler() {
    1.45 +        try {
    1.46 +            if (scrambler == null) {
    1.47 +                scrambler = loadImpl(Scrambler.class).newInstance();
    1.48 +            }
    1.49 +            return scrambler;
    1.50 +        } catch (Exception ex) {
    1.51 +            throw new IllegalStateException(ex);
    1.52 +        }
    1.53 +    }
    1.54 +}