Java Doc for ExtendedBaseRules.java in  » Library » Apache-commons-digester-1.8-src » org » apache » commons » digester » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Library » Apache commons digester 1.8 src » org.apache.commons.digester 
Source Cross Reference  Class Diagram Java Document (Java Doc) 


java.lang.Object
   org.apache.commons.digester.RulesBase
      org.apache.commons.digester.ExtendedBaseRules

ExtendedBaseRules
public class ExtendedBaseRules extends RulesBase (Code)

Extension of RulesBase for complex schema.

This is an extension of the basic pattern matching scheme intended to improve support for mapping complex xml-schema. It is intended to be a minimal extension of the standard rules big enough to support complex schema but without the full generality offered by more exotic matching pattern rules.

When should you use this rather than the original?

This pattern-matching engine is complex and slower than the basic default RulesBase class, but offers more functionality:

  • Universal patterns allow patterns to be specified which will match regardless of whether there are "better matching" patterns available.
  • Parent-match patterns (eg "a/b/?") allow matching for all direct children of a specified element.
  • Ancestor-match patterns (eg "a/b/*") allow matching all elements nested within a specified element to any nesting depth.
  • Completely-wild patterns ("*" or "!*") allow matching all elements.

Universal Match Patterns

The default RulesBase pattern-matching engine always attempts to find the "best matching pattern", and will ignore rules associated with other patterns that match but are not "as good". As an example, if the pattern "a/b/c" is associated with rules 1 and 2, and "*/c" is associated with rules 3 and 4 then element "a/b/c" will cause only rules 1 and 2 to execute. Rules 3 and 4 do have matching patterns, but because the patterns are shorter and include wildcard characters they are regarded as being "not as good" as a direct match. In general, exact patterns are better than wildcard patterns, and among multiple patterns with wildcards, the longest is preferred. See the RulesBase class for more information.

This feature of preferring "better" patterns can be a powerful tool. However it also means that patterns can interact in unexpected ways.

When using the ExtendedBaseRules, any pattern prefixed with '!' bypasses the "best match" feature. Even if there is an exact match or a longer wildcard match, patterns prefixed by '!' will still be tested to see if they match, and if so their associated Rule objects will be included in the set of rules to be executed in the normal manner.

  • Pattern "!*/a/b" matches whenever an 'b' element is inside an 'a'.
  • Pattern "!a/b/?" matches any child of a parent matching "a/b" (see "Parent Match Patterns").
  • Pattern "!*/a/b/?" matches any child of a parent matching "!*/a/b" (see "Parent Match Patterns").
  • Pattern "!a/b/*" matches any element whose path starts with "a" then "b" (see "Ancestor Match Patterns").
  • Pattern "!*/a/b/*" matches any elements whose path contains 'a/b' (see "Ancestor Match Patterns").

Parent Match Patterns

These will match direct child elements of a particular parent element.

  • "a/b/c/?" matches any child whose parent matches "a/b/c". Exact parent rules take precedence over Ancestor Match patterns.
  • "*/a/b/c/?" matches any child whose parent matches "*/a/b/c". The longest matching still applies to parent matches but the length excludes the '?', which effectively means that standard wildcard matches with the same level of depth are chosen in preference.

Ancestor Match Patterns

These will match elements whose parentage includes a particular sequence of elements.

  • "a/b/*" matches any element whose path starts with 'a' then 'b'. Exact parent and parent match rules take precedence. The longest ancestor match will take precedence.
  • "*/a/b/*" matches any elements whose path contains an element 'a' followed by an element 'b'. The longest matching still applies but the length excludes the '*' at the end.

Completely Wild Patterns

Pattern "*" matches every pattern that isn't matched by any other basic rule.

Pattern "!*" matches every pattern.

Using The Extended Rules

By default, a Digester instance uses a RulesBase instance as its pattern matching engine. To use an ExtendedBaseRules instance, call the Digester.setRules method before adding any Rule objects to the digester instance:

 Digester digester = new Digester();
 digester.setRules( new ExtendedBaseRules() );
 

The most important thing to remember when using the extended rules is that universal and non-universal patterns are completely independent. Universal patterns are never affected by the addition of new patterns or the removal of existing ones. Non-universal patterns are never affected by the addition of new universal patterns or the removal of existing universal patterns. As in the basic matching rules, non-universal (basic) patterns can be affected by the addition of new non-universal patterns or the removal of existing non-universal patterns, because only rules associated with the "best matching" pattern for each xml element are executed.

This means that you can use universal patterns to build up the simple parts of your structure - for example defining universal creation and property setting rules. More sophisticated and complex mapping will require non-universal patterns and this might mean that some of the universal rules will need to be replaced by a series of special cases using non-universal rules. But by using universal rules as your backbone, these additions should not break your existing rules.





Method Summary
public  voidadd(String pattern, Rule rule)
     Register a new Rule instance matching the specified pattern.
public  Listmatch(String namespace, String pattern)
     Return a List of all registered Rule instances that match the specified nesting pattern, or a zero-length List if there are no matches.



Method Detail
add
public void add(String pattern, Rule rule)(Code)
Register a new Rule instance matching the specified pattern.
Parameters:
  pattern - Nesting pattern to be matched for this Rule
Parameters:
  rule - Rule instance to be registered



match
public List match(String namespace, String pattern)(Code)
Return a List of all registered Rule instances that match the specified nesting pattern, or a zero-length List if there are no matches. If more than one Rule instance matches, they must be returned in the order originally registered through the add() method.
Parameters:
  pattern - Nesting pattern to be matched



Fields inherited from org.apache.commons.digester.RulesBase
protected HashMap cache(Code)(Java Doc)
protected Digester digester(Code)(Java Doc)
protected String namespaceURI(Code)(Java Doc)
protected ArrayList rules(Code)(Java Doc)

Methods inherited from org.apache.commons.digester.RulesBase
public void add(String pattern, Rule rule)(Code)(Java Doc)
public void clear()(Code)(Java Doc)
public Digester getDigester()(Code)(Java Doc)
public String getNamespaceURI()(Code)(Java Doc)
protected List lookup(String namespaceURI, String pattern)(Code)(Java Doc)
public List match(String pattern)(Code)(Java Doc)
public List match(String namespaceURI, String pattern)(Code)(Java Doc)
public List rules()(Code)(Java Doc)
public void setDigester(Digester digester)(Code)(Java Doc)
public void setNamespaceURI(String namespaceURI)(Code)(Java Doc)

Methods inherited from java.lang.Object
native protected Object clone() throws CloneNotSupportedException(Code)(Java Doc)
public boolean equals(Object obj)(Code)(Java Doc)
protected void finalize() throws Throwable(Code)(Java Doc)
final native public Class getClass()(Code)(Java Doc)
native public int hashCode()(Code)(Java Doc)
final native public void notify()(Code)(Java Doc)
final native public void notifyAll()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
final native public void wait(long timeout) throws InterruptedException(Code)(Java Doc)
final public void wait(long timeout, int nanos) throws InterruptedException(Code)(Java Doc)
final public void wait() throws InterruptedException(Code)(Java Doc)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.