[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    Re: svn commit: r149113 - /jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/java/org/apache/com
From:       Paul Libbrecht <paul () activemath ! org>
Date:       2005-01-31 12:53:26
Message-ID: 826da9928653d48775459573dade604d () activemath ! org
[Download RAW message or body]

You must also have changed maven to svn... but the web-page still  
speaks about cvs! Or ?

paul


Le 31 janv. 05, à 13:22, Brett Porter a écrit :
> This fixed the original issue. I have another issue (as I mentioned  
> before), if you run "maven -e xdoc" on maven-1/plugins/trunk/ashkelon  
> you can see it. I'll investigate when I can, but hold off on that  
> release in the mean time :)
>
> - Brett
>
> polx@apache.org wrote:
>
>> Author: polx
>> Date: Sat Jan 29 23:47:05 2005
>> New Revision: 149113
>>
>> URL: http://svn.apache.org/viewcvs?view=rev&rev=149113
>> Log:
>> x:set was returning empty-list in case of empty results whereas it  
>> used
>> to return a null (which becomes an empty string often in jexl or  
>> jelly).
>> Fixed so that when asString, single, and delim attributes are not set,
>> it is backwards compatible.
>> Reverted to the multi-slot evaluation-style as opposed to the single
>> policy introduced by Michael Schuerig.
>> paul
>>
>> Modified:
>>    
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/java/org/ 
>> apache/commons/jelly/tags/xml/SetTag.java
>>    
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/test/org/ 
>> apache/commons/jelly/tags/xml/suite.jelly
>>
>> Modified:  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/java/org/ 
>> apache/commons/jelly/tags/xml/SetTag.java
>> Url:  
>> http://svn.apache.org/viewcvs/jakarta/commons/proper/jelly/trunk/ 
>> jelly-tags/xml/src/java/org/apache/commons/jelly/tags/xml/ 
>> SetTag.java?view=diff&rev=149113&p1=jakarta/commons/proper/jelly/ 
>> trunk/jelly-tags/xml/src/java/org/apache/commons/jelly/tags/xml/ 
>> SetTag.java&r1=149112&p2=jakarta/commons/proper/jelly/trunk/jelly- 
>> tags/xml/src/java/org/apache/commons/jelly/tags/xml/ 
>> SetTag.java&r2=149113
>> ====================================================================== 
>> ========
>> ---  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/java/org/ 
>> apache/commons/jelly/tags/xml/SetTag.java	(original)
>> +++  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/java/org/ 
>> apache/commons/jelly/tags/xml/SetTag.java	Sat Jan 29 23:47:05 2005
>> @@ -30,9 +30,10 @@
>> import org.jaxen.JaxenException;
>> import java.util.ArrayList;
>> +import java.util.Collections;
>> import java.util.Iterator;
>> import java.util.List;
>> -import java.util.Collections;
>> +import java.util.ListIterator;
>> /** A tag which defines a variable from an XPath expression.
>>   * This function creates a variable of type {@link List} or {@link  
>> org.dom4j.Node}
>> @@ -66,6 +67,8 @@
>>     private Boolean single = null;
>>         private Boolean asString = null;
>> +    +    private String delimiter = null;
>>     private String delim = null;
>> @@ -86,7 +89,7 @@
>>         Object xpathContext = getXPathContext();
>>         Object value = null;
>>         try {
>> -            if(single!=null && single.booleanValue()==true) {
>> +            if( single != null && single.booleanValue() == true ) {
>>                 value = select.selectSingleNode(xpathContext);
>>             } else {
>>                 value = select.evaluate(xpathContext);
>> @@ -97,29 +100,74 @@
>>         }
>>                 if (value instanceof List) {
>> +            List list = (List) value;
>>             // sort the list if xpCmp is set.
>>             if (xpCmp != null && (xpCmp.getXpath() != null)) {
>> -                Collections.sort((List)value, xpCmp);
>> +                Collections.sort(list, xpCmp);
>> +            }
>> +            if(list.isEmpty()) {
>> +                value = null;
>>             }
>>         }
>> +        -        switch ( determineReturnType() ) {
>> -        case RETURN_NODE_LIST:
>> -            value = valueAsList(value);
>> -            break;
>> -        case RETURN_FIRST_NODE:
>> -            value = valueAsSingle(value);
>> -            break;
>> -        case RETURN_STRING_LIST:
>> -            value = nodeListToStringList(valueAsList(value));
>> -            break;
>> -        case RETURN_DELIMITED_STRING_LIST:
>> -            value =  
>> joinDelimitedElements(nodeListToStringList(valueAsList(value)));
>> -            break;
>> -        case RETURN_FIRST_AS_STRING:
>> -            value = singleValueAsString(valueAsSingle(value));
>> -            break;
>> +        // handle single
>> +        if (single!=null) {
>> +            if (single.booleanValue() == true) {
>> +                if(value instanceof List) {
>> +                    List l = (List) value;
>> +                    if (l.size() == 0)
>> +                        value=null;
>> +                    else
>> +                        value=l.get(0);
>> +                }
>> +            } else { // single == false
>> +                if(! (value instanceof List) ) {
>> +                    List l = null;
>> +                    if (value==null) {
>> +                        l = new ArrayList(0);
>> +                    } else {
>> +                        l = new ArrayList(1);
>> +                        l.add(value);
>> +                    }
>> +                    value = l;
>> +                }
>> +            }
>> +        }
>> +        +        // now convert the result(s) to string if need
>> +        if(asString != null && asString.booleanValue()) {
>> +            if(value instanceof Node) {
>> +                value = ((Node) value).getStringValue();
>> +            } else if(value instanceof List) {
>> +                for(ListIterator it = ((List) value).listIterator();  
>> it.hasNext(); ) {
>> +                    Object v = it.next();
>> +                    if(v instanceof Node) {
>> +                        v = ((Node) v).getStringValue();
>> +                        it.set(v);
>> +                    }
>> +                }
>> +            }
>>         }
>> +        +        // finally convert the result to a concatenated  
>> string if delimiter is defined
>> +        if(delimiter != null && value instanceof List) {
>> +            StringBuffer buff = new StringBuffer();
>> +            for(Iterator it = ((List) value).iterator();  
>> it.hasNext(); ) {
>> +                Object v = it.next();
>> +                if (v instanceof Node) {
>> +                    buff.append( ((Node) v).getStringValue());
>> +                } else {
>> +                    buff.append(v.toString());
>> +                }
>> +                if(it.hasNext()) {
>> +                    buff.append(delimiter);
>> +                }
>> +            }
>> +            buff.setLength(buff.length());
>> +            value = buff.toString();
>> +        }
>> +                //log.info( "Evaluated xpath: " + select + " as: " +  
>> value + " of type: " + value.getClass().getName() );
>> @@ -222,7 +270,8 @@
>>         It then guarantees that the result is of type
>>         {@link org.dom4j.Node} thereby making sure that, for example,
>>         when an element is selected, one can directly call such  
>> methods
>> -        as setAttribute.
>> +        as setAttribute.<br/>
>> +        If set to false, guarantees that a list is returned.
>>         If set to false, guarantees that a list is returned.
>>         */
>>     public void setSingle(boolean single) {
>> @@ -234,19 +283,21 @@
>>       * itself.
>>       * This ensures that, thereafter, string manipulations
>>       * can be performed on the result.
>> -      * Setting this attribute to true will also set the single
>> -      * attribute to true.
>>       */
>>     public void setAsString(boolean asString) {
>>         this.asString = new Boolean(asString);
>>     }
>>     /** If set, returns a string delimited by this delimiter.
>> -     */
>> +      * Implies <code>asString</code> to be true.
>> +      */
>>     public void setDelim(String delim) {
>> -        this.delim  = delim;
>> +        this.delimiter = delim;
>> +        if( delim!=null ) {
>> +            this.asString = Boolean.TRUE;
>> +        }
>>     }
>> -        +
>>     /** Sets the xpath expression to use to sort selected nodes.
>>      *  Ignored if single is true.
>>      */
>>
>> Modified:  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/test/org/ 
>> apache/commons/jelly/tags/xml/suite.jelly
>> Url:  
>> http://svn.apache.org/viewcvs/jakarta/commons/proper/jelly/trunk/ 
>> jelly-tags/xml/src/test/org/apache/commons/jelly/tags/xml/ 
>> suite.jelly?view=diff&rev=149113&p1=jakarta/commons/proper/jelly/ 
>> trunk/jelly-tags/xml/src/test/org/apache/commons/jelly/tags/xml/ 
>> suite.jelly&r1=149112&p2=jakarta/commons/proper/jelly/trunk/jelly- 
>> tags/xml/src/test/org/apache/commons/jelly/tags/xml/ 
>> suite.jelly&r2=149113
>> ====================================================================== 
>> ========
>> ---  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/test/org/ 
>> apache/commons/jelly/tags/xml/suite.jelly	(original)
>> +++  
>> jakarta/commons/proper/jelly/trunk/jelly-tags/xml/src/test/org/ 
>> apache/commons/jelly/tags/xml/suite.jelly	Sat Jan 29 23:47:05 2005
>> @@ -290,20 +290,37 @@
>>             <blip/>
>>             <blop id="bla">blop0</blop></root>
>>         </x:parse>
>> -        <x:set var="blopSingle" select="$blopElements/root/blop"  
>> single="true"/>
>>         <!-- should return the second -->
>> +        <x:set var="blopSingle" select="$blopElements/root/blop"  
>> single="true"/>
>>         <j:invokeStatic var="eltClass" className="java.lang.Class"  
>> method="forName"><j:arg value="org.dom4j.Element"/></j:invokeStatic>
>>         <test:assert  
>> test="${eltClass.isAssignableFrom(blopSingle.getClass())}"/>
>> +
>>         <j:set var="blopSingleText"><x:expr  
>> select="$blopSingle/text()"/></j:set>
>>         <test:assertEquals actual="${blopSingleText}"  
>> expected="blop1"/>
>> +
>>         <!-- check if selecting root/blip returns a list -->
>>         <x:set var="blip" select="$blopElements/root/blip"  
>> single="false"/>
>>         <j:invokeStatic var="listClass" className="java.lang.Class"  
>> method="forName"><j:arg value="java.util.List"/></j:invokeStatic>
>>         <test:assert  
>> test="${listClass.isAssignableFrom(blip.getClass())}"/>
>> +				
>>         <!-- check if selecting blop/@id asString and single returns  
>> a string -->
>>         <x:set var="blopId" select="$blopElements/root/blop/@id"  
>> asString="true" single="true"/>
>>         <j:invokeStatic var="stringClass" className="java.lang.Class"  
>> method="forName"><j:arg value="java.lang.String"/></j:invokeStatic>
>>         <test:assert  
>> test="${stringClass.isAssignableFrom(blopId.getClass())}"/>
>> +				
>> +				<!-- check if select blop/blurp with false single returns an  
>> empty list -->
>> +        <x:set var="blurp" select="$blopElements/root/blurp"  
>> single="false"/>
>> +        <j:invokeStatic var="listClass" className="java.lang.Class"  
>> method="forName"><j:arg value="java.util.List"/></j:invokeStatic>
>> +        <test:assert  
>> test="${listClass.isAssignableFrom(blip.getClass())}"/>
>> +				
>> +				<!-- check if select blop/blurp with no single or asString  
>> returns null -->
>> +        <x:set var="blurp" select="$blopElements/root/blurp"/>
>> +        <j:invokeStatic var="listClass" className="java.lang.Class"  
>> method="forName"><j:arg value="java.util.List"/></j:invokeStatic>
>> +				<j:set var="blurpAndX" value="${blurp}X"/>
>> +				blurp=${blurp}, blurpAndX=${blurpAndX}
>> +        <test:assert test="${'X' eq blurpAndX}"/>
>> +				
>> +				
>>   </test:case>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic