samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:07:00 +0200
changeset 221 a89ad3d1da08
child 222 def08b238fa5
permissions -rw-r--r--
Solution with properties
jtulach@221
     1
package org.apidesign.anagram.app.register;
jtulach@221
     2
jtulach@221
     3
import java.util.logging.Level;
jtulach@221
     4
import java.util.logging.Logger;
jtulach@221
     5
import org.apidesign.anagram.api.Scrambler;
jtulach@221
     6
import org.apidesign.anagram.api.WordLibrary;
jtulach@221
     7
import org.apidesign.anagram.gui.Anagrams;
jtulach@221
     8
jtulach@221
     9
public final class AnagramsWithProperties extends Anagrams {
jtulach@221
    10
    private WordLibrary wordLibrary;
jtulach@221
    11
    private Scrambler scrambler;
jtulach@221
    12
    
jtulach@221
    13
    public AnagramsWithProperties() {
jtulach@221
    14
    }
jtulach@221
    15
    
jtulach@221
    16
    private static <T> Class<? extends T> loadImpl(Class<T> clazz) throws ClassNotFoundException {
jtulach@221
    17
        String implName = System.getProperty(clazz.getName());
jtulach@221
    18
        assert implName != null;
jtulach@221
    19
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
jtulach@221
    20
        if (loader == null) {
jtulach@221
    21
            loader = AnagramsWithProperties.class.getClassLoader();
jtulach@221
    22
        }
jtulach@221
    23
        Class<?> impl = Class.forName(implName, false, loader);
jtulach@221
    24
        return impl.asSubclass(clazz);
jtulach@221
    25
    }
jtulach@221
    26
    
jtulach@221
    27
jtulach@221
    28
    @Override
jtulach@221
    29
    protected WordLibrary getWordLibrary() {
jtulach@221
    30
        try {
jtulach@221
    31
            if (wordLibrary == null) {
jtulach@221
    32
                wordLibrary = loadImpl(WordLibrary.class).newInstance();
jtulach@221
    33
            }
jtulach@221
    34
            return wordLibrary;
jtulach@221
    35
        } catch (Exception ex) {
jtulach@221
    36
            throw new IllegalStateException(ex);
jtulach@221
    37
        }
jtulach@221
    38
    }
jtulach@221
    39
jtulach@221
    40
    @Override
jtulach@221
    41
    protected Scrambler getScrambler() {
jtulach@221
    42
        try {
jtulach@221
    43
            if (scrambler == null) {
jtulach@221
    44
                scrambler = loadImpl(Scrambler.class).newInstance();
jtulach@221
    45
            }
jtulach@221
    46
            return scrambler;
jtulach@221
    47
        } catch (Exception ex) {
jtulach@221
    48
            throw new IllegalStateException(ex);
jtulach@221
    49
        }
jtulach@221
    50
    }
jtulach@221
    51
}