# HG changeset patch # User Jaroslav Tulach # Date 1213430835 -7200 # Node ID 984a01bbac90394fe80af19fed3759a7d8fe2b09 # Parent c62f8dacf5536a6452220ab4f0911a3b28e45438 Showing how such a general registry might look like diff -r c62f8dacf553 -r 984a01bbac90 samples/componentinjection/anagram-modular/build.xml --- a/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:07:11 2008 +0200 +++ b/samples/componentinjection/anagram-modular/build.xml Sat Jun 14 10:07:15 2008 +0200 @@ -24,6 +24,10 @@ + + + + @@ -53,6 +57,12 @@ + + + + + + diff -r c62f8dacf553 -r 984a01bbac90 samples/componentinjection/anagram-modular/nbproject/project.xml --- a/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:07:11 2008 +0200 +++ b/samples/componentinjection/anagram-modular/nbproject/project.xml Sat Jun 14 10:07:15 2008 +0200 @@ -40,6 +40,12 @@ UTF-8 + + java + src-app-register-general + UTF-8 + + java src-app-property @@ -111,6 +117,10 @@ src-app-register + + src-app-register-general + + src-app-property @@ -163,6 +173,12 @@ 1.5 + src-app-register-general + src-api:src-scrambler-simple:src-word-static:src-gui + build/app-register/classes + 1.5 + + src-app-property src-api:src-scrambler-simple:src-word-static:src-gui build/app-property/classes diff -r c62f8dacf553 -r 984a01bbac90 samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/AnagramsWithRegistry.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/AnagramsWithRegistry.java Sat Jun 14 10:07:15 2008 +0200 @@ -0,0 +1,22 @@ +package org.apidesign.anagram.app.registergeneral; + +import org.apidesign.anagram.api.Scrambler; +import org.apidesign.anagram.api.WordLibrary; +import org.apidesign.anagram.gui.Anagrams; + +class AnagramsWithRegistry extends Anagrams { + + public AnagramsWithRegistry() { + } + + @Override + protected WordLibrary getWordLibrary() { + return Registry.find(WordLibrary.class); + } + + @Override + protected Scrambler getScrambler() { + return Registry.find(Scrambler.class); + } + +} diff -r c62f8dacf553 -r 984a01bbac90 samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Main.java Sat Jun 14 10:07:15 2008 +0200 @@ -0,0 +1,19 @@ +package org.apidesign.anagram.app.registergeneral; + +import org.apidesign.anagram.api.UI; +import org.apidesign.anagram.scramblersimple.SimpleScrambler; +import org.apidesign.anagram.wordstatic.StaticWordLibrary; + +public final class Main { + private Main() { } + + public static void main(String[] args) throws Exception { + Registry.registerClass(SimpleScrambler.class); + Registry.registerClass(StaticWordLibrary.class); + + UI ui = new AnagramsWithRegistry(); + ui.display(); + } + + +} diff -r c62f8dacf553 -r 984a01bbac90 samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Registry.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Registry.java Sat Jun 14 10:07:15 2008 +0200 @@ -0,0 +1,32 @@ +package org.apidesign.anagram.app.registergeneral; + +import java.util.LinkedHashMap; +import java.util.Map; + +public final class Registry { + private static Map,Object[]> instances = new LinkedHashMap,Object[]>(); + + private Registry() { + } + + public static void registerClass(Class impl) { + instances.put(impl, new Object[1]); + } + + public static T find(Class whatType) { + for (Map.Entry, Object[]> entry : instances.entrySet()) { + if (whatType.isAssignableFrom(entry.getKey())) { + if (entry.getValue()[0] == null) { + try { + entry.getValue()[0] = entry.getKey().newInstance(); + } catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + return whatType.cast(entry.getValue()[0]); + } + } + return null; + } +} +