Create Custom OSGI Configuration in AEM

OSGI (Open Service Gateway Initiative) is a major building block in aem architecture which makes it modular. In AEM, there is a common need of creating custom OSGi configuration. These Configurations can be a single value,multi-value,drop down list and check box like property.

In this tutorial i have tried to cover all the available options for creating custom OSGi configuration in aem.

  • How to Set and Get OSGI configuration values using Text Field.
  • How to Set and Get OSGI configuration values using Drop Down List.
  • How to Set and Get OSGI configuration values using Check Box.
  • How to Set and Get OSGI configuration values using Multi Field.

Set and Get OSGI configuration values using Textfield:

When user wants to get and set single value in osgi configuration, Text Field is preferred.

Setting Values:

@Property(label="Name of the Author",value = "author")
@Property(label="Age of the Author",intValue = 15)

Getting Values:

private static final String AUTHOR_NAME = "author.value";
private static final String AUTHOR_AGE = "author.age"; 
  • value: This property indicates default value of the configuration.
  • intValue : If you want to take only integer value ,use this property to set default value.

Note:- @Property annotation helps us to define the properties in felix console.

Set and Get OSGI configuration values using Drop Down List:

Drop Down list is a very common requirement that a developer encounters, when customer wants to display list of countries, states, gender etc to choose from felix console.

Note:- User can add as many options in the list , but select only once at a time.

Setting Values:

@Property(
    label = "Author Gender",
    description = "Describe Author Gender",
    options = {
        @PropertyOption(name = "Male", value = "1. Male"),
        @PropertyOption(name = "Female", value = "2. Female")
    },
    value = "Female")

Getting Values:

private static final String AUTHOR_GENDER = "author.gender";

Set and Get OSGI configuration values using CheckBox :

Check Box is a good solution when number of options are limited, and customers wants to select single or multiple values from felix console.

Note:- The Value of this property is boolean ,we can set default value by the attribute boolValue.

Setting Values:

@Property(label = "CheckBox Property " ,boolValue = false,description = "please Check the Property")

Getting Values:

public static final String CHECKBOX_PROPERTY = "checkBox.property";

Set and Get OSGI configuration values using Multi-Field :

Multifield Components is the most preffered component by developers when their is a requirement of creating a custom configuration which consist dynamic number of fields. We can add as many values in it as per our requirement

 @Property(value={"English", "Hindi"}, unbounded = PropertyUnbounded.ARRAY, label = "Subjects", cardinality = 50, description = "Example for Multi field config")
private static final String MULTI_FIELD = "multifield"; 

Now in order to fetch the values we require two methods:

  1. Activate: This method is called only once when the bundle is activated.
  2. Modified: When we made the changes in our configurations, then we need to fetch the values from this method because the bundle is already activated.
@Activate
protected void activate(@SuppressWarnings("rawtypes") final Map context) {
    this.name = PropertiesUtil.toString(context.get(AUTHOR_NAME), "");
    this.gender = PropertiesUtil.toString(context.get(AUTHOR_GENDER),"");
    this.checkbox = PropertiesUtil.toBoolean(context.get(CHECKBOX_PROPERTY),true);
    this.multiString = PropertiesUtil.toStringArray(context.get(MULTI_FIELD));
    this.age = PropertiesUtil.toInteger(context.get(AUTHOR_AGE),12);

}
@Modified
protected void modified(ComponentContext context){
    this.name = PropertiesUtil.toString(
        context.getProperties().get(AUTHOR_NAME), "");
    this.gender = PropertiesUtil.toString(
        context.getProperties().get(AUTHOR_GENDER), "");
    this.checkbox = PropertiesUtil.toBoolean(
            context.getProperties().get(CHECKBOX_PROPERTY), true);
     this.multiString = PropertiesUtil.toStringArray(
              context.getProperties().get(MULTI_FIELD));
    this.age = PropertiesUtil.toInteger(
            context.getProperties().get(AUTHOR_AGE),12);
}

Testing OSGI Configurations:

  • Go to Felix Console.
  • Select the bundle that you want to Verify or Configure.

custom osgi confiuration aem set and get values

You can find the complete code here.

Spread the love

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.