JResourceManager.java

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         // Initialize the digester
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             // Can't locate URL for DTD, no validation
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         // Create the digester for the parsing of the jonas-realm.xml file.
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 }

Generated on Tue Feb 15 15:05:22 2005 for JOnAS by  doxygen 1.3.9.1