felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pde...@apache.org
Subject svn commit: r960397 - in /felix/trunk/dependencymanager/samples.annotation: ./ src/main/java/org/apache/felix/dm/samples/annotation/
Date Sun, 04 Jul 2010 21:07:59 GMT
Author: pderop
Date: Sun Jul  4 21:07:59 2010
New Revision: 960397

URL: http://svn.apache.org/viewvc?rev=960397&view=rev
Log:
fixed dictionary aspect, which is now using the "(lang=en)" filter

Modified:
    felix/trunk/dependencymanager/samples.annotation/README
    felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryAspect.java
    felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryImpl.java
    felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java

Modified: felix/trunk/dependencymanager/samples.annotation/README
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/samples.annotation/README?rev=960397&r1=960396&r2=960397&view=diff
==============================================================================
--- felix/trunk/dependencymanager/samples.annotation/README (original)
+++ felix/trunk/dependencymanager/samples.annotation/README Sun Jul  4 21:07:59 2010
@@ -9,10 +9,11 @@ Sample description:
   word existence.
   
   A DictionaryService is defined using a FactoryConfigurationAdapterService annotation, allowing
to
-  instantiate many "DictionaryService" service instances from webconsole. This annotation
actually
+  instantiate many "DictionaryService" 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.

-  Each time you instantiate a factory configuration whose factory pid is "Dictionary Services",

+  informations in the annotation, allowing to configure the DictionaryService words and language
from 
+  WebConsole. 
+  Each time you instantiate a factory configuration whose factory pid equals "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 "Dictionary Services" Factory
PID).  
@@ -20,11 +21,8 @@ Sample description:
   "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 shows how to use a ConfigurationDependency
annotation, 
-  allowing to configure some words from webconsole. A ConfigurationDependency actually registers
a ManagedService 
-  object in the Registry, which also implements a MetaTypeProvider service for metatype support.
-
+  decorates the EnglishDictionary service, by adding some additional words to it. 
+  
 How to test:
 
   1) Install the following bundles:
@@ -42,14 +40,15 @@ How to test:
   2) Start felix
   3) Go to web console: in the Configuration panel, 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
+     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 gogo 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.
+  6) You can also click on the "Aspect Dictionary" button, in order to decorate the english
dictionary with 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.
+     Then click on Save. At this point, the English DictionaryService will be decorated with
the aspect service.
      So, now, if you type "spellcheck aspect", then the message: "word aspect is correct"
should be displayed. 

Modified: felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryAspect.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryAspect.java?rev=960397&r1=960396&r2=960397&view=diff
==============================================================================
--- felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryAspect.java
(original)
+++ felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryAspect.java
Sun Jul  4 21:07:59 2010
@@ -1,19 +1,12 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
+ * required by applicable law or agreed to in writing, software distributed under the License
is
+ * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express
+ * or implied. See the License for the specific language governing permissions and limitations
  * under the License.
  */
 package org.apache.felix.dm.samples.annotation;
@@ -25,13 +18,14 @@ import org.apache.felix.dm.annotation.ap
 import org.apache.felix.dm.annotation.api.PropertyMetaData;
 import org.apache.felix.dm.annotation.api.ConfigurationDependency;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
 import org.osgi.service.log.LogService;
 
 /**
- * This aspect applies to all available Dictionary Services, and checks some custom words,
configurable from
- * config admin.
+ * This aspect applies to the English DictionaryService, and allow to decorate it with some
+ * custom english words, which are configurable from webconsole.
  */
-@AspectService( ranking = 10 )
+@AspectService(ranking = 10, filter = "(lang=en)")
 public class DictionaryAspect implements DictionaryService
 {
     /**
@@ -40,53 +34,72 @@ public class DictionaryAspect implements
     private volatile DictionaryService m_originalDictionary;
 
     /**
-     * We store all configured words in a thread-safe data structure, because ConfigAdmin
-     * may invoke our updated method at any time.
+     * We store all configured words in a thread-safe data structure, because ConfigAdmin
may
+     * invoke our updated method at any time.
      */
     private CopyOnWriteArrayList<String> m_words = new CopyOnWriteArrayList<String>();
-    
+
     /**
-     * We'll use the OSGi log service for logging. If no log service is available, then we'll
use a NullObject.
+     * We'll use the OSGi log service for logging. If no log service is available, then we'll
+     * use a NullObject.
      */
     @ServiceDependency(required = false)
     private LogService m_log;
 
     /**
-     * Defines a configuration dependency for retrieving our custom words (by default, our
PID is our full class name).
-     * This annotation actually provides a ManagedService into the registry, and you can
specify meta information regarding
-     * all the configuration properties (required by webconsole).
+     * Defines a configuration dependency for retrieving our english custom words (by default,
+     * our PID is our full class name).
      */
     @ConfigurationDependency(
-        heading="Aspect Dictionary", 
-        description="Declare here some words to check",
-        propagate=false,
-        metadata={
-            @PropertyMetaData(
-                heading="Dictionary aspect words",
-                description="Declare here the list of words supported by this dictionary
aspect. ",
-                defaults={"aspect"},
-                id="words",
-                cardinality=Integer.MAX_VALUE)
+        propagate = false, 
+        heading = "Aspect Dictionary",
+        description = "Declare here some additional english words", 
+        metadata = { 
+            @PropertyMetaData(heading = "Dictionary aspect words", 
+                              description = "Declare here the list of english words to be
added into the default english dictionary",
+                              defaults = { "aspect" }, 
+                              id = "words", 
+                              cardinality = Integer.MAX_VALUE) 
         }
     )
-    protected void updated(Dictionary<String, ?> config) {
+    protected void updated(Dictionary<String, ?> config)
+    {
         m_words.clear();
         String[] words = (String[]) config.get("words");
-        for (String word : words) {
+        for (String word : words)
+        {
             m_words.add(word);
         }
     }
 
     /**
+     * Our Aspect Service is starting and is about to be registered in the OSGi regsitry.
+     */
+    @Start
+    protected void start()
+    {
+        m_log.log(LogService.LOG_INFO, "Starting aspect Dictionary with words: " + m_words
+                + "; original dictionary service=" + m_originalDictionary);
+    }
+
+    /**
      * Checks if a word is found from our custom word list. if not, delegate to the decorated
      * dictionary.
      */
     public boolean checkWord(String word)
     {
-        m_log.log(LogService.LOG_DEBUG, "DictionaryAspect: checking word " + word);
-        if ("aspect".equals(word)) {
+        m_log.log(LogService.LOG_INFO, "DictionaryAspect: checking word " + word
+                + " (original dictionary=" + m_originalDictionary + ")");
+        if (m_words.contains(word))
+        {
             return true;
         }
         return m_originalDictionary.checkWord(word);
     }
+
+    public String toString()
+    {
+        return "DictionaryAspect: words=" + m_words + "; original dictionary="
+                + m_originalDictionary;
+    }
 }

Modified: felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryImpl.java?rev=960397&r1=960396&r2=960397&view=diff
==============================================================================
--- felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryImpl.java
(original)
+++ felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/DictionaryImpl.java
Sun Jul  4 21:07:59 2010
@@ -23,12 +23,15 @@ import java.util.concurrent.CopyOnWriteA
 
 import org.apache.felix.dm.annotation.api.PropertyMetaData;
 import org.apache.felix.dm.annotation.api.FactoryConfigurationAdapterService;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
+import org.osgi.service.log.LogService;
 
 /**
  * A Dictionary Service. This service uses a FactoryConfigurationAdapterService annotation,

  * allowing to instantiate this service from webconsole. This annotation will actually register
- * a ManagedServiceFactory in the registry, and also supports meta types for describing metadata
of
- * all configuration properties.
+ * a ManagedServiceFactory in the registry, and also supports meta types for configuring
this
+ * service from WebConsole.
  * 
  * You must configure at least one Dictionary from web console, since the SpellCheck won't
start if no Dictionary
  * Service is available.
@@ -46,7 +49,7 @@ import org.apache.felix.dm.annotation.ap
                 "This property will be propagated with the Dictionary Service properties.",
             defaults={"en"},
             id="lang",
-            cardinality=1),
+            cardinality=0),
         @PropertyMetaData(
             heading="Dictionary words",
             description="Declare here the list of words supported by this dictionary.",
@@ -64,16 +67,38 @@ public class DictionaryImpl implements D
     private CopyOnWriteArrayList<String> m_words = new CopyOnWriteArrayList<String>();
     
     /**
+     * We'll use the OSGi log service for logging. If no log service is available, then we'll
use a NullObject.
+     */
+    @ServiceDependency(required = false)
+    private LogService m_log;
+
+    /**
+     * Our Dictionary language.
+     */
+    private String m_lang;
+
+    /**
      * Our service will be initialized from ConfigAdmin.
      * @param config The configuration where we'll lookup our words list (key="words").
      */
     protected void updated(Dictionary<String, ?> config) {
+        m_lang = (String) config.get("lang");
         m_words.clear();
         String[] words = (String[]) config.get("words");
         for (String word : words) {
             m_words.add(word);
         }
     }
+
+    /**
+     * A new Dictionary Service is starting (because a new factory configuration has been
created
+     * from webconsole).
+     */
+    @Start
+    protected void start() 
+    {
+        m_log.log(LogService.LOG_INFO, "Starting Dictionary Service with language: " + m_lang);
+    }
            
     /**
      * Check if a word exists if the list of words we have been configured from ConfigAdmin/WebConsole.
@@ -82,4 +107,10 @@ public class DictionaryImpl implements D
     {
         return m_words.contains(word);
     }
+    
+    @Override
+    public String toString() 
+    {
+        return "Dictionary: language=" + m_lang + ", words=" + m_words;
+    }
 }

Modified: felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java?rev=960397&r1=960396&r2=960397&view=diff
==============================================================================
--- felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
(original)
+++ felix/trunk/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
Sun Jul  4 21:07:59 2010
@@ -92,7 +92,7 @@ public class SpellChecker
     @Descriptor("checks if word is found from an available dictionary")
     public void spellcheck(@Descriptor("the word to check")String word)
     {
-        m_log.log(LogService.LOG_DEBUG, "Checking spelling of word \"" + word
+        m_log.log(LogService.LOG_INFO, "Checking spelling of word \"" + word
             + "\" using the following dictionaries: " + m_dictionaries);
 
         for (DictionaryService dictionary : m_dictionaries)



Mime
View raw message