4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The contents of this file are subject to the terms
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * of the Common Development and Distribution License
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * (the License). You may not use this file except in
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * compliance with the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * You can obtain a copy of the License at
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * opensso/legal/CDDLv1.0.txt
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * See the License for the specific language governing
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * permission and limitations under the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * When distributing Covered Code, include this CDDL
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Header Notice in each file and include the License file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * at opensso/legal/CDDLv1.0.txt.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * If applicable, add the following below the CDDL Header,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * with the fields enclosed by brackets [] replaced by
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * your own identifying information:
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * "Portions Copyrighted [year] [name of copyright owner]"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * $Id: ConfigurationInstanceImpl.java,v 1.12 2009/10/29 00:03:50 exu Exp $
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * Portions Copyrighted 2015 ForgeRock AS.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpackage com.sun.identity.plugin.configuration.impl;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.security.AccessController;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Collections;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.HashMap;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Map;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Set;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.shared.debug.Debug;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.iplanet.sso.SSOException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.iplanet.sso.SSOToken;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.security.AdminTokenAction;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.sm.ServiceConfig;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.sm.ServiceConfigManager;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.sm.ServiceSchema;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.sm.ServiceSchemaManager;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.sm.SMSException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.plugin.configuration.ConfigurationException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.plugin.configuration.ConfigurationInstance;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.plugin.configuration.ConfigurationListener;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.common.configuration.ServerConfiguration;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.common.configuration.SiteConfiguration;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.sun.identity.shared.Constants;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * <code>ConfigurationInstanceImpl</code> is the implementation that provides
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * the operations on service configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpublic class ConfigurationInstanceImpl implements ConfigurationInstance {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static Map serviceNameMap = new HashMap();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private ServiceSchemaManager ssm;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private ServiceConfigManager scm;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private String componentName = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private String subConfigId = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private boolean hasOrgSchema = false;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final int SUBCONFIG_PRIORITY = 0;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final String RESOURCE_BUNDLE = "fmConfigurationService";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster static Debug debug = Debug.getInstance("libPlugins");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private SSOToken ssoToken;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster static {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap = new HashMap();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("SAML1", "iPlanetAMSAMLService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("SAML2", "sunFMSAML2MetadataService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("WS-FEDERATION", "sunFMWSFederationMetadataService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("ID-FF_META", "sunFMIDFFMetadataService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("LIBCOT","sunFMCOTConfigService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("ID-FF", "iPlanetAMProviderConfigService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("AUTHN_SVC", "sunIdentityServerAuthnService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("DISCO", "sunIdentityServerDiscoveryService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("IDPP", "sunIdentityServerLibertyPPService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("SOAP_BINDING", "sunIdentityServerSOAPBinding");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("PLATFORM", "iPlanetAMPlatformService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("NAMING", "iPlanetAMNamingService");
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper serviceNameMap.put("AUTHN", "iPlanetAMAuthService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("SAML2_SOAP_BINDING","sunfmSAML2SOAPBindingService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("MULTI_PROTOCOL","sunMultiFederationProtocol");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("STS_CONFIG","sunFAMSTSService");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster serviceNameMap.put("SAML2_CONFIG", "sunFAMSAML2Configuration");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private SSOToken getSSOToken() {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return (ssoToken != null) ? ssoToken :
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster (SSOToken)AccessController.doPrivileged(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster AdminTokenAction.getInstance());
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Initializer.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param componentName Name of the components, e.g. SAML1, SAML2, ID-FF
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param session FM Session object.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not initialize the instance.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public void init(String componentName, Object session)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String serviceName = (String)serviceNameMap.get(componentName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (serviceName == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "componentNameUnsupported", null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((session != null) && (session instanceof SSOToken)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssoToken = (SSOToken)session;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster SSOToken adminToken = getSSOToken();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssm = new ServiceSchemaManager(serviceName, adminToken);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceSchema oss = ssm.getOrganizationSchema();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (oss != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster hasOrgSchema = true;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Set subSchemaNames = oss.getSubSchemaNames();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((subSchemaNames != null) && (subSchemaNames.size() == 1)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster subConfigId = (String)subSchemaNames.iterator().next();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster scm = new ServiceConfigManager(serviceName, adminToken);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.init:", smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.init:", ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster this.componentName = componentName;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Returns Configurations.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param realm the name of organization at which the configuration resides.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param configName configuration instance name. e.g. "/sp".
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The configName could be null or empty string, which means the default
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration for this components.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @return Map of key/value pairs, key is the attribute name, value is
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * a Set of attribute values or null if service configuration doesn't
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan * doesn't exist. If the configName parameter is null or empty, and OrganizationalConfig state is present,
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan * this state will be merged with the GlobalConfig attributes, with the OrganizationConfig attributes
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan * over-writing the GlobalConfig attributes, in case GlobalConfig and OrganizationConfig attributes share the
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan * same key.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if an error occurred while getting
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * service configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public Map getConfiguration(String realm, String configName)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl.getConfiguration: " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "componentName = " + componentName + ", realm = " + realm +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ", configName = " + configName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan ServiceConfig organizationConfig = null;
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan organizationConfig = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan if (organizationConfig == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((configName == null) || (configName.length() == 0)) {
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan Map organizationAttributes = organizationConfig.getAttributes();
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan ServiceConfig globalConfig = scm.getGlobalConfig(configName);
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan if (globalConfig != null) {
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan Map mergedAttributes = globalConfig.getAttributes();
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan mergedAttributes.putAll(organizationAttributes);
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan return mergedAttributes;
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan }
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan return organizationAttributes;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (subConfigId == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "getConfiguration: sub configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noSubConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan organizationConfig = organizationConfig.getSubConfig(configName);
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan if (organizationConfig == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
9e8eccb356ecf7096672d8baea66a42ac708b56dDirk Hogan return organizationConfig.getAttributes();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((realm != null) && (!realm.equals("/"))) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "getConfiguration: organization configuraton not "+
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noOrgConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceSchema ss = ssm.getGlobalSchema();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (ss == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "getConfiguration: configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Map retMap = ss.getAttributeDefaults();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (componentName.equals("PLATFORM")) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster SSOToken token = getSSOToken();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster retMap.put(Constants.PLATFORM_LIST,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServerConfiguration.getServerInfo(token));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster retMap.put(Constants.SITE_LIST,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster SiteConfiguration.getSiteInfo(token));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return retMap;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.getConfiguration:", smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedGetConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.getConfiguration:", ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedGetConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Sets Configurations.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param realm the name of organization at which the configuration resides.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param configName configuration instance name. e.g. "/sp"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The configName could be null or empty string, which means the default
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration for this components.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param avPairs Map of key/value pairs to be set in the service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration, key is the attribute name, value is
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * a Set of attribute values.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not set service configuration
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * or service configuration doesn't exist.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public void setConfiguration(String realm,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String configName, Map avPairs)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl.setConfiguration: " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "componentName = " + componentName + ", realm = " + realm +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ", configName = " + configName + ", avPairs = " + avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceConfig sc = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "configNotExist", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((configName == null) || (configName.length() == 0)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.setAttributes(avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (subConfigId == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "setConfiguration: sub configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noSubConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = sc.getSubConfig(configName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "configNotExist", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.setAttributes(avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((realm != null) && (!realm.equals("/"))) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "setConfiguration: organization configuraton not "+
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noOrgConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceSchema ss = ssm.getGlobalSchema();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (ss == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "setConfiguration: configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ss.setAttributeDefaults(avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.setConfiguration:", smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedSetConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.setConfiguration:", ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedSetConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Creates Configurations.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param realm the name of organization at which the configuration resides.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param configName service configuration name. e.g. "/sp"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The configName could be null or empty string, which means the
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * default configuration for this components.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param avPairs Map of key/value pairs to be set in the service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration, key is the attribute name, value is
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * a Set of attribute values.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not create service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public void createConfiguration(String realm, String configName,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Map avPairs)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl.createConfiguration: " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "componentName = " + componentName + ", realm = " + realm +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ", configName = " + configName + ", avPairs = " + avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceConfig sc = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((configName == null) || (configName.length() == 0)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster scm.createOrganizationConfig(realm, avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (subConfigId == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "createConfiguration: sub configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noSubConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = scm.createOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else if (sc.getSubConfigNames().contains(configName)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm, configName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "configExist", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.addSubConfig(configName, subConfigId,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster SUBCONFIG_PRIORITY, avPairs);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "createConfiguration: configuraton creation not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noConfigCreation", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.createConfiguration:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedCreateConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.createConfiguration:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedCreateConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Deletes Configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param realm the name of organization at which the configuration resides.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param configName service configuration name. e.g. "/sp"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The configName could be null or empty string, which means the default
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration for this components.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param attributes A set of attributes to be deleted from the Service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration. If the value is null or empty, deletes all service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not delete service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public void deleteConfiguration(String realm,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String configName, Set attributes)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl.deleteConfiguration: " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "componentName = " + componentName + ", realm = " + realm +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ", configName = " + configName + ", attributes = " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster attributes);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster boolean removeConfig = (attributes == null) || (attributes.isEmpty());
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceConfig sc = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((configName == null) || (configName.length() == 0)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (removeConfig) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster scm.removeOrganizationConfiguration(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.removeAttributes(attributes);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (subConfigId == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "deleteConfiguration: sub configuraton not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noSubConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (removeConfig) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.removeSubConfig(configName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc = sc.getSubConfig(configName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster sc.removeAttributes(attributes);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl." +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "deleteConfiguration: configuraton deletion not " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "supported.");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "noConfigDeletion", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.deleteConfiguration:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedDeleteConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.deleteConfiguration:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedDeleteConfig", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Returns all service config name for this components.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param realm the name of organization at which the configuration resides.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @return Set of service configuration names. Return null if there
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * is no service configuration for this component, return empty set
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * if there is only default configuration instance.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not get all service
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * configuration names.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public Set getAllConfigurationNames(String realm)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (debug.messageEnabled()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.message("ConfigurationInstanceImpl.getAllConfigurationNames"+
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ": realm = " + realm + ", componentName = " + componentName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceConfig sc = scm.getOrganizationConfig(realm, null);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (sc == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Set subConfigNames = sc.getSubConfigNames();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((subConfigNames != null) && (subConfigNames.size() > 0)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return subConfigNames;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return Collections.EMPTY_SET;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((realm != null) && (!realm.equals("/"))) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ServiceSchema ss = ssm.getGlobalSchema();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (ss == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return Collections.EMPTY_SET;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SMSException smsex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.getAllConfigurationNames:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster smsex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedGetConfigNames", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (SSOException ssoex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster debug.error("ConfigurationInstanceImpl.getAllConfigurationNames:",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssoex);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] data = { componentName, realm };
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "failedGetConfigNames", data);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Registers for changes to the component's configuration. The object will
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * be called when configuration for this component is changed.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @return the registered id for this listener instance.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not register the listener.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public String addListener(ConfigurationListener listener)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return scm.addListener(new ServiceListenerImpl(listener,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster componentName));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return ssm.addListener(new ServiceListenerImpl(listener,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster componentName));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Unregisters the listener from the component for the given
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * listener ID. The ID was issued when the listener was registered.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param listenerID the returned id when the listener was registered.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @exception ConfigurationException if could not register the listener.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public void removeListener(String listenerID)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws ConfigurationException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (hasOrgSchema) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster scm.removeListener(listenerID);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ssm.removeListener(listenerID);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster}