/*
* 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;
}