org.apache.tomcat.util.digester

## Class WithDefaultsRulesWrapper

- java.lang.Object
- - org.apache.tomcat.util.digester.WithDefaultsRulesWrapper

All Implemented Interfaces:
  Rules

    public class WithDefaultsRulesWrapper
    extends Object
    implements Rules

`Rules` Decorator that returns default rules when no matches are returned by the wrapped implementation.

This allows default `Rule` instances to be added to any existing `Rules` implementation. These default `Rule` instances will be returned for any match for which the wrapped implementation does not return any matches.

For example,

       Rule alpha;
       ...
       WithDefaultsRulesWrapper rules = new WithDefaultsRulesWrapper(new BaseRules());
       rules.addDefault(alpha);
       ...
       digester.setRules(rules);
       ...

when a pattern does not match any other rule, then rule alpha will be called.

`WithDefaultsRulesWrapper` follows the Decorator pattern.

Since:
  1.6

### Constructor Summary

Constructors
Constructor and Description
`WithDefaultsRulesWrapper(Rules wrappedRules)` Base constructor.

### Method Summary

Methods
`void` `add(String pattern, Rule rule)` Adds a Rule to be fired on given pattern.
`void` `addDefault(Rule rule)` Adds a rule to be fired when wrapped implementation returns no matches
`void` `clear()` Clears all Rule's
`List<Rule>` `getDefaults()` Gets Rule's which will be fired when the wrapped implementation returns no matches
`Digester` `getDigester()` Gets digester using these Rules
`String` `getNamespaceURI()` Gets namespace to apply to Rule's added
`List<Rule>` `match(String namespaceURI, String pattern)` Return list of rules matching given pattern.
`List<Rule>` `rules()` Gets all rules
`void` `setDigester(Digester digester)` Sets digester using these Rules
`void` `setNamespaceURI(String namespaceURI)` Sets namespace to apply to Rule's added subsequently

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### WithDefaultsRulesWrapper

    public WithDefaultsRulesWrapper(Rules wrappedRules)

Base constructor.

Parameters:
  `wrappedRules` - the wrapped `Rules` implementation, not null
Throws:
  `IllegalArgumentException` - when `wrappedRules` is null

### Method Detail

#### getDigester

    public Digester getDigester()

Gets digester using these Rules

Specified by:
  `getDigester` in interface `Rules`

#### setDigester

    public void setDigester(Digester digester)

Sets digester using these Rules

Specified by:
  `setDigester` in interface `Rules`
Parameters:
  `digester` - The newly associated Digester instance

#### getNamespaceURI

    public String getNamespaceURI()

Gets namespace to apply to Rule's added

Specified by:
  `getNamespaceURI` in interface `Rules`

#### setNamespaceURI

    public void setNamespaceURI(String namespaceURI)

Sets namespace to apply to Rule's added subsequently

Specified by:
  `setNamespaceURI` in interface `Rules`
Parameters:
  `namespaceURI` - Namespace URI that must match on all subsequently added rules, or `null` for matching regardless of the current namespace URI

#### getDefaults

    public List<Rule> getDefaults()

Gets Rule's which will be fired when the wrapped implementation returns no matches

#### match

    public List<Rule> match(String namespaceURI,
                   String pattern)

Return list of rules matching given pattern. If wrapped implementation returns any matches return those. Otherwise, return default matches.

Specified by:
  `match` in interface `Rules`
Parameters:
  `namespaceURI` - Namespace URI for which to select matching rules, or `null` to match regardless of namespace URI
  `pattern` - Nesting pattern to be matched

#### addDefault

    public void addDefault(Rule rule)

Adds a rule to be fired when wrapped implementation returns no matches

#### rules

    public List<Rule> rules()

Gets all rules

Specified by:
  `rules` in interface `Rules`

#### clear

    public void clear()

Clears all Rule's

Specified by:
  `clear` in interface `Rules`

#### add

    public void add(String pattern,
           Rule rule)

Adds a Rule to be fired on given pattern. Pattern matching is delegated to wrapped implementation.

Specified by:
  `add` in interface `Rules`
Parameters:
  `pattern` - Nesting pattern to be matched for this Rule
  `rule` - Rule instance to be registered