001 package org.apache.commons.digester3; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 023 /** 024 * <p> 025 * <code>AbstractRuleImpl</code> provides basic services for <code>Rules</code> implementations. Extending this class 026 * should make it easier to create a <code>Rules</code> implementation. 027 * </p> 028 * <p> 029 * <code>AbstractRuleImpl</code> manages the <code>Digester</code> and <code>namespaceUri</code> properties. If the 030 * subclass overrides {@link #registerRule} (rather than {@link #add}), then the <code>Digester</code> and 031 * <code>namespaceURI</code> of the <code>Rule</code> will be set correctly before it is passed to 032 * <code>registerRule</code>. The subclass can then perform whatever it needs to do to register the rule. 033 * </p> 034 * 035 * @since 1.5 036 */ 037 public abstract class AbstractRulesImpl 038 implements Rules 039 { 040 041 // ------------------------------------------------------------- Fields 042 043 /** Digester using this <code>Rules</code> implementation */ 044 private Digester digester; 045 046 /** Namespace uri to assoicate with subsequent <code>Rule</code>'s */ 047 private String namespaceURI; 048 049 // ------------------------------------------------------------- Properties 050 051 /** 052 * {@inheritDoc} 053 */ 054 public Digester getDigester() 055 { 056 return digester; 057 } 058 059 /** 060 * {@inheritDoc} 061 */ 062 public void setDigester( Digester digester ) 063 { 064 this.digester = digester; 065 } 066 067 /** 068 * {@inheritDoc} 069 */ 070 public String getNamespaceURI() 071 { 072 return namespaceURI; 073 } 074 075 /** 076 * {@inheritDoc} 077 */ 078 public void setNamespaceURI( String namespaceURI ) 079 { 080 this.namespaceURI = namespaceURI; 081 } 082 083 // --------------------------------------------------------- Public Methods 084 085 /** 086 * {@inheritDoc} 087 */ 088 public final void add( String pattern, Rule rule ) 089 { 090 // set up rule 091 if ( this.digester != null ) 092 { 093 rule.setDigester( this.digester ); 094 } 095 096 if ( this.namespaceURI != null ) 097 { 098 rule.setNamespaceURI( this.namespaceURI ); 099 } 100 101 registerRule( pattern, rule ); 102 } 103 104 /** 105 * Register rule at given pattern. The the Digester and namespaceURI properties of the given <code>Rule</code> can 106 * be assumed to have been set properly before this method is called. 107 * 108 * @param pattern Nesting pattern to be matched for this Rule 109 * @param rule Rule instance to be registered 110 */ 111 protected abstract void registerRule( String pattern, Rule rule ); 112 113 }