/******************************************************************************* * 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.runtime.spf.impl.internal.config; import java.util.HashMap; import java.util.Map; import org.ebayopensource.turmeric.runtime.common.impl.internal.config.BaseConfigHolder; import org.ebayopensource.turmeric.runtime.common.impl.internal.config.ConfigUtils; /** * This class represents processed server-side security policy configuration for a service. * <p> * Note: Most ConfigHolder data is available in higher-level structures. Refer to ServiceDesc and related structures * as the primary configuration in the public API for SOA framework. * @author rmurphy * */ public class SecurityPolicyConfigHolder extends BaseConfigHolder { private static final char NL = '\n'; private final String m_adminName; private Map<String, OperationSecurityConfig> m_authenticationOperations; private Map<String, OperationSecurityConfig> m_authorizationOperations; public SecurityPolicyConfigHolder(String adminName) { m_adminName = adminName; } /** * Returns the admin name of the service associated with this policy holder. * @return the admin name */ public String getAdminName() { return m_adminName; } /** * Get the complete list of per-operation option lists for authentication. * @return the list of option lists. */ public Map<String, OperationSecurityConfig> getAuthenticationOperations() { if (m_authenticationOperations == null) { m_authenticationOperations = new HashMap<String, OperationSecurityConfig>(); } if (isReadOnly()) { return copyOperationMap(m_authenticationOperations); } return m_authenticationOperations; } /** * Get the complete list of per-operation option lists for authorization. * @return the list of option lists. */ public Map<String, OperationSecurityConfig> getAuthorizationOperations() { if (m_authorizationOperations == null) { m_authorizationOperations = new HashMap<String, OperationSecurityConfig>(); } if (isReadOnly()) { return copyOperationMap(m_authorizationOperations); } return m_authorizationOperations; } /** * Safe copy method. * @return a new object with a safe copy of the original data */ public SecurityPolicyConfigHolder copy() { SecurityPolicyConfigHolder newCH = new SecurityPolicyConfigHolder(m_adminName); newCH.m_readOnly = false; newCH.m_authenticationOperations = copyOperationMap(m_authenticationOperations); newCH.m_authorizationOperations = copyOperationMap(m_authorizationOperations); return newCH; } private Map<String, OperationSecurityConfig> copyOperationMap(Map<String, OperationSecurityConfig> inOperations) { if (inOperations == null) { return null; } Map<String, OperationSecurityConfig> outOperations = new HashMap<String, OperationSecurityConfig>(); for (Map.Entry<String, OperationSecurityConfig> entry : inOperations.entrySet()) { OperationSecurityConfig inOperation = entry.getValue(); OperationSecurityConfig outOperation = new OperationSecurityConfig(); ConfigUtils.putNameValueList(inOperation.getOption(), outOperation.getOption()); outOperation.setName(inOperation.getName()); outOperations.put(outOperation.getName(), outOperation); } return outOperations; } /* * Provide a user-readable description of the configuration into a StringBuffer. * @param sb the StringBuffer into which to write the description */ public void dump(StringBuffer sb) { if (m_adminName != null) { sb.append("***** Security policy for service: " + m_adminName + NL); } if (m_authenticationOperations != null) { sb.append("========== Authentication options ==========" + NL); dumpOperationMap(sb, m_authenticationOperations); } if (m_authorizationOperations != null) { sb.append("========== Authorization options ==========" + NL); dumpOperationMap(sb, m_authorizationOperations); } } private void dumpOperationMap(StringBuffer sb, Map<String, OperationSecurityConfig> operations) { for (Map.Entry<String, OperationSecurityConfig> entry : operations.entrySet()) { String opName = entry.getKey(); OperationSecurityConfig opConfig = entry.getValue(); sb.append(" Operation: " + opName + NL); ConfigUtils.dumpOptionList(sb, opConfig, " "); } } }