package org.apache.commons.digester3.xmlrules;

/*
 * 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.
 */

import java.util.Set;

import org.apache.commons.digester3.binder.LinkedRuleBuilder;
import org.apache.commons.digester3.binder.RulesBinder;
import org.apache.commons.digester3.binder.RulesModule;

/**
 *
 */
final class XmlRulesModule
    implements RulesModule
{

    private final NameSpaceURIRulesBinder targetRulesBinder;

    private final Set<String> rootSystemIds;

    private final String rootPath;

    private WithMemoryRulesBinder memoryRulesBinder;

    public XmlRulesModule( final NameSpaceURIRulesBinder targetRulesBinder, Set<String> rootSystemIds,
    /* @Nullable */String rootPath )
    {
        this.targetRulesBinder = targetRulesBinder;
        this.rootSystemIds = rootSystemIds;
        this.rootPath = rootPath;
    }

    
{@inheritDoc}
/** * {@inheritDoc} */
public void configure( RulesBinder rulesBinder ) { if ( rulesBinder instanceof WithMemoryRulesBinder ) { memoryRulesBinder = (WithMemoryRulesBinder) rulesBinder; } else { memoryRulesBinder = new WithMemoryRulesBinder( rulesBinder ); if ( !rootSystemIds.isEmpty() ) { memoryRulesBinder.getIncludedFiles().addAll( rootSystemIds ); } } PatternStack patternStack = memoryRulesBinder.getPatternStack(); if ( rootPath != null ) { patternStack.push( rootPath ); } try { forPattern( "digester-rules" ).addRule( new SetNamespaceURIRule( targetRulesBinder ) ); forPattern( "*/pattern" ).addRule( new PatternRule( patternStack ) ); forPattern( "*/include" ).addRule( new IncludeRule( memoryRulesBinder, targetRulesBinder ) ); forPattern( "*/bean-property-setter-rule" ).addRule( new BeanPropertySetterRule( targetRulesBinder, patternStack ) ); forPattern( "*/call-method-rule" ).addRule( new CallMethodRule( targetRulesBinder, patternStack ) ); forPattern( "*/call-param-rule" ).addRule( new CallParamRule( targetRulesBinder, patternStack ) ); forPattern( "*/factory-create-rule" ).addRule( new FactoryCreateRule( targetRulesBinder, patternStack ) ); forPattern( "*/node-create-rule" ).addRule( new NodeCreateRule( targetRulesBinder, patternStack ) ); forPattern( "*/object-create-rule" ).addRule( new ObjectCreateRule( targetRulesBinder, patternStack ) ); forPattern( "*/object-param-rule" ).addRule( new ObjectParamRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-properties-rule" ).addRule( new SetPropertiesRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-properties-rule/alias" ) .addRule( new SetPropertiesAliasRule() ); forPattern( "*/set-properties-rule/ignore" ) .addRule( new SetPropertiesIgnoreRule() ); forPattern( "*/set-property-rule" ).addRule( new SetPropertyRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-nested-properties-rule" ) .addRule( new SetNestedPropertiesRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-nested-properties-rule/alias" ) .addRule( new SetNestedPropertiesAliasRule() ); forPattern( "*/set-nested-properties-rule/ignore" ) .addRule( new SetNestedPropertiesIgnoreRule() ); forPattern( "*/set-top-rule" ).addRule( new SetTopRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-next-rule" ).addRule( new SetNextRule( targetRulesBinder, patternStack ) ); forPattern( "*/set-root-rule" ).addRule( new SetRootRule( targetRulesBinder, patternStack ) ); } finally { memoryRulesBinder = null; } }
Params:
  • pattern –
Returns:
/** * @param pattern * @return */
protected LinkedRuleBuilder forPattern( String pattern ) { return memoryRulesBinder.forPattern( pattern ); } }