You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2004/10/26 18:42:56 UTC
cvs commit: jakarta-commons/jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util Customer.java suite.jelly
dion 2004/10/26 09:42:56
Modified: jelly/jelly-tags/util/src/java/org/apache/commons/jelly/tags/util
UtilTagLibrary.java
jelly/jelly-tags/util/xdocs changes.xml
jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util
suite.jelly
Added: jelly/jelly-tags/util/src/java/org/apache/commons/jelly/tags/util
SortTag.java
jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util
Customer.java
Log:
Jelly-157: Add a util:sort tag to sort lists.
Revision Changes Path
1.6 +3 -2 jakarta-commons/jelly/jelly-tags/util/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java
Index: UtilTagLibrary.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jelly/jelly-tags/util/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- UtilTagLibrary.java 9 Sep 2004 12:22:43 -0000 1.5
+++ UtilTagLibrary.java 26 Oct 2004 16:42:56 -0000 1.6
@@ -30,7 +30,8 @@
registerTag("loadText", LoadTextTag.class);
registerTag("properties", PropertiesTag.class);
registerTag("replace", ReplaceTag.class);
- registerTag("tokenize", TokenizeTag.class);
registerTag("sleep", SleepTag.class);
+ registerTag("sort", SortTag.class);
+ registerTag("tokenize", TokenizeTag.class);
}
}
1.1 jakarta-commons/jelly/jelly-tags/util/src/java/org/apache/commons/jelly/tags/util/SortTag.java
Index: SortTag.java
===================================================================
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.tags.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.jelly.JellyTagException;
import org.apache.commons.jelly.MissingAttributeException;
import org.apache.commons.jelly.TagSupport;
import org.apache.commons.jelly.XMLOutput;
public class SortTag extends TagSupport {
/** things to sort */
private List items;
/** the variable to store the result in */
private String var;
/** property of the beans to sort on, if any */
private String property;
// Tag interface
//-------------------------------------------------------------------------
public void doTag(final XMLOutput output) throws JellyTagException {
if (var == null)
{
throw new MissingAttributeException("var");
}
if (items == null) {
throw new MissingAttributeException("items");
}
List sorted = new ArrayList(items);
if (property == null) {
Collections.sort(sorted);
} else {
BeanComparator comparator = new BeanComparator(property);
Collections.sort(sorted, comparator);
}
context.setVariable(var, sorted);
}
/**
* Set the items to be sorted
* @param newItems some collection
*/
public void setItems(List newItems) {
items = newItems;
}
/**
* The variable to hold the sorted collection.
* @param newVar the name of the variable.
*/
public void setVar(String newVar) {
var = newVar;
}
public void setProperty(String newProperty)
{
property = newProperty;
}
}
1.5 +1 -0 jakarta-commons/jelly/jelly-tags/util/xdocs/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/jakarta-commons/jelly/jelly-tags/util/xdocs/changes.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- changes.xml 12 Sep 2004 16:04:59 -0000 1.4
+++ changes.xml 26 Oct 2004 16:42:56 -0000 1.5
@@ -25,6 +25,7 @@
</properties>
<body>
<release version="1.1-SNAPSHOT" date="in CVS">
+ <action dev="dion" type="add" issue="JELLY-157">Add util:sort to sort lists, including sorting by bean properties</action>
<action dev="dion" type="update" issue="JELLY-57" due-to="Bill Keese">support encoding parameter for util:loadText</action>
</release>
<release version="1.0" date="2004-09-10">
1.6 +37 -0 jakarta-commons/jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util/suite.jelly
Index: suite.jelly
===================================================================
RCS file: /home/cvs/jakarta-commons/jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util/suite.jelly,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- suite.jelly 31 Aug 2004 09:16:28 -0000 1.5
+++ suite.jelly 26 Oct 2004 16:42:56 -0000 1.6
@@ -150,5 +150,42 @@
var="suite" />
<test:assert test="${suite != null}" >The suite should exist</test:assert>
</test:case>
+
+ <test:case name="testSortBasic">
+ <j:new var="testCollection" className="java.util.ArrayList"/>
+ <j:mute>
+ ${testCollection.add('Hello')}
+ ${testCollection.add('World')}
+ ${testCollection.add('Jelly')}
+ </j:mute>
+ <util:sort var="sorted" items="${testCollection}" />
+ <test:assertEquals expected="Hello" actual="${sorted[0]}"/>
+ <test:assertEquals expected="Jelly" actual="${sorted[1]}"/>
+ <test:assertEquals expected="World" actual="${sorted[2]}"/>
+ </test:case>
+
+ <test:case name="testSortBean">
+ <j:new var="testCollection" className="java.util.ArrayList"/>
+ <j:useBean var="cust1" class="org.apache.commons.jelly.util.Customer" city="Sydney" location="Australia" name="Fred Nerk"/>
+ <j:useBean var="cust2" class="org.apache.commons.jelly.util.Customer" city="Melbourne" location="Australia" name="Joe Nerk"/>
+ <j:useBean var="cust3" class="org.apache.commons.jelly.util.Customer" city="San Francisco" location="U.S.A." name="Colette Cool"/>
+ <j:mute>
+ ${testCollection.add(cust1)}
+ ${testCollection.add(cust2)}
+ ${testCollection.add(cust3)}
+ </j:mute>
+ <!-- test sorting by the name property -->
+ <util:sort var="sortedByName" items="${testCollection}" property="name"/>
+ <test:assertEquals expected="Colette Cool" actual="${sortedByName[0].name}"/>
+ <test:assertEquals expected="Fred Nerk" actual="${sortedByName[1].name}"/>
+ <test:assertEquals expected="Joe Nerk" actual="${sortedByName[2].name}"/>
+
+ <!-- test sorting by the location property -->
+ <util:sort var="sortedByLocation" items="${testCollection}" property="location"/>
+ <test:assertEquals expected="Australia" actual="${sortedByLocation[0].location}"/>
+ <test:assertEquals expected="Australia" actual="${sortedByLocation[1].location}"/>
+ <test:assertEquals expected="U.S.A." actual="${sortedByLocation[2].location}"/>
+
+ </test:case>
</test:suite>
1.1 jakarta-commons/jelly/jelly-tags/util/src/test/org/apache/commons/jelly/tags/util/Customer.java
Index: Customer.java
===================================================================
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* A sample bean that we can construct via Jelly tags
*
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
* @version $Revision: 1.1 $
*/
public class Customer {
private String name;
private String city;
private String location;
public Customer() {
}
public Customer(String name) {
setName(name);
}
public Customer(String name, String city) {
setName(name);
setCity(city);
}
public Customer(Customer cust) {
setName(cust.getName());
setCity(cust.getCity());
setLocation(cust.getLocation());
}
public String toString() {
return super.toString() + "[name=" + name + ";city=" + city + "]";
}
/**
* Returns the city.
* @return String
*/
public String getCity() {
return city;
}
/**
* Returns the location.
* @return String
*/
public String getLocation() {
return location;
}
/**
* Returns the name.
* @return String
*/
public String getName() {
return name;
}
/**
* Sets the city.
* @param city The city to set
*/
public void setCity(String city) {
this.city = city;
}
/**
* Sets the location.
* @param location The location to set
*/
public void setLocation(String location) {
this.location = location;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(String name) {
this.name = name;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org