00001
00025 package org.objectweb.jonas.security.lib;
00026
00027 import java.io.File;
00028 import java.io.Reader;
00029 import java.net.MalformedURLException;
00030 import java.net.URL;
00031
00032 import org.apache.commons.digester.Digester;
00033
00034 import org.objectweb.jonas.common.JProp;
00035 import org.objectweb.jonas.common.Log;
00036 import org.objectweb.jonas.security.JResources;
00037 import org.objectweb.jonas.security.SecurityServiceException;
00038 import org.objectweb.jonas.security.rules.JDSRuleSet;
00039 import org.objectweb.jonas.security.rules.JLDAPRuleSet;
00040 import org.objectweb.jonas.security.rules.JMemoryRuleSet;
00041
00042 import org.objectweb.util.monolog.api.BasicLevel;
00043 import org.objectweb.util.monolog.api.Logger;
00044
00045
00051 public class JResourceManager {
00052
00056 private static Logger logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX);
00057
00061 private String xmlDir = null;
00062
00066 protected static final String CONFIG_FILE_DTD = "jonas-realm_1_0.dtd";
00067
00071 private static final String JONAS_ROOT = JProp.getInstallRoot();
00072
00076 private static JResourceManager instance = null;
00077
00078
00082 private JResourceManager() {
00083 xmlDir = JONAS_ROOT + File.separator + "xml" + File.separator;
00084 }
00085
00089 public static JResourceManager getInstance() {
00090 if (instance == null) {
00091 instance = new JResourceManager();
00092 }
00093 return instance;
00094 }
00095
00102 protected Digester createRealmDigester() {
00103
00104
00105 Digester digester = new Digester();
00106 File realmDtd = new File(xmlDir + CONFIG_FILE_DTD);
00107 URL realmDtdURL = null;
00108 boolean validating = true;
00109 try {
00110 realmDtdURL = realmDtd.toURL();
00111 digester.register("-//ObjectWeb//DTD JOnAS realm 1.0//EN", realmDtdURL.toExternalForm());
00112 } catch (MalformedURLException e) {
00113
00114 logger.log(BasicLevel.INFO, "Can not locate URL for DTD validation, no validation will be done." + e.getMessage());
00115 validating = false;
00116 }
00117
00118 digester.setValidating(validating);
00119 digester.setErrorHandler(new JErrorHandler());
00120 digester.addRuleSet(new JMemoryRuleSet("jonas-realm/jonas-memoryrealm/"));
00121 digester.addRuleSet(new JDSRuleSet("jonas-realm/jonas-dsrealm/"));
00122 digester.addRuleSet(new JLDAPRuleSet("jonas-realm/jonas-ldaprealm/"));
00123
00124 return (digester);
00125 }
00126
00136 public void addResources(JResources res, Reader reader, String xml) throws SecurityServiceException {
00137
00138 Digester realmDigester = createRealmDigester();
00139
00140 try {
00141 realmDigester.push(res);
00142 realmDigester.parse(reader);
00143 reader.close();
00144 } catch (org.xml.sax.SAXException saxe) {
00145 logger.log(BasicLevel.ERROR, "Error when parsing the XML of the file " + xml);
00146 throw new SecurityServiceException(saxe.getMessage(), saxe);
00147 } catch (Exception e) {
00148 logger.log(BasicLevel.ERROR, "Error when reading config file from the xml file " + xml);
00149 throw new SecurityServiceException("Error when reading config file from the xml file " + xml + " : " + e.getMessage(), e);
00150 }
00151
00152 }
00153
00154
00155 }