rdonkin     2003/03/27 10:54:45

  Modified:    digester/src/java/org/apache/commons/digester/xmlrules
                        DigesterRuleParser.java digester-rules.dtd
               digester/src/test/org/apache/commons/digester/xmlrules
                        DigesterLoaderTest.java
  Log:
  Added support for call-param from stack to xml rules.. Enhancement requested as bug  
#16413.
  
  Revision  Changes    Path
  1.13      +23 -1     
jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java
  
  Index: DigesterRuleParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- DigesterRuleParser.java   15 Mar 2003 18:38:54 -0000      1.12
  +++ DigesterRuleParser.java   27 Mar 2003 18:54:45 -0000      1.13
  @@ -556,7 +556,29 @@
               // create callparamrule
               int paramIndex = Integer.parseInt(attributes.getValue("paramnumber"));
               String attributeName = attributes.getValue("attrname");
  -            Rule callParamRule = new CallParamRule( paramIndex, attributeName );
  +            String fromStack = attributes.getValue("from-stack");
  +            Rule callParamRule = null;
  +            if (attributeName == null) {
  +                if (fromStack == null) {
  +                
  +                    callParamRule = new CallParamRule( paramIndex );
  +                
  +                } else {
  +
  +                    callParamRule = new CallParamRule( paramIndex, 
Boolean.valueOf(fromStack).booleanValue());
  +                    
  +                }
  +            } else {
  +                if (fromStack == null) {
  +                    
  +                    callParamRule = new CallParamRule( paramIndex, attributeName );
  +                    
  +                    
  +                } else {
  +                    // specifying both from-stack and attribute name is not allowed
  +                    throw new RuntimeException("Attributes from-stack and attrname 
cannot both be present.");
  +                }
  +            }
               return callParamRule;
           }
       }
  
  
  
  1.8       +8 -3      
jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/digester-rules.dtd
  
  Index: digester-rules.dtd
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/digester-rules.dtd,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- digester-rules.dtd        15 Mar 2003 18:38:54 -0000      1.7
  +++ digester-rules.dtd        27 Mar 2003 18:54:45 -0000      1.8
  @@ -80,12 +80,17 @@
       paramcount CDATA #IMPLIED
       paramtypes CDATA #IMPLIED>
   
  -<!-- CallParamRule -->
  +<!-- 
  +    CallParamRule 
  +    attrname - set param from attribute value (cannot be combined with from-stack)
  +    from-stack - set param from stack (cannot be combined with attrname)
  +    -->
   <!ELEMENT call-param-rule EMPTY>
   <!ATTLIST call-param-rule
       pattern  CDATA #IMPLIED
       paramnumber CDATA #REQUIRED
  -    attrname CDATA #IMPLIED>
  +    attrname CDATA #IMPLIED
  +    from-stack CDATA #IMPLIED>
   
   <!-- 
       FactoryCreateRule 
  
  
  
  1.12      +20 -0     
jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/DigesterLoaderTest.java
  
  Index: DigesterLoaderTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/DigesterLoaderTest.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DigesterLoaderTest.java   15 Mar 2003 18:36:15 -0000      1.11
  +++ DigesterLoaderTest.java   27 Mar 2003 18:54:45 -0000      1.12
  @@ -296,4 +296,24 @@
           }        
       }
   
  +    public void testCallParamRule() throws Exception {
  +    
  +        URL rules = ClassLoader.getSystemResource
  +            ("org/apache/commons/digester/xmlrules/test-call-param-rules.xml");
  +        
  +        String xml = "<?xml version='1.0' ?>"
  +                     + "<root><foo 
attr='long'><bar>short</bar><foobar><ping>tosh</ping></foobar></foo></root>";
  +        
  +        CallParamTestObject testObject = new CallParamTestObject();
  +        
  +        DigesterLoader.load(
  +                                    rules, 
  +                                    getClass().getClassLoader(), 
  +                                    new StringReader(xml),
  +                                    testObject);        
  +                                                                        
  +        assertEquals("Incorrect left value", "long", testObject.getLeft());
  +        assertEquals("Incorrect middle value", "short", testObject.getMiddle());
  +        assertEquals("Incorrect right value", "", testObject.getRight());
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to