implementing comparator with BeanComparator of commons beanutils

This commit is contained in:
Sebastian Sdorra
2011-06-09 22:03:35 +02:00
parent a99d7e6b1e
commit cef6d27c99
2 changed files with 98 additions and 2 deletions

View File

@@ -107,6 +107,20 @@
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<!-- only for BeanComparator, replace with own implementation -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency> <dependency>
<groupId>org.freemarker</groupId> <groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId> <artifactId>freemarker</artifactId>

View File

@@ -35,6 +35,8 @@ package sonia.scm.api.rest.resources;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import org.apache.commons.beanutils.BeanComparator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -48,6 +50,7 @@ import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
import java.util.Collection; import java.util.Collection;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
@@ -484,6 +487,31 @@ public abstract class AbstractManagerResource<T extends ModelObject,
return builder.build(); return builder.build();
} }
/**
* Method description
*
*
* @param sortby
* @param desc
*
* @return
*/
private Comparator<T> createComparator(String sortby, boolean desc)
{
Comparator comparator = null;
if (desc)
{
comparator = new BeanReverseComparator(sortby);
}
else
{
comparator = new BeanComparator(sortby);
}
return comparator;
}
/** /**
* Method description * Method description
* *
@@ -505,13 +533,20 @@ public abstract class AbstractManagerResource<T extends ModelObject,
if (limit > 0) if (limit > 0)
{ {
if (Util.isEmpty(sortby))
{
// TODO create comparator // replace with somethind useful
items = manager.getAll(start, limit); sortby = "id";
}
items = manager.getAll(createComparator(sortby, desc), start, limit);
} }
else else
{ {
items = manager.getAll(); items = manager.getAll();
// TODO sort result if sortby is not empty
} }
return items; return items;
@@ -540,6 +575,53 @@ public abstract class AbstractManagerResource<T extends ModelObject,
return lastModified; return lastModified;
} }
//~--- inner classes --------------------------------------------------------
/**
* Class description
*
*
* @version Enter version here..., 11/06/09
* @author Enter your name here...
*/
private static class BeanReverseComparator extends BeanComparator
{
/** Field description */
private static final long serialVersionUID = -8535047820348790009L;
//~--- constructors -------------------------------------------------------
/**
* Constructs ...
*
*
* @param sortby
*/
private BeanReverseComparator(String sortby)
{
super(sortby);
}
//~--- methods ------------------------------------------------------------
/**
* Method description
*
*
* @param o1
* @param o2
*
* @return
*/
@Override
public int compare(Object o1, Object o2)
{
return super.compare(o1, o2) * -1;
}
}
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */