# HG changeset patch # User Jaroslav Tulach # Date 1213430911 -7200 # Node ID c6f1ccdd37f36fccb5ca98935f89b2a38800103a # Parent a3a5034a7b8f916c8f05e1b5857debfc97e0a2bb Example how lookup can listen to and react to changes diff -r a3a5034a7b8f -r c6f1ccdd37f3 samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java --- a/samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java Sat Jun 14 10:08:28 2008 +0200 +++ b/samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java Sat Jun 14 10:08:31 2008 +0200 @@ -6,6 +6,8 @@ import org.openide.util.Lookup; // BEGIN: anagram.lookup.Anagrams +import org.openide.util.LookupEvent; +import org.openide.util.LookupListener; class AnagramsWithLookup extends Anagrams { public AnagramsWithLookup() { @@ -20,6 +22,24 @@ protected Scrambler getScrambler() { return Lookup.getDefault().lookup(Scrambler.class); } - +// FINISH: anagram.lookup.Anagrams + + private Lookup.Result scramblers = Lookup.getDefault().lookupResult(Scrambler.class); +// BEGIN: anagram.lookup.Listeners + private Lookup.Result libraries + = Lookup.getDefault().lookupResult(WordLibrary.class); + private LookupListener listener = new LookupListener() { + public void resultChanged(LookupEvent ev) { + initWord(); + } + }; + { + libraries.addLookupListener(listener); +// FINISH: anagram.lookup.Listeners + + scramblers.addLookupListener(listener); + // initialize the results for listening + libraries.allItems(); + scramblers.allItems(); + } } -// END: anagram.lookup.Anagrams diff -r a3a5034a7b8f -r c6f1ccdd37f3 samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java --- a/samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java Sat Jun 14 10:08:28 2008 +0200 +++ b/samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java Sat Jun 14 10:08:31 2008 +0200 @@ -199,7 +199,8 @@ int index = wordIdx % words.length; original = words[index]; - scrambled = getScrambler().scramble(original); + Scrambler scrambler = getScrambler(); + scrambled = scrambler != null ? scrambler.scramble(original) : original; scrambledWord.setText(scrambled); } diff -r a3a5034a7b8f -r c6f1ccdd37f3 samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java --- a/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java Sat Jun 14 10:08:28 2008 +0200 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java Sat Jun 14 10:08:31 2008 +0200 @@ -1,11 +1,47 @@ package org.apidesign.anagram.app.lookup; +import org.apidesign.anagram.api.WordLibrary; import org.apidesign.anagram.gui.*; -import org.apidesign.anagram.app.lookup.AnagramsWithLookup; +import static org.junit.Assert.*; +import org.junit.Test; +import org.netbeans.junit.MockServices; public class AnagramsWithLookupTest extends AnagramsTestBase { @Override protected Anagrams create() { return new AnagramsWithLookup(); } + + @Test public void testChangesInTheRegistrationAreReflected() { + Anagrams ui = create(); + + MockServices.setServices(FirstMockWordLibrary.class); + ui.display(); + + assertEquals( + "Original word has to be from FirstMockWordLibrary", + "1st", ui.getOriginalWord() + ); + + MockServices.setServices(SecondMockWordLibrary.class); + + assertEquals( + "Original word has to be from new library now", + "2nd", ui.getOriginalWord() + ); + } + + public static final class FirstMockWordLibrary implements WordLibrary { + public String[] getWords() { + return new String[] { "1st" }; + } + } + + public static final class SecondMockWordLibrary implements WordLibrary { + public String[] getWords() { + return new String[] { "2nd" }; + } + } + + } diff -r a3a5034a7b8f -r c6f1ccdd37f3 samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java --- a/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java Sat Jun 14 10:08:28 2008 +0200 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java Sat Jun 14 10:08:31 2008 +0200 @@ -2,6 +2,7 @@ import org.apidesign.anagram.api.Scrambler; import org.apidesign.anagram.api.WordLibrary; +import org.junit.Before; import static org.junit.Assert.*; import org.junit.Test; import org.netbeans.junit.MockServices; @@ -10,6 +11,11 @@ protected abstract Anagrams create(); + @Before + public void cleanUpServices() { + MockServices.setServices(); + } + @Test public void testInjectionOfServices() throws Exception { Anagrams ui = create();