Author: simonetripodi
Date: Wed Sep  1 20:12:12 2010
New Revision: 991680

URL: http://svn.apache.org/viewvc?rev=991680&view=rev
Log:
added the strategies package description in the xdoc documentation

Modified:
    commons/proper/digester/trunk/src/site/xdoc/plugins.xml

Modified: commons/proper/digester/trunk/src/site/xdoc/plugins.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/site/xdoc/plugins.xml?rev=991680&r1=991679&r2=991680&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/site/xdoc/plugins.xml (original)
+++ commons/proper/digester/trunk/src/site/xdoc/plugins.xml Wed Sep  1 20:12:12 
2010
@@ -242,5 +242,63 @@ created.</p>
       </subsection>
 
     </section>
+
+    <section name="Plugin strategies">
+      <p>
+This package contains "rule-finding" strategy classes, and their associated
+"helper" loader classes.</p>
+<p>
+Note that you do not need to understand or deal with any of the classes in
+this package in order to use the plugins functionality. If you wish to use
+plugins functionality in non-english languages and therefore want to
+change the attribute names used on plugin declaration tags ("id", "file", etc)
+then you will need some familiarity with this package. Otherwise, this package
+is only relevant to people really wishing to tweak plugins in unexpected
+ways. If this is the case, come and talk to us on the digester email lists
+as we would be interested in knowing about your requirements.</p>
+<p>
+When the plugins module is being used and the input xml indicates that
+a specific plugin class is to be instantiated, that class may then wish
+to configure itself from the xml attributes on that tag or xml attributes
+and elements nested within that tag.</p>
+<p>
+The question is: how is the digester going to figure out where the plugin
+keeps its custom rules which are to be applied to the xml within that
+plugin tag?</p>
+<p>
+Well, the answer is that there is a list of "rule finding strategies",
+generally containing an instance of each of the Finder classes in this 
+package in a specific order. The strategies provided here should satisfy 
+just about everyone, but if they don't you can add extra strategies if 
+desired.</p>
+<p>
+A RuleFinder is essentially a "strategy" or "algorithm" for finding the dynamic
+rules associated with a plugin class. When a plugin declaration is encountered 
+in the input xml, the PluginContext object is asked for the list of RuleFinder 
+objects, then each RuleFinder instance in turn is passed the declaration 
+parameters, and asked "are you able to locate custom parsing rules for this 
+declaration?". When one can, it returns a RuleLoader instance which is 
+remembered. When the input xml indicates that an instance of the declared 
+plugin class is to be created, that RuleLoader is invoked to temporarily add 
+the relevant custom rules to the Digester in order to map xml 
+attributes/elements/etc into the instantiated plugin object. Once the end of 
+the plugin tag is encountered, those temporary rules are removed. This repeats 
+each time the input xml indicates that an instance of a plugin class is to be 
+instantiated.</p>
+<p>
+If the plugin is declared "inline", using the "plugin-class" attribute
+instead of using "plugin-id" to reference a previous declaration then the
+process is exactly the same, except that the RuleFinder objects don't
+have any user-provided attribute "hints" to tell them where the custom
+rules are.</p>
+<p>
+The RuleFinder list is carefully ordered; classes which look at the 
+user-provided data in the declaration come first, and classes which look in 
+"well-known places" come later so that users can override default behaviour by 
+providing the appropriate tags on the plugin declaration.</p>
+<p>
+See the javadoc on the different Finder classes for information on what
+each does, and what attribute (if any) it looks for in the declaration.</p>
+    </section>
   </body>
 </document>


Reply via email to