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

[EMAIL PROTECTED] 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 [EMAIL PROTECTED] List} or [EMAIL PROTECTED] 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
[EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





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



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



Reply via email to