Menu

Creating a AEM configuration or OSGi Config

Create an OSGi configuration for Adobe Experience Manager(AEM), that could be use to manage different configuration values, based on the runmode.

  1. Create a Configuration class, ObjectClassDefinition.
    package com.adobe.aem.guides.wknd.core.config;
    
    import org.osgi.service.metatype.annotations.AttributeDefinition;
    import org.osgi.service.metatype.annotations.ObjectClassDefinition;
    
    @ObjectClassDefinition(
        name = "Cognito Forms API Configuration",
        description = "Configuration for the Cognito Forms API integration"
    )
    public @interface CognitoFormsApiConfiguration {
    
        @AttributeDefinition(
            name = "Endpoint",
            description = "Base endpoint URL for Cognito Forms API"
        )
        String endpoint() default "https://api.cognitoforms.com";
    
        @AttributeDefinition(
            name = "Client ID",
            description = "Client ID for the Cognito Forms API"
        )
        String clientId();
    
        @AttributeDefinition(
            name = "Client Secret",
            description = "Client Secret for the Cognito Forms API"
        )
        String clientSecret();
    }
    
  2. Now, create an interface with getter methods.

    package com.adobe.aem.guides.wknd.core.services;
    
    public interface CognitoFormsApiService {
        String getEndpoint();
        String getClientId();
        String getClientSecret();
    }
    
  3. Finally, create a class and implement the interface which we created in step 2.
    package com.adobe.aem.guides.wknd.core.services.impl;
    
    import org.osgi.service.component.annotations.Activate;
    import org.osgi.service.component.annotations.Component;
    import org.osgi.service.component.annotations.Modified;
    import org.osgi.service.metatype.annotations.Designate;
    
    import com.adobe.aem.guides.wknd.core.config.CognitoFormsApiConfiguration;
    import com.adobe.aem.guides.wknd.core.services.CognitoFormsApiService;
    
    @Component(immediate = true, service = CognitoFormsApiService.class)
    @Designate(ocd = CognitoFormsApiConfiguration.class)
    public class CognitoFormsApiServiceImpl implements CognitoFormsApiService {
    
        private volatile String endpoint;
        private volatile String clientId;
        private volatile String clientSecret;
    
        @Activate
        @Modified
        protected void activate(CognitoFormsApiConfiguration config) {
            this.endpoint = config.endpoint();
            this.clientId = config.clientId();
            this.clientSecret = config.clientSecret();
        }
    
        @Override
        public String getEndpoint() {
            return endpoint;
        }
    
        @Override
        public String getClientId() {
            return clientId;
        }
    
        @Override
        public String getClientSecret() {
            return clientSecret;
        }
    }