org.wso2.carbon.identity.entitlement.policy.publisher.AbstractPolicyPublisherModule.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.carbon.identity.entitlement.policy.publisher.AbstractPolicyPublisherModule.java

Source

/*
*  Copyright (c)  WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*  WSO2 Inc. 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.wso2.carbon.identity.entitlement.policy.publisher;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.identity.entitlement.EntitlementException;
import org.wso2.carbon.identity.entitlement.common.EntitlementConstants;
import org.wso2.carbon.identity.entitlement.dto.PolicyDTO;
import org.wso2.carbon.identity.entitlement.dto.PublisherDataHolder;
import org.wso2.carbon.identity.entitlement.dto.PublisherPropertyDTO;
import org.wso2.carbon.identity.entitlement.internal.EntitlementServiceComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * This is  abstract implementation of PolicyPublisherModule. Here we have implemented the init()
 * method.
 * If you want to configure properties of a publisher module from management UI,
 * you want to write your publisher module by extending this abstract class
 * Then you can init() your module each time policy is published.
 */
public abstract class AbstractPolicyPublisherModule implements PolicyPublisherModule {

    protected static final String REQUIRED = "required";

    protected static final String DISPLAY_NAME = "displayName";

    protected static final String ORDER = "order";

    protected static final String SECRET = "password";

    private static Log log = LogFactory.getLog(AbstractPolicyPublisherModule.class);

    public void init(Properties properties) {

        List<PublisherPropertyDTO> propertyDTOs = new ArrayList<PublisherPropertyDTO>();

        if (properties == null || properties.size() == 0) {
            properties = loadProperties();
        }

        if (properties != null) {
            for (Map.Entry<Object, Object> entry : properties.entrySet()) {

                Map attributeMap;

                Object value = entry.getValue();
                if (value instanceof Map) {
                    attributeMap = (Map) value;
                } else {
                    return;
                }

                PublisherPropertyDTO dto = new PublisherPropertyDTO();
                dto.setModule(getModuleName());
                dto.setId((String) entry.getKey());
                if (attributeMap.get(DISPLAY_NAME) != null) {
                    dto.setDisplayName((String) attributeMap.get(DISPLAY_NAME));
                } else {
                    log.error("Invalid policy publisher configuration : Display name can not be null");
                }
                if (attributeMap.get(ORDER) != null) {
                    dto.setDisplayOrder(Integer.parseInt((String) attributeMap.get(ORDER)));
                }
                if (attributeMap.get(REQUIRED) != null) {
                    dto.setRequired(Boolean.parseBoolean((String) attributeMap.get(REQUIRED)));
                }
                if (attributeMap.get(SECRET) != null) {
                    dto.setSecret(Boolean.parseBoolean((String) attributeMap.get(SECRET)));
                }
                propertyDTOs.add(dto);
            }
        }

        PublisherPropertyDTO preDefined1 = new PublisherPropertyDTO();
        preDefined1.setId(PolicyPublisher.SUBSCRIBER_ID);
        preDefined1.setModule(getModuleName());
        preDefined1.setDisplayName(PolicyPublisher.SUBSCRIBER_DISPLAY_NAME);
        preDefined1.setRequired(true);
        preDefined1.setDisplayOrder(0);
        propertyDTOs.add(preDefined1);

        PublisherDataHolder holder = new PublisherDataHolder(getModuleName());
        holder.setPropertyDTOs(propertyDTOs.toArray(new PublisherPropertyDTO[propertyDTOs.size()]));
        EntitlementServiceComponent.getEntitlementConfig()
                .addModulePropertyHolder(PolicyPublisherModule.class.getName(), holder);

    }

    @Override
    public Properties loadProperties() {
        return null;
    }

    @Override
    public void publish(PolicyDTO policyDTO, String action, boolean enabled, int order)
            throws EntitlementException {

        if (EntitlementConstants.PolicyPublish.ACTION_CREATE.equals(action)) {
            policyDTO.setPolicyOrder(order);
            policyDTO.setActive(enabled);
            publishNew(policyDTO);
        } else if (EntitlementConstants.PolicyPublish.ACTION_DELETE.equals(action)) {
            delete(policyDTO);
        } else if (EntitlementConstants.PolicyPublish.ACTION_UPDATE.equals(action)) {
            update(policyDTO);
        } else if (EntitlementConstants.PolicyPublish.ACTION_ENABLE.equals(action)) {
            policyDTO.setActive(true);
            enable(policyDTO);
        } else if (EntitlementConstants.PolicyPublish.ACTION_DISABLE.equals(action)) {
            policyDTO.setActive(false);
            disable(policyDTO);
        } else if (EntitlementConstants.PolicyPublish.ACTION_ORDER.equals(action)) {
            policyDTO.setPolicyOrder(order);
            order(policyDTO);
        } else {
            throw new EntitlementException("Unsupported publishing action. Action is : " + action);
        }
    }

    /**
     * This would init module, each time policy is published
     *
     * @param propertyHolder publisher module data as PublisherDataHolder
     * @throws EntitlementException throws if init fails
     */
    public abstract void init(PublisherDataHolder propertyHolder) throws EntitlementException;

    /**
     * Publish a new policy
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException throws, if fails
     */
    public abstract void publishNew(PolicyDTO policyDTO) throws EntitlementException;

    /**
     * Update a already published policy
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException throws, if fails
     */
    public abstract void update(PolicyDTO policyDTO) throws EntitlementException;

    /**
     * Deletes a published policy
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException throws, if fails
     */
    public abstract void delete(PolicyDTO policyDTO) throws EntitlementException;

    /**
     * Order policy
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException if fails
     */
    public abstract void order(PolicyDTO policyDTO) throws EntitlementException;

    /**
     * Disables policy in PDP
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException if fails
     */
    public abstract void disable(PolicyDTO policyDTO) throws EntitlementException;

    /**
     * Enables policy in PDP
     *
     * @param policyDTO <code>PolicyDTO</code>
     * @throws EntitlementException if fails
     */
    public abstract void enable(PolicyDTO policyDTO) throws EntitlementException;
}