001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999-2004 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: DomainMapManager.java 8251 2006-04-14 12:38:07Z danesa $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas_domain.lib;
025:
026: import java.io.File;
027: import java.io.FileInputStream;
028: import java.io.IOException;
029: import java.io.InputStream;
030: import java.io.InputStreamReader;
031: import java.io.Reader;
032:
033: import org.objectweb.jonas.common.Log;
034: import org.objectweb.jonas_domain.api.DomainMap;
035: import org.objectweb.jonas_domain.api.DomainMapException;
036: import org.objectweb.jonas_domain.api.DomainSchemas;
037: import org.objectweb.jonas_domain.rules.DomainRuleSet;
038: import org.objectweb.jonas_domain.xml.Domain;
039: import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
040: import org.objectweb.jonas_lib.deployment.digester.JDigester;
041: import org.objectweb.jonas_lib.deployment.lib.AbsDeploymentDescManager;
042: import org.objectweb.util.monolog.api.BasicLevel;
043: import org.objectweb.util.monolog.api.Logger;
044:
045: /**
046: * This class extends the AbsDeploymentDescriptor class of JOnAS It provides a
047: * description of the domain map
048: * @author Adriana Danes
049: */
050: public class DomainMapManager extends AbsDeploymentDescManager {
051:
052: /**
053: * Path of the domain.xml configuration file
054: */
055: public static final String DOMAIN_FILE_NAME = "domain.xml";
056:
057: /**
058: * Digester used to parse domain.xml
059: */
060: private static JDigester domainDigester = null;
061:
062: /**
063: * Rules to parse the application.xml
064: */
065: private static DomainRuleSet domainRuleSet = new DomainRuleSet();
066:
067: /**
068: * logger
069: */
070: private static Logger logger = Log
071: .getLogger(Log.JONAS_DOMAIN_MANAGEMENT_PREFIX);
072:
073: /**
074: * Flag for parser validation
075: */
076: private static boolean parsingWithValidation = true;
077:
078: /**
079: * Private Empty constructor for utility class
080: */
081: private DomainMapManager() {
082: }
083:
084: /**
085: * Get an instance of a DomainMap by parsing the domain.xml configuration file.
086: * @param domainFileName used when specific domain description file name has to be used
087: * @param classLoaderForCls the classloader for the classes.
088: * @return a DomainMap instance by parsing the domain.xml file
089: * @throws DomainMapException if the domain.xml file is
090: * corrupted.
091: */
092: public static DomainMap getDomainMap(String domainFileName,
093: ClassLoader classLoaderForCls) throws DomainMapException {
094:
095: //Input Stream
096: InputStream domainInputStream = null;
097: String fileName = null;
098: if (domainFileName == null) {
099: // domain.xml in JONAS_BASE/conf
100: fileName = System.getProperty("jonas.base")
101: + File.separator + "conf" + File.separator
102: + DOMAIN_FILE_NAME;
103: } else {
104: fileName = domainFileName;
105: }
106: // load domain.xml
107: File domainFile = new File(fileName);
108: if (!domainFile.exists()) {
109: domainInputStream = classLoaderForCls
110: .getResourceAsStream(DOMAIN_FILE_NAME);
111: } else {
112: try {
113: domainInputStream = new FileInputStream(domainFile);
114: } catch (Exception e) {
115: throw new DomainMapException("Cannot read the "
116: + DOMAIN_FILE_NAME, e);
117: }
118: }
119:
120: Domain domain = loadDomain(new InputStreamReader(
121: domainInputStream), DOMAIN_FILE_NAME);
122: try {
123: domainInputStream.close();
124: } catch (IOException e) {
125: // Can't close the file
126: logger.log(BasicLevel.WARN, "Cannot close InputStream for "
127: + DOMAIN_FILE_NAME);
128: }
129:
130: // instantiate the domain map
131: DomainMap domainMap = new DomainMap(domain);
132: return domainMap;
133: }
134:
135: /**
136: * Load the domain.xml file.
137: * @param reader the Reader of the XML file.
138: * @param fileName the name of the file (domain.xml).
139: * @throws DomainMapException if the file is
140: * corrupted.
141: * @return a Domain object.
142: */
143: public static Domain loadDomain(Reader reader, String fileName)
144: throws DomainMapException {
145:
146: Domain domain = new Domain();
147: // Create if domainDigester is null
148: if (domainDigester == null) {
149: try {
150: // Create and initialize the digester
151:
152: domainDigester = new JDigester(domainRuleSet,
153: getParsingWithValidation(), true, null,
154: new DomainSchemas());
155: } catch (DeploymentDescException e) {
156: throw new DomainMapException(e);
157: }
158: }
159:
160: try {
161: domainDigester.parse(reader, fileName, domain);
162: } catch (DeploymentDescException e) {
163: throw new DomainMapException(e);
164: } finally {
165: domainDigester.push(null);
166: }
167:
168: return domain;
169: }
170:
171: /**
172: * Controls whether the parser is reporting all validity errors.
173: * @return if true, all external entities will be read.
174: */
175: public static boolean getParsingWithValidation() {
176: return parsingWithValidation;
177: }
178:
179: /**
180: * Controls whether the parser is reporting all validity errors.
181: * @param validation if true, all external entities will be read.
182: */
183: public static void setParsingWithValidation(boolean validation) {
184: DomainMapManager.parsingWithValidation = validation;
185: }
186: }
|