Example how lookup can listen to and react to changes
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:08:31 +0200
changeset 250c6f1ccdd37f3
parent 249 a3a5034a7b8f
child 251 266127621c8f
Example how lookup can listen to and react to changes
samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java
samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java
samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java
samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java
     1.1 --- a/samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java	Sat Jun 14 10:08:28 2008 +0200
     1.2 +++ b/samples/componentinjection/anagram-modular/src-app-lookup/org/apidesign/anagram/app/lookup/AnagramsWithLookup.java	Sat Jun 14 10:08:31 2008 +0200
     1.3 @@ -6,6 +6,8 @@
     1.4  import org.openide.util.Lookup;
     1.5  
     1.6  // BEGIN: anagram.lookup.Anagrams
     1.7 +import org.openide.util.LookupEvent;
     1.8 +import org.openide.util.LookupListener;
     1.9  class AnagramsWithLookup extends Anagrams {
    1.10  
    1.11      public AnagramsWithLookup() {
    1.12 @@ -20,6 +22,24 @@
    1.13      protected Scrambler getScrambler() {
    1.14          return Lookup.getDefault().lookup(Scrambler.class);
    1.15      }
    1.16 -
    1.17 +// FINISH: anagram.lookup.Anagrams
    1.18 +    
    1.19 +    private Lookup.Result<Scrambler> scramblers = Lookup.getDefault().lookupResult(Scrambler.class);
    1.20 +// BEGIN: anagram.lookup.Listeners      
    1.21 +    private Lookup.Result<WordLibrary> libraries 
    1.22 +        = Lookup.getDefault().lookupResult(WordLibrary.class);
    1.23 +    private LookupListener listener = new LookupListener() {
    1.24 +        public void resultChanged(LookupEvent ev) {
    1.25 +            initWord();
    1.26 +        }
    1.27 +    };
    1.28 +    {
    1.29 +        libraries.addLookupListener(listener);
    1.30 +// FINISH: anagram.lookup.Listeners      
    1.31 +        
    1.32 +        scramblers.addLookupListener(listener);
    1.33 +        // initialize the results for listening
    1.34 +        libraries.allItems();
    1.35 +        scramblers.allItems();
    1.36 +    }
    1.37  }
    1.38 -// END: anagram.lookup.Anagrams
     2.1 --- a/samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java	Sat Jun 14 10:08:28 2008 +0200
     2.2 +++ b/samples/componentinjection/anagram-modular/src-gui/org/apidesign/anagram/gui/Anagrams.java	Sat Jun 14 10:08:31 2008 +0200
     2.3 @@ -199,7 +199,8 @@
     2.4          int index = wordIdx % words.length;
     2.5          
     2.6          original = words[index];
     2.7 -        scrambled = getScrambler().scramble(original);
     2.8 +        Scrambler scrambler = getScrambler();
     2.9 +        scrambled = scrambler != null ? scrambler.scramble(original) : original;
    2.10          
    2.11          scrambledWord.setText(scrambled);
    2.12      }
     3.1 --- a/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java	Sat Jun 14 10:08:28 2008 +0200
     3.2 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java	Sat Jun 14 10:08:31 2008 +0200
     3.3 @@ -1,11 +1,47 @@
     3.4  package org.apidesign.anagram.app.lookup;
     3.5  
     3.6 +import org.apidesign.anagram.api.WordLibrary;
     3.7  import org.apidesign.anagram.gui.*;
     3.8 -import org.apidesign.anagram.app.lookup.AnagramsWithLookup;
     3.9 +import static org.junit.Assert.*;
    3.10 +import org.junit.Test;
    3.11 +import org.netbeans.junit.MockServices;
    3.12  
    3.13  public class AnagramsWithLookupTest extends AnagramsTestBase {
    3.14      @Override
    3.15      protected Anagrams create() {
    3.16          return new AnagramsWithLookup();
    3.17      }
    3.18 +    
    3.19 +    @Test public void testChangesInTheRegistrationAreReflected() {
    3.20 +        Anagrams ui = create();
    3.21 +        
    3.22 +        MockServices.setServices(FirstMockWordLibrary.class);
    3.23 +        ui.display();
    3.24 +        
    3.25 +        assertEquals(
    3.26 +            "Original word has to be from FirstMockWordLibrary",
    3.27 +            "1st", ui.getOriginalWord()
    3.28 +        );
    3.29 +        
    3.30 +        MockServices.setServices(SecondMockWordLibrary.class);
    3.31 +        
    3.32 +        assertEquals(
    3.33 +            "Original word has to be from new library now",
    3.34 +            "2nd", ui.getOriginalWord()
    3.35 +        );
    3.36 +    }
    3.37 +    
    3.38 +    public static final class FirstMockWordLibrary implements WordLibrary {
    3.39 +        public String[] getWords() {
    3.40 +            return new String[] { "1st" };
    3.41 +        }
    3.42 +    }
    3.43 +
    3.44 +    public static final class SecondMockWordLibrary implements WordLibrary {
    3.45 +        public String[] getWords() {
    3.46 +            return new String[] { "2nd" };
    3.47 +        }
    3.48 +    }
    3.49 +    
    3.50 +    
    3.51  }
     4.1 --- a/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java	Sat Jun 14 10:08:28 2008 +0200
     4.2 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java	Sat Jun 14 10:08:31 2008 +0200
     4.3 @@ -2,6 +2,7 @@
     4.4  
     4.5  import org.apidesign.anagram.api.Scrambler;
     4.6  import org.apidesign.anagram.api.WordLibrary;
     4.7 +import org.junit.Before;
     4.8  import static org.junit.Assert.*;
     4.9  import org.junit.Test;
    4.10  import org.netbeans.junit.MockServices;
    4.11 @@ -10,6 +11,11 @@
    4.12  
    4.13      protected abstract Anagrams create();
    4.14      
    4.15 +    @Before
    4.16 +    public void cleanUpServices() {
    4.17 +        MockServices.setServices();
    4.18 +    }
    4.19 +    
    4.20      @Test public void testInjectionOfServices() throws Exception {
    4.21          Anagrams ui = create();
    4.22