samples/componentinjection/anagram-modular/src-app-property/org/apidesign/anagram/app/property/AnagramsWithProperties.java
1 package org.apidesign.anagram.app.register;
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;
9 public final class AnagramsWithProperties extends Anagrams {
10 private WordLibrary wordLibrary;
11 private Scrambler scrambler;
13 public AnagramsWithProperties() {
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();
21 loader = AnagramsWithProperties.class.getClassLoader();
23 Class<?> impl = Class.forName(implName, false, loader);
24 return impl.asSubclass(clazz);
29 protected WordLibrary getWordLibrary() {
31 if (wordLibrary == null) {
32 wordLibrary = loadImpl(WordLibrary.class).newInstance();
35 } catch (Exception ex) {
36 throw new IllegalStateException(ex);
41 protected Scrambler getScrambler() {
43 if (scrambler == null) {
44 scrambler = loadImpl(Scrambler.class).newInstance();
47 } catch (Exception ex) {
48 throw new IllegalStateException(ex);