This sample illustrates the usage of the new DependencyManager annotations.

Sample description:

  This sample shows a basic "SpellChecker" application which provides a Felix "spellcheck" GOGO shell
  command. The GOGO "spellcheck" command accepts a string as parameter, which is checked for proper 
  existance. The SpellChecker class has a required/multiple (1..N) dependency over every available 
  "DictionaryService" services, which are internally used by the SpellChecker command, when checking 
  word existance).
  
  A DictionaryService is defined using a FactoryConfigurationAdapterService annotation, allowing to
  instantiate many "DictionaryService" service instances from webconsole. This annotation actually
  registers a ManagedServiceFactory into the Registry, and you can specify some meta type
  informations in the annotation, allowing to display the configuration parameters from WebConsole. 
  From WebConsole, each time you instantiate a factory configuration from the pid "Dictionary
  Services", then a corresponding "DictionaryService" service is instantiated and is then injected
  into the SpellChecker service. So, before testing, you first have to go to webconsole
  Configuration panel, and specify some dictionaries (see the DictionaryService Factory PID).  
  Then, go to the felix GOGO shell, and you will then see the "spellcheck" command (when typing
  "help"). 
  
  Notice that in the sample, you will also find a DictionaryAspect Service (DictionaryAspect.java), which
  decorates the EnglishDictionary service, by adding some additional words to *all* provided 
  DictionaryService services. The DictionaryAspect also show how to use a ConfigurationDependency annotation, 
  allowing to configure the words from webconsole. A ConfigurationDependency actually registers a ManagedService object
  in the Registry, which also implements a MetaTypeProvider service for metatype support.

How to test:

  1) Install the following bundles:

     org.apache.felix.configadmin
     org.apache.felix.metatype
     org.apache.felix.http.jetty
     org.apache.felix.webconsole

     org.apache.felix.dependencymanager
     org.apache.felix.dependencymanager.shell
     org.apache.felix.dependencymanager.runtime
     org.apache.felix.dependencymanager.samples.annotation

  2) Start felix
  3) Go to web console, in the Configuration pannel, and edit the "Dictionary Services"
     Configuration, add some dictionaries. By default, an English dictionary is displayed. Just 
     click on "save", then click on your refresh web browser: you will see a new dictionary service
     instance. At this point, a DictionaryService service will be enabled (with the service property "lang=en"),  
     and the SpellCheck component will be injected with it. Then you should see the "spellcheck"
     command, when typing  "help" on the shell. 

  5) Just type "spellcheck hello", and the command should reply a fantastic message, like "word hello is correct".
  
  6) You can also click on the "Aspect Dictionary" button, in order to decorate *all* Dictionaries using some custom words.
     By default, the "aspect" word is pre configured, but you can click on the "+" button in order to add more words. 
     Then click on Save. At this point, all DictionaryService instances will be decorated with the aspect service.
     So, now, if you type "spellcheck aspect", then the message: "word aspect is correct" should be displayed. 

