Pierre De Rop created FELIX-4805:
------------------------------------

             Summary: Deprecate DM annotation metatypes
                 Key: FELIX-4805
                 URL: https://issues.apache.org/jira/browse/FELIX-4805
             Project: Felix
          Issue Type: Improvement
          Components: Dependency Manager
    Affects Versions: dependencymanager.runtime-3.2.0, 
dependencymanager.annotations-3.2.0
            Reporter: Pierre De Rop
            Assignee: Pierre De Rop
            Priority: Trivial
             Fix For: dependencymanager.annotations-4.0.0, 
dependencymanager.runtime-4.0.0


In the Dependency Manager annotations, the DM metatype annotations should be 
deprecated and the nice bndtools metatype annotations should be used instead.

For example, the following Dictionary service is defining configuration 
metatypes using bndtools metatype annotations (see 
http://www.aqute.biz/Bnd/MetaType):

{code}
package sample;

import aQute.bnd.annotation.metatype.Meta.AD;
import aQute.bnd.annotation.metatype.Meta.OCD;

@OCD(factory = true, description = "Declare here some Dictionary instances.")
public interface DictionaryConfiguration {
    @AD(description = "Describes the dictionary language.", deflt = "en")
    String lang();

    @AD(description = "Declare here the list of dictionary words.")
    List<String> words();
}
{code}

and Here is the definition of the Dictionary service which is using the 
"Configurable" bnd helper that can be used to instantiate the 
DictionaryConfiguration:

{code}
package sample;

import aQute.bnd.annotation.metatype.Configurable;

@FactoryConfigurationAdapterService(factoryPidClass = 
DictionaryConfiguration.class)
public class DictionaryImpl implements DictionaryService {
    private CopyOnWriteArrayList<String> m_words = 
        new CopyOnWriteArrayList<String>();

    private String m_lang;

    protected void updated(Dictionary<String, ?> config) {
        if (config != null) {
            // We use the bnd "Configurable" helper in order to get an 
implementation for our DictionaryConfiguration interface.
            DictionaryConfiguration cnf = Configurable.createConfigurable(
                DictionaryConfiguration.class, config);

            m_lang = cnf.lang();
            m_words.clear();
            for (String word : cnf.words()) {
                m_words.add(word);
            }
        }
    }

    public boolean checkWord(String word) {
        return m_words.contains(word);
    }
}
{code}

In addition, a "pidClass" attribute should be added in the 
ConfigurationDependency annotation, in order to specify the pid using a class 
name, instead of a String. The same applies for the 
FactoryConfigurationAdapterService annotation (see the example above).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to