001 /**
002 *
003 * Copyright 2003-2004 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.security.jacc;
019
020 import java.util.HashMap;
021 import java.util.Map;
022 import javax.security.jacc.PolicyConfiguration;
023 import javax.security.jacc.PolicyConfigurationFactory;
024 import javax.security.jacc.PolicyContextException;
025
026 import org.apache.commons.logging.Log;
027 import org.apache.commons.logging.LogFactory;
028 import org.apache.geronimo.security.GeronimoSecurityPermission;
029
030
031 /**
032 * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
033 */
034 public class GeronimoPolicyConfigurationFactory extends PolicyConfigurationFactory {
035
036 private final Log log = LogFactory.getLog(GeronimoPolicyConfigurationFactory.class);
037 private static GeronimoPolicyConfigurationFactory singleton;
038 private Map configurations = new HashMap();
039
040 public GeronimoPolicyConfigurationFactory() {
041 synchronized (GeronimoPolicyConfigurationFactory.class) {
042 if (singleton != null) {
043 log.error("Singleton already assigned. There may be more than one GeronimoPolicyConfigurationFactory being used.");
044 throw new IllegalStateException("Singleton already assigned");
045 }
046 singleton = this;
047 }
048 }
049
050 public void setPolicyConfiguration(String contextID, GeronimoPolicyConfiguration configuration) {
051 SecurityManager sm = System.getSecurityManager();
052 if (sm != null) sm.checkPermission(new GeronimoSecurityPermission("setPolicyConfiguration"));
053
054 configurations.put(contextID, configuration);
055
056 log.trace("Set policy configuration " + contextID);
057 }
058
059 public GeronimoPolicyConfiguration getGeronimoPolicyConfiguration(String contextID) throws PolicyContextException {
060 GeronimoPolicyConfiguration configuration = (GeronimoPolicyConfiguration) configurations.get(contextID);
061
062 if (configuration == null) {
063 throw new PolicyContextException("No policy configuration registered for contextID: " + contextID);
064 }
065
066 log.trace("Get policy configuration " + contextID);
067 return configuration;
068 }
069
070 public PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove) throws PolicyContextException {
071 GeronimoPolicyConfiguration configuration = (GeronimoPolicyConfiguration) configurations.get(contextID);
072
073 if (configuration == null) {
074 configuration = new PolicyConfigurationGeneric(contextID);
075 configurations.put(contextID, configuration);
076 } else {
077 configuration.open(remove);
078 }
079
080 log.trace("Get " + (remove ? "CLEANED" : "") + " policy configuration " + contextID);
081 return configuration;
082 }
083
084 public boolean inService(String contextID) throws PolicyContextException {
085 PolicyConfiguration configuration = getPolicyConfiguration(contextID, false);
086
087 log.trace("Policy configuration " + contextID + " put into service");
088 return configuration.inService();
089 }
090
091 static GeronimoPolicyConfigurationFactory getSingleton() {
092 return singleton;
093 }
094 }