Author: buildbot
Date: Fri Mar  6 09:45:59 2015
New Revision: 942560

Log:
Staging update by buildbot for felix

Modified:
    websites/staging/felix/trunk/content/   (props changed)
    
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/guides/annotations.html

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Mar  6 09:45:59 2015
@@ -1 +1 @@
-1664555
+1664572

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/guides/annotations.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/guides/annotations.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/guides/annotations.html
 Fri Mar  6 09:45:59 2015
@@ -223,7 +223,7 @@ you want, from ConfigAdmin ...</p>
 <span class="cm">    * We store all configured words in a thread-safe data 
structure, because ConfigAdmin</span>
 <span class="cm">    * may invoke our updated method at any time.</span>
 <span class="cm">    */</span>
-   <span class="kd">private</span> <span 
class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;</span> <span 
class="n">m_words</span> <span class="o">=</span> <span class="k">new</span> 
<span class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;();</span>
+   <span class="kd">private</span> <span class="kd">final</span> <span 
class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;</span> <span 
class="n">m_words</span> <span class="o">=</span> <span class="k">new</span> 
<span class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;();</span>
 
    <span class="cm">/**</span>
 <span class="cm">    * Our Dictionary language.</span>
@@ -264,33 +264,54 @@ properties configured by ConfigAdmin. Th
 properties are changing.  Every properties are propagated to our service 
properties, 
 unless the  properties starting with a dot ("."). Configuration properties 
starting  with 
 a dot (".") are considered private and are not propagated.</p>
-<p>Notice that this annotation also supports optional meta type attributes, 
which allow to 
-customize the ConfigAdmin GUI, with custom  messages, like heading/property 
title,
-property type, property  description, etc ...). So, let's revisit our 
DisctionaryImpl 
-service,  but this time with meta type support:</p>
-<div class="codehilite"><pre><span 
class="nd">@FactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">factoryPid</span><span 
class="o">=</span><span 
class="s">&quot;DictionaryImplFactoryPid&quot;</span><span class="o">,</span>
-    <span class="n">propagate</span><span class="o">=</span><span 
class="kc">true</span><span class="o">,</span>
-    <span class="n">updated</span><span class="o">=</span><span 
class="s">&quot;updated&quot;</span><span class="o">,</span>
-    <span class="n">heading</span><span class="o">=</span><span 
class="s">&quot;Dictionary Services&quot;</span><span class="o">,</span>
-    <span class="n">description</span><span class="o">=</span><span 
class="s">&quot;Declare here some Dictionary instances, allowing to 
instantiates some DictionaryService services for a given dictionary 
language&quot;</span><span class="o">,</span>
-    <span class="n">metadata</span><span class="o">={</span>
-       <span class="nd">@PropertyMetaData</span><span class="o">(</span>
-           <span class="n">heading</span><span class="o">=</span><span 
class="s">&quot;Dictionary Language&quot;</span><span class="o">,</span>
-           <span class="n">description</span><span class="o">=</span><span 
class="s">&quot;Declare here the language supported by this dictionary. 
&quot;</span> <span class="o">+</span>
-              <span class="s">&quot;This property will be propagated with the 
Dictionary Service properties.&quot;</span><span class="o">,</span>
-           <span class="n">defaults</span><span class="o">={</span><span 
class="s">&quot;en&quot;</span><span class="o">},</span>
-           <span class="n">id</span><span class="o">=</span><span 
class="s">&quot;lang&quot;</span><span class="o">,</span>
-           <span class="n">cardinality</span><span class="o">=</span><span 
class="mi">0</span><span class="o">),</span>
-       <span class="nd">@PropertyMetaData</span><span class="o">(</span>
-           <span class="n">heading</span><span class="o">=</span><span 
class="s">&quot;Dictionary words&quot;</span><span class="o">,</span>
-           <span class="n">description</span><span class="o">=</span><span 
class="s">&quot;Declare here the list of words supported by this 
dictionary.&quot;</span><span class="o">,</span>
-           <span class="n">defaults</span><span class="o">={</span><span 
class="s">&quot;hello&quot;</span><span class="o">,</span> <span 
class="s">&quot;world&quot;</span><span class="o">},</span>
-           <span class="n">id</span><span class="o">=</span><span 
class="s">&quot;words&quot;</span><span class="o">,</span>
-           <span class="n">cardinality</span><span class="o">=</span><span 
class="n">Integer</span><span class="o">.</span><span 
class="na">MAX_VALUE</span><span class="o">)</span>
-    <span class="o">}</span>
-<span class="o">)</span>
+<p>Notice that you can mix standard bnd metatype annotations with DM 
annotations, in order
+describe configurations meta data (default values, property labels, etc ... 
see  http://www.aqute.biz/Bnd/MetaType).
+So, let's revisit our DisctionaryImpl service,  but this time with meta type 
support:</p>
+<p>First, we define an interface for describing our configuration metadata, 
with bnd metatype annotations:</p>
+<div class="codehilite"><pre><span class="kn">import</span> <span 
class="nn">java.util.List</span><span class="o">;</span>
+
+<span class="kn">import</span> <span 
class="nn">aQute.bnd.annotation.metatype.Meta.AD</span><span class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">aQute.bnd.annotation.metatype.Meta.OCD</span><span class="o">;</span>
+
+<span class="nd">@OCD</span><span class="o">(</span><span 
class="n">name</span><span class="o">=</span><span class="s">&quot;Spell 
Checker Dictionary (annotation)&quot;</span><span class="o">,</span> <span 
class="n">factory</span> <span class="o">=</span> <span 
class="kc">true</span><span class="o">,</span>     
+     <span class="n">description</span> <span class="o">=</span> <span 
class="s">&quot;Declare here some Dictionary instances, &quot;</span><span 
class="o">)</span>
+<span class="kd">public</span> <span class="kd">interface</span> <span 
class="nc">DictionaryConfiguration</span> <span class="o">{</span>
+    <span class="nd">@AD</span><span class="o">(</span><span 
class="n">description</span> <span class="o">=</span> <span 
class="s">&quot;Describes the dictionary language&quot;</span><span 
class="o">,</span> <span class="n">deflt</span> <span class="o">=</span> <span 
class="s">&quot;en&quot;</span><span class="o">)</span>
+    <span class="n">String</span> <span class="nf">lang</span><span 
class="o">();</span>
+
+    <span class="nd">@AD</span><span class="o">(</span><span 
class="n">description</span> <span class="o">=</span> <span 
class="s">&quot;Declare here the list of words supported by this dictionary. 
This properties starts with a Dot and won&#39;t be propagated with Dictionary 
OSGi service properties&quot;</span><span class="o">)</span>
+    <span class="n">List</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;</span> <span 
class="n">words</span><span class="o">();</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Next, here is our DictionaryImpl that will use the bnd "Configurable" 
helper in order to retrieve the actual configuration:</p>
+<div class="codehilite"><pre><span class="kn">import</span> <span 
class="nn">org.apache.felix.dm.annotation.api.FactoryConfigurationAdapterService</span><span
 class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">org.apache.felix.dm.annotation.api.ServiceDependency</span><span 
class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">org.apache.felix.dm.annotation.api.Start</span><span 
class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">org.osgi.service.log.LogService</span><span class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">aQute.bnd.annotation.metatype.Configurable</span><span 
class="o">;</span>
+
+<span class="nd">@FactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">factoryPidClass</span> <span 
class="o">=</span> <span class="n">DictionaryConfiguration</span><span 
class="o">.</span><span class="na">class</span><span class="o">,</span> <span 
class="n">propagate</span> <span class="o">=</span> <span 
class="kc">true</span><span class="o">,</span> <span class="n">updated</span> 
<span class="o">=</span> <span class="s">&quot;updated&quot;</span><span 
class="o">)</span><span class="n">factoryPid</span><span 
class="o">=</span><span 
class="s">&quot;DictionaryImplFactoryPid&quot;</span><span class="o">)</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">DictionaryImpl</span> <span class="kd">implements</span> <span 
class="n">DictionaryService</span> <span class="o">{</span>
-    <span class="o">...</span> <span class="n">code</span> <span 
class="n">same</span> <span class="n">as</span> <span class="n">before</span>
+    <span class="kd">private</span> <span class="kd">final</span> <span 
class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;</span> <span 
class="n">m_words</span> <span class="o">=</span> <span class="k">new</span> 
<span class="n">CopyOnWriteArrayList</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">&gt;();</span>
+
+    <span class="kd">protected</span> <span class="kt">void</span> <span 
class="nf">updated</span><span class="o">(</span><span 
class="n">Dictionary</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span class="o">?&gt;</span> 
<span class="n">config</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span><span 
class="n">config</span> <span class="o">!=</span> <span 
class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+            <span class="c1">// We use the bnd &quot;Configurable&quot; helper 
in order to get an implementation for our DictionaryConfiguration 
interface.</span>
+        <span class="n">DictionaryConfiguration</span> <span 
class="n">cnf</span> <span class="o">=</span> <span 
class="n">Configurable</span><span class="o">.</span><span 
class="na">createConfigurable</span><span class="o">(</span><span 
class="n">DictionaryConfiguration</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span 
class="n">config</span><span class="o">);</span>
+
+            <span class="n">m_lang</span> <span class="o">=</span> <span 
class="n">cnf</span><span class="o">.</span><span class="na">lang</span><span 
class="o">();</span>
+            <span class="n">m_words</span><span class="o">.</span><span 
class="na">clear</span><span class="o">();</span>
+            <span class="k">for</span> <span class="o">(</span><span 
class="n">String</span> <span class="n">word</span> <span class="o">:</span> 
<span class="n">cnf</span><span class="o">.</span><span 
class="na">words</span><span class="o">())</span> <span class="o">{</span>
+                <span class="n">m_words</span><span class="o">.</span><span 
class="na">add</span><span class="o">(</span><span class="n">word</span><span 
class="o">);</span>
+            <span class="o">}</span>
+        <span class="o">}</span>
+    <span class="o">}</span>
+
+   <span class="kd">public</span> <span class="kt">boolean</span> <span 
class="nf">checkWord</span><span class="o">(</span><span 
class="n">String</span> <span class="n">word</span><span class="o">)</span> 
<span class="o">{</span>
+      <span class="k">return</span> <span class="n">m_words</span><span 
class="o">.</span><span class="na">contains</span><span class="o">(</span><span 
class="n">word</span><span class="o">);</span>
+   <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
 
@@ -366,30 +387,13 @@ component, but by  default, the pid is s
 <p>Notice that like the <em>@FactoryConfigurationAdapterService</em>, the 
<em>@ConfigurationDependency</em>
 annotation also supports meta type attributes.</p>
 <h2 id="how-to-run-the-sample-code">How to run the sample code</h2>
-<p>Install the following bundles:</p>
-<div class="codehilite"><pre><span class="n">org</span><span 
class="p">.</span><span class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span class="n">configadmin</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span class="n">metatype</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span class="n">http</span><span 
class="p">.</span><span class="n">jetty</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span class="n">webconsole</span>
-
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span 
class="n">dependencymanager</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span 
class="n">dependencymanager</span><span class="p">.</span><span 
class="n">shell</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span 
class="n">dependencymanager</span><span class="p">.</span><span 
class="n">runtime</span>
-<span class="n">org</span><span class="p">.</span><span 
class="n">apache</span><span class="p">.</span><span 
class="n">felix</span><span class="p">.</span><span 
class="n">dependencymanager</span><span class="p">.</span><span 
class="n">samples</span><span class="p">.</span><span 
class="n">annotation</span>
-</pre></div>
-
-
-<p>Start felix.</p>
-<p>Go to web console: in the Configuration panel, edit the "Dictionary  
Services" Configuration. By default, an English  dictionary is displayed. 
Just&nbsp; click on "save", then refresh your web  browser (click on refresh): 
you will see a new dictionary service  instance. At this point, a 
DictionaryService service will be enabled  (with the service property 
"lang=en"),&nbsp; and the SpellCheck component  will be injected with it. Then 
you should see the "spellcheck" command,  when typing&nbsp; "help" on the gogo 
shell.</p>
-<p>Just type "spellcheck hello", and the command should reply a fantastic 
message, like "word hello is correct".</p>
-<p>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, 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.</p>
+<p>Just import the Dependency source distribution in bndtools and check the 
following samples:</p>
+<ul>
+<li>org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/annot/README</li>
+<li>org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/api/README</li>
+</ul>
       <div class="timestamp" style="margin-top: 30px; font-size: 80%; 
text-align: right;">
-        Rev. 1663924 by marrs on Wed, 4 Mar 2015 10:39:19 +0000
+        Rev. 1664572 by pderop on Fri, 6 Mar 2015 09:45:33 +0000
       </div>
       <div class="trademarkFooter"> 
         Apache Felix, Felix, Apache, the Apache feather logo, and the Apache 
Felix project


Reply via email to