/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed 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
*
*******************************************************************************/
package org.ebayopensource.turmeric.services.policyservice.provider.config;
import java.util.HashMap;
import java.util.Map;
import org.ebayopensource.turmeric.services.policyservice.provider.config.PolicyServiceProviderConfig.PolicyServiceProvider;
import org.ebayopensource.turmeric.utils.DomParseUtils;
import org.ebayopensource.turmeric.utils.config.exceptions.ConfigurationException;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* The Class PolicyServiceProviderConfigMapper.
*/
public class PolicyServiceProviderConfigMapper {
/**
* Map subject group service configuration.
*
* @param filename
* the filename
* @param topLevel
* the top level
* @param dst
* the dst
* @throws ConfigurationException
* the configuration exception
*/
public static void map(String filename, Element topLevel, PolicyServiceProviderConfig dst) throws ConfigurationException {
if (topLevel == null) {
return;
}
mapPolicyServiceProviderConfig(filename, topLevel, dst);
}
/**
* Map policy service provider config.
*
* @param filename
* the filename
* @param policyServiceConfigProvider
* the policy service config provider
* @param dst
* the dst
* @throws ConfigurationException
* the configuration exception
*/
public static void mapPolicyServiceProviderConfig(String filename, Element policyServiceConfigProvider, PolicyServiceProviderConfig dst) throws ConfigurationException {
try {
String defProviderKey = DomParseUtils.getElementText(filename, policyServiceConfigProvider, "default");
dst.setDefaultProvider(defProviderKey);
Element providerConfigList = DomParseUtils.getSingleElement(filename, policyServiceConfigProvider, "provider-config-list");
if (providerConfigList != null) {
NodeList nodeList = DomParseUtils.getImmediateChildrenByTagName(providerConfigList, "provider-config");
mapProviders(filename, nodeList, dst);
}
} catch(Exception e) {
throw new ConfigurationException(
"Error in mapping ratelimiter service config: " + e.getMessage(),
e);
}
}
private static void mapProviders(String filename, NodeList nodeList, PolicyServiceProviderConfig dst) throws Exception {
for (int i = 0; i < nodeList.getLength(); i++) {
Element item = (Element)nodeList.item(i);
String type = DomParseUtils.getElementText(filename, item, "provider-name");
PolicyServiceProvider provider = mapProvider(filename, item);
dst.setProvider(type, provider);
}
}
private static PolicyServiceProvider mapProvider(String filename, Element policyServiceProvider) throws Exception
{
PolicyServiceProvider provider = new PolicyServiceProvider();
Element policyTypeProviderConfig = DomParseUtils.getSingleElement(filename, policyServiceProvider, "policy-entity-provider-config");
if (policyTypeProviderConfig != null) {
NodeList nodeList = DomParseUtils.getImmediateChildrenByTagName(policyTypeProviderConfig, "policy-type-config");
provider.m_policyType2ProviderClassNameMap.putAll(getType2ProviderMap(filename, nodeList));
}
Element subjectTypeProviderConfig = DomParseUtils.getSingleElement(filename, policyServiceProvider, "subject-entity-provider-config");
if (subjectTypeProviderConfig != null) {
NodeList nodeList = DomParseUtils.getImmediateChildrenByTagName(subjectTypeProviderConfig, "subject-type-config");
provider.m_subjectType2ProviderClassNameMap.putAll(getType2ProviderMap(filename, nodeList));
}
Element resourceTypeProviderConfig = DomParseUtils.getSingleElement(filename, policyServiceProvider, "resource-entity-provider-config");
if (resourceTypeProviderConfig != null) {
NodeList nodeList = DomParseUtils.getImmediateChildrenByTagName(resourceTypeProviderConfig, "resource-type-config");
provider.m_resourceType2ProviderClassNameMap.putAll(getType2ProviderMap(filename, nodeList));
}
Element authnProviderConfig = DomParseUtils.getSingleElement(filename, policyServiceProvider, "authn-provider-config");
if (authnProviderConfig != null) {
String authnProviderClassname = DomParseUtils.getElementText(filename, authnProviderConfig, "provider-impl-classname", true);
provider.m_authnProviderClassName = authnProviderClassname;
}
Element groupMembershipProviderConfig = DomParseUtils.getSingleElement(filename, policyServiceProvider, "group-membership-provider-config");
if (groupMembershipProviderConfig != null) {
String groupMembershipProviderClassname = DomParseUtils.getElementText(filename, groupMembershipProviderConfig, "provider-impl-classname", true);
provider.m_groupMembershipProviderClassName = groupMembershipProviderClassname;
}
return provider;
}
private static Map<String, String> getType2ProviderMap(String filename, NodeList nodeList) throws Exception {
Map<String, String> policyTypeMap = new HashMap<String, String>();
for (int i = 0; i < nodeList.getLength(); i++) {
Element item = (Element)nodeList.item(i);
String type = DomParseUtils.getElementText(filename, item, "type");
String className = DomParseUtils.getElementText(filename, item, "provider-impl-classname");
policyTypeMap.put(type, className);
}
return policyTypeMap;
}
}