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
     1 package org.apidesign.anagram.app.register;
     2 
     3 import java.util.logging.Level;
     4 import java.util.logging.Logger;
     5 import org.apidesign.anagram.api.Scrambler;
     6 import org.apidesign.anagram.api.WordLibrary;
     7 import org.apidesign.anagram.gui.Anagrams;
     8 
     9 public final class AnagramsWithProperties extends Anagrams {
    10     private WordLibrary wordLibrary;
    11     private Scrambler scrambler;
    12     
    13     public AnagramsWithProperties() {
    14     }
    15     
    16     private static <T> Class<? extends T> loadImpl(Class<T> clazz) throws ClassNotFoundException {
    17         String implName = System.getProperty(clazz.getName());
    18         assert implName != null;
    19         ClassLoader loader = Thread.currentThread().getContextClassLoader();
    20         if (loader == null) {
    21             loader = AnagramsWithProperties.class.getClassLoader();
    22         }
    23         Class<?> impl = Class.forName(implName, false, loader);
    24         return impl.asSubclass(clazz);
    25     }
    26     
    27 
    28     @Override
    29     protected WordLibrary getWordLibrary() {
    30         try {
    31             if (wordLibrary == null) {
    32                 wordLibrary = loadImpl(WordLibrary.class).newInstance();
    33             }
    34             return wordLibrary;
    35         } catch (Exception ex) {
    36             throw new IllegalStateException(ex);
    37         }
    38     }
    39 
    40     @Override
    41     protected Scrambler getScrambler() {
    42         try {
    43             if (scrambler == null) {
    44                 scrambler = loadImpl(Scrambler.class).newInstance();
    45             }
    46             return scrambler;
    47         } catch (Exception ex) {
    48             throw new IllegalStateException(ex);
    49         }
    50     }
    51 }