Author: craigmcc Date: Thu Oct 27 23:20:11 2005 New Revision: 329122 URL: http://svn.apache.org/viewcvs?rev=329122&view=rev Log: Add the ability to configure arbitrary properties of custom implementation classes for the dialog configuration, by specifying nested elements of type
<property name="foo" value="bar"/> inside the configuration elements for dialogs, states, and transitions. This implements the Option #2 solution discussed in the referenced Bugzilla issue. Submitted by: Sean Schofield <sean.schofield AT gmail.com> PR: Bugzilla #36439 Modified: struts/shale/trunk/build.xml struts/shale/trunk/core-library/src/conf/dialog.dtd struts/shale/trunk/core-library/src/java/org/apache/shale/dialog/config/ConfigurationParser.java Modified: struts/shale/trunk/build.xml URL: http://svn.apache.org/viewcvs/struts/shale/trunk/build.xml?rev=329122&r1=329121&r2=329122&view=diff ============================================================================== --- struts/shale/trunk/build.xml (original) +++ struts/shale/trunk/build.xml Thu Oct 27 23:20:11 2005 @@ -359,6 +359,17 @@ </target> + <target name="test" + description="Execute 'test' on all modules"> + + <antcall target="execute"> + <param name="target" + value="test"/> + </antcall> + + </target> + + <!-- =================== Initialize Local Repository ===================== --> Modified: struts/shale/trunk/core-library/src/conf/dialog.dtd URL: http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/conf/dialog.dtd?rev=329122&r1=329121&r2=329122&view=diff ============================================================================== --- struts/shale/trunk/core-library/src/conf/dialog.dtd (original) +++ struts/shale/trunk/core-library/src/conf/dialog.dtd Thu Oct 27 23:20:11 2005 @@ -56,7 +56,7 @@ start Name of the starting state for this dialog. --> -<!ELEMENT dialog ((transition|action|end|subdialog|view)*)> +<!ELEMENT dialog ((transition|action|end|subdialog|view|property)*)> <!ATTLIST dialog className CDATA #IMPLIED> <!ATTLIST dialog name CDATA #REQUIRED> <!ATTLIST dialog start CDATA #REQUIRED> @@ -78,7 +78,7 @@ arguments, and returns a String that represents the logical outcome of this state. --> -<!ELEMENT action (transition*)> +<!ELEMENT action (property|transition*)> <!ATTLIST action className CDATA #IMPLIED> <!ATTLIST action name CDATA #REQUIRED> <!ATTLIST action method CDATA #REQUIRED> @@ -101,7 +101,7 @@ executed. --> -<!ELEMENT subdialog (transition*)> +<!ELEMENT subdialog (property|transition*)> <!ATTLIST subdialog className CDATA #IMPLIED> <!ATTLIST subdialog name CDATA #REQUIRED> <!ATTLIST subdialog dialogName CDATA #REQUIRED> @@ -127,7 +127,7 @@ to determine the next state transition. --> -<!ELEMENT view (transition*)> +<!ELEMENT view (property|transition*)> <!ATTLIST view className CDATA #IMPLIED> <!ATTLIST view name CDATA #REQUIRED> <!ATTLIST view viewId CDATA #REQUIRED> @@ -152,7 +152,7 @@ returned to the parent dialog to drive its own state transition. --> -<!ELEMENT end (transition*)> +<!ELEMENT end (property|transition*)> <!ATTLIST end className CDATA #IMPLIED> <!ATTLIST end name CDATA #REQUIRED> <!ATTLIST end viewId CDATA #IMPLIED> @@ -176,8 +176,25 @@ attribute of a state defined in this dialog. --> -<!ELEMENT transition EMPTY> +<!ELEMENT transition (property)*> <!ATTLIST transition className CDATA #IMPLIED> <!ATTLIST transition outcome CDATA #REQUIRED> <!ATTLIST transition target CDATA #REQUIRED> + +<!-- The "property" element allows the configuration of an arbitrary property + of the base class (typically customized via the "className" attribute) + instanace for the surrounding configuration element. The following + attributes are defined: + + name Property name to be configured. + + value String representation of the value to which + this property will be set. Appropriate type + conversion will be applied, based on the type + of the underlying property. +--> + +<!ELEMENT property EMPTY> +<!ATTLIST property name CDATA #REQUIRED> +<!ATTLIST property value CDATA #REQUIRED> Modified: struts/shale/trunk/core-library/src/java/org/apache/shale/dialog/config/ConfigurationParser.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/java/org/apache/shale/dialog/config/ConfigurationParser.java?rev=329122&r1=329121&r2=329122&view=diff ============================================================================== --- struts/shale/trunk/core-library/src/java/org/apache/shale/dialog/config/ConfigurationParser.java (original) +++ struts/shale/trunk/core-library/src/java/org/apache/shale/dialog/config/ConfigurationParser.java Thu Oct 27 23:20:11 2005 @@ -188,12 +188,14 @@ // dialogs/dialog digester.addObjectCreate("dialogs/dialog", "className", DialogImpl.class); digester.addSetProperties("dialogs/dialog"); + digester.addSetProperty("dialogs/dialog/property", "name", "value"); digester.addRule("dialogs/dialog", new AddDialogRule()); // dialogs/dialog/action digester.addObjectCreate("dialogs/dialog/action", "className", ActionStateImpl.class); digester.addSetProperties("dialogs/dialog/action"); + digester.addSetProperty("dialogs/dialog/action/property", "name", "value"); digester.addSetNext("dialogs/dialog/action", "addState", "org.apache.shale.dialog.State"); @@ -201,6 +203,7 @@ digester.addObjectCreate("dialogs/dialog/action/transition", "className", TransitionImpl.class); digester.addSetProperties("dialogs/dialog/action/transition"); + digester.addSetProperty("dialogs/dialog/action/transition/property", "name", "value"); digester.addSetNext("dialogs/dialog/action/transition", "addTransition", "org.apache.shale.dialog.Transition"); @@ -208,6 +211,7 @@ digester.addObjectCreate("dialogs/dialog/end", "className", EndStateImpl.class); digester.addSetProperties("dialogs/dialog/end"); + digester.addSetProperty("dialogs/dialog/end/property", "name", "value"); digester.addSetNext("dialogs/dialog/end", "addState", "org.apache.shale.dialog.State"); @@ -215,6 +219,7 @@ digester.addObjectCreate("dialogs/dialog/end/transition", "className", TransitionImpl.class); digester.addSetProperties("dialogs/dialog/end/transition"); + digester.addSetProperty("dialogs/dialog/end/transition/property", "name", "value"); digester.addSetNext("dialogs/dialog/end/transition", "addTransition", "org.apache.shale.dialog.Transition"); @@ -222,6 +227,7 @@ digester.addObjectCreate("dialogs/dialog/subdialog", "className", SubdialogStateImpl.class); digester.addSetProperties("dialogs/dialog/subdialog"); + digester.addSetProperty("dialogs/dialog/subdialog/property", "name", "value"); digester.addSetNext("dialogs/dialog/subdialog", "addState", "org.apache.shale.dialog.State"); @@ -229,6 +235,7 @@ digester.addObjectCreate("dialogs/dialog/subdialog/transition", "className", TransitionImpl.class); digester.addSetProperties("dialogs/dialog/subdialog/transition"); + digester.addSetProperty("dialogs/dialog/subdialog/transition/property", "name", "value"); digester.addSetNext("dialogs/dialog/subdialog/transition", "addTransition", "org.apache.shale.dialog.Transition"); @@ -236,6 +243,7 @@ digester.addObjectCreate("dialogs/dialog/transition", "className", TransitionImpl.class); digester.addSetProperties("dialogs/dialog/transition"); + digester.addSetProperty("dialogs/dialog/transition/property", "name", "value"); digester.addSetNext("dialogs/dialog/transition", "addTransition", "org.apache.shale.dialog.Transition"); @@ -243,6 +251,7 @@ digester.addObjectCreate("dialogs/dialog/view", "className", ViewStateImpl.class); digester.addSetProperties("dialogs/dialog/view"); + digester.addSetProperty("dialogs/dialog/view/property", "name", "value"); digester.addSetNext("dialogs/dialog/view", "addState", "org.apache.shale.dialog.State"); @@ -250,6 +259,7 @@ digester.addObjectCreate("dialogs/dialog/view/transition", "className", TransitionImpl.class); digester.addSetProperties("dialogs/dialog/view/transition"); + digester.addSetProperty("dialogs/dialog/view/transition/property", "name", "value"); digester.addSetNext("dialogs/dialog/view/transition", "addTransition", "org.apache.shale.dialog.Transition"); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]