| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.fop.render; |
| |
| import org.apache.avalon.framework.configuration.Configuration; |
| import org.apache.avalon.framework.configuration.ConfigurationException; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.fop.apps.FOPException; |
| import org.apache.fop.apps.FOUserAgent; |
| |
| /** |
| * Configurator for XMLHandler objects. |
| */ |
| public class XMLHandlerConfigurator extends AbstractRendererConfigurator { |
| |
| /** logger instance */ |
| protected static Log log = LogFactory.getLog(XMLHandlerConfigurator.class); |
| |
| /** |
| * Default constructor |
| * @param userAgent the user agent |
| */ |
| public XMLHandlerConfigurator(FOUserAgent userAgent) { |
| super(userAgent); |
| } |
| |
| /** |
| * Returns the configuration subtree for a specific renderer. |
| * @param cfg the renderer configuration |
| * @param namespace the namespace (i.e. the XMLHandler) for which the configuration should |
| * be returned |
| * @return the requested configuration subtree, null if there's no configuration |
| */ |
| private Configuration getHandlerConfig(Configuration cfg, String namespace) { |
| if (cfg == null || namespace == null) { |
| return null; |
| } |
| Configuration handlerConfig = null; |
| |
| Configuration[] children = cfg.getChildren("xml-handler"); |
| for (int i = 0; i < children.length; ++i) { |
| try { |
| if (children[i].getAttribute("namespace").equals(namespace)) { |
| handlerConfig = children[i]; |
| break; |
| } |
| } catch (ConfigurationException e) { |
| // silently pass over configurations without namespace |
| } |
| } |
| if (log.isDebugEnabled()) { |
| log.debug((handlerConfig == null ? "No" : "") |
| + "XML handler configuration found for namespace " + namespace); |
| } |
| return handlerConfig; |
| } |
| |
| /** |
| * Configures renderer context by setting the handler configuration on it. |
| * @param context the RendererContext (contains the user agent) |
| * @param ns the Namespace of the foreign object |
| * @throws FOPException if configuring the target objects fails |
| */ |
| public void configure(RendererContext context, String ns) throws FOPException { |
| //Optional XML handler configuration |
| Configuration cfg = getRendererConfig(context.getRenderer()); |
| if (cfg != null) { |
| cfg = getHandlerConfig(cfg, ns); |
| if (cfg != null) { |
| context.setProperty(RendererContextConstants.HANDLER_CONFIGURATION, cfg); |
| } |
| } |
| } |
| } |