/*
* Copyright 2004, 2005, 2006 Odysseus Software GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.odysseus.calyxo.control.conf.impl;
import java.net.URL;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.Rule;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import de.odysseus.calyxo.base.ModuleContext;
import de.odysseus.calyxo.base.conf.ConfigException;
import de.odysseus.calyxo.base.conf.impl.RootConfigImpl;
import de.odysseus.calyxo.base.conf.impl.RootConfigImplParser;
import de.odysseus.calyxo.control.conf.ControlConfig;
/**
* Control configuration parser.
*
* @author Christoph Beck
*/
public class ControlConfigParser extends RootConfigImplParser {
private static final Log log = LogFactory.getLog(ControlConfigParser.class);
private static final SchemaResolver SCHEMA_RESOLVER = new SchemaResolver(
"/de/odysseus/calyxo/control/conf/impl/calyxo-control-config.xsd"
);
private static final DTDResolver DTD_RESOLVER = new DTDResolver(
"-//Odysseus Software GmbH//DTD Calyxo Control 0.9//EN",
"/de/odysseus/calyxo/control/conf/impl/calyxo-control-config.dtd"
);
private final Rule exceptionId = new UniqueIdRule("ex", "id");
/**
* Constructor.
*/
public ControlConfigParser(ModuleContext context) {
super(context);
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.base.conf.impl.RootConfigImplParser#createRoot()
*/
protected RootConfigImpl createRoot() {
return new ControlConfigImpl();
}
/* (non-Javadoc)
* @see org.apache.commons.digester.RuleSet#addRuleInstances(org.apache.commons.digester.Digester)
*/
public void addRuleInstances(Digester digester) {
digester.setRuleNamespaceURI("http://calyxo.odysseus.de/xml/ns/control");
// Handle exceptions element
digester.addObjectCreate("*/exception-handlers", ExceptionHandlersConfigImpl.class.getName());
digester.addSetProperties("*/exception-handlers");
digester.addSetNext("*/exception-handlers", "setExceptionsConfig", ExceptionHandlersConfigImpl.class.getName());
// Handle exception elements
digester.addObjectCreate("*/exception-handler", ExceptionHandlerConfigImpl.class.getName());
digester.addSetProperties("*/exception-handler", "class", "className");
digester.addRule("*/exception-handler", exceptionId);
digester.addSetNext("*/exception-handler", "add", ExceptionHandlerConfigImpl.class.getName());
// Handle dispatches element
digester.addObjectCreate("*/dispatches", DispatchesConfigImpl.class.getName());
digester.addSetProperties("*/dispatches");
digester.addSetNext("*/dispatches", "setDispatchesConfig", DispatchesConfigImpl.class.getName());
// Handle actions element
digester.addObjectCreate("*/actions", ActionsConfigImpl.class.getName());
digester.addSetProperties("*/actions");
digester.addSetNext("*/actions", "setActionsConfig", ActionsConfigImpl.class.getName());
// Handle action elements
digester.addObjectCreate("*/action", ActionConfigImpl.class.getName());
digester.addSetProperties("*/action", "class", "className");
digester.addSetNext("*/action", "add", ActionConfigImpl.class.getName());
// Handle params elements
digester.addObjectCreate("*/filter", FilterConfigImpl.class.getName());
digester.addSetProperties("*/filter", "class", "className");
digester.addSetNext("*/filter", "add", FilterConfigImpl.class.getName());
// Handle dispatch elements
digester.addObjectCreate("*/dispatch", DispatchConfigImpl.class.getName());
digester.addSetProperties("*/dispatch");
digester.addSetNext("*/dispatch", "add", DispatchConfigImpl.class.getName());
// Handle plugins element
digester.addObjectCreate("*/plugins", PluginsConfigImpl.class.getName());
digester.addSetProperties("*/plugins");
digester.addSetNext("*/plugins", "setPluginsConfig", PluginsConfigImpl.class.getName());
// Handle plugin elements
digester.addObjectCreate("*/plugin", PluginConfigImpl.class.getName());
digester.addSetProperties("*/plugin", "class", "className");
digester.addSetNext("*/plugin", "add", PluginConfigImpl.class.getName());
// Handle params elements
digester.addObjectCreate("*/params", ParamsConfigImpl.class.getName());
digester.addSetProperties("*/params");
digester.addSetNext("*/params", "add", ParamsConfigImpl.class.getName());
// Handle param elements
digester.addObjectCreate("*/param", ParamConfigImpl.class.getName());
digester.addSetProperties("*/param");
digester.addSetNext("*/param", "add", ParamConfigImpl.class.getName());
}
/**
* Parse control configuration files..
* @param urls pointing to xml configuration files
* @return Control configuration
* @throws ConfigException on error during parse or initialization
*/
public ControlConfig parse(URL[] urls) throws ConfigException {
return (ControlConfig)parseAll(urls);
}
/* (non-Javadoc)
* @see de.odysseus.calyxo.base.conf.impl.RootConfigImplParser#getDtdResolver()
*/
protected DTDResolver getDtdResolver() {
return DTD_RESOLVER;
}
/**
* Answer <code>null</code>
* @see de.odysseus.calyxo.base.conf.impl.RootConfigImplParser#getSchemaResolver()
*/
protected SchemaResolver getSchemaResolver() {
return SCHEMA_RESOLVER;
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.base.conf.impl.RootConfigImplParser#getLog()
*/
protected Log getLog() {
return log;
}
}
|