1 package org.mr.kernel.security.impl.management; 2 3 import org.mr.MantaAgent; 4 import org.mr.core.configuration.ConfigurationElement; 5 import org.mr.core.cmc.MantaJMXManagement; 6 import org.mr.kernel.security.MantaSecurityException; 7 import org.mr.kernel.security.SecurityConfigurationPaths; 8 import org.apache.commons.logging.Log; 9 import org.apache.commons.logging.LogFactory; 10 11 import java.lang.reflect.Constructor ; 12 import java.util.Collection ; 13 import java.util.ArrayList ; 14 import java.util.Map ; 15 import java.util.HashMap ; 16 17 27 public class ACLManagementFactory implements SecurityConfigurationPaths { 28 private static Log _logger; 29 private static Map _instances; 30 31 42 public static ACLManagement getACLManagement(String name) throws MantaSecurityException { 43 if (_instances != null && _instances.containsKey(name)) 44 return (ACLManagement) _instances.get(name); 45 46 ACLManagement management; 47 try { 48 String managementImplementationClass = MantaAgent.getInstance().getSingletonRepository().getConfigManager().getStringProperty(ACL_CONFIGURATIONS + "." + name + "." + MANAGEMENT_IMPLEMENTATION); 49 Class [] parameters = {String .class}; 50 Constructor constructor = Class.forName(managementImplementationClass).getConstructor(parameters); 51 String [] args = {name}; 52 management = (ACLManagement) constructor.newInstance(args); 53 54 MantaJMXManagement.getInstance().addManagedObject(management.getManagedObject(), "MantaRay:type=securityManagement,configurationName="+name); 56 57 if (_instances == null) 59 _instances = new HashMap (); 60 _instances.put(name, management); 61 } 62 catch (Exception e){ 63 if (getLogger().isErrorEnabled()) 64 getLogger().error("[getACLManagement] Error instantiating ACLManagement class for configuration with name " + name + ". " + e.getMessage()); 65 throw new MantaSecurityException("Error instantiating ACLManagement class for configuration with name " + name); 66 } 67 return management; 68 } 69 70 77 public static Collection getAvailableConfigurationNames() throws MantaSecurityException { 78 Collection c = new ArrayList (); 79 ArrayList configurations = MantaAgent.getInstance().getSingletonRepository().getConfigManager().getConfigurationElements(ACL_CONFIGURATIONS); 80 if (configurations == null){ 81 if (getLogger().isErrorEnabled()) 82 getLogger().error("[getAvailableConfigurationNames] Unable to find configuration element: " + ACL_CONFIGURATIONS); 83 throw new MantaSecurityException("Unable to find configuration element: " + ACL_CONFIGURATIONS); 84 } 85 ConfigurationElement element = (ConfigurationElement) configurations.get(0); 86 ArrayList subElements = element.getSubConfigurationElements(); 87 for (int i=0 ; i<subElements.size() ; i++){ 88 ConfigurationElement current = (ConfigurationElement) subElements.get(i); 89 c.add(current.getName()); 90 } 91 return c; 92 } 93 94 99 public static Log getLogger(){ 100 if (_logger == null){ 101 _logger = LogFactory.getLog("ACLManagementFactory"); 102 } 103 return _logger; 104 } 105 } 106 | Popular Tags |