samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java
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 +}