ControlConfigParser.java :  » Web-Framework » calyxo » de » odysseus » calyxo » control » conf » impl » Java Open Source

Java Open Source » Web Framework » calyxo 
calyxo » de » odysseus » calyxo » control » conf » impl » ControlConfigParser.java
/*
 * 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;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.