start implementing paging and server side sorting for users, groups and repositories

This commit is contained in:
Sebastian Sdorra
2011-06-09 21:32:30 +02:00
parent b7dd7fd78b
commit d5b387bd97
8 changed files with 340 additions and 2 deletions

View File

@@ -42,6 +42,7 @@ import sonia.scm.LastModifiedAware;
import sonia.scm.Manager;
import sonia.scm.ModelObject;
import sonia.scm.security.ScmSecurityException;
import sonia.scm.util.AssertUtil;
import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------
@@ -51,12 +52,14 @@ import java.util.Date;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.EntityTag;
@@ -296,13 +299,21 @@ public abstract class AbstractManagerResource<T extends ModelObject,
*
*
* @param request
* @param start
* @param limit
* @param sortby
* @param desc
* @return
*/
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getAll(@Context Request request)
public Response getAll(@Context Request request, @DefaultValue("0")
@QueryParam("start") int start, @DefaultValue("-1")
@QueryParam("limit") int limit, @QueryParam("sortby") String sortby,
@DefaultValue("false")
@QueryParam("desc") boolean desc)
{
Collection<T> items = manager.getAll();
Collection<T> items = fetchItems(sortby, desc, start, limit);
if (Util.isNotEmpty(items))
{
@@ -473,6 +484,37 @@ public abstract class AbstractManagerResource<T extends ModelObject,
return builder.build();
}
/**
* Method description
*
*
*
* @param sortby
* @param desc
* @param start
* @param limit
*
* @return
*/
private Collection<T> fetchItems(String sortby, boolean desc, int start,
int limit)
{
AssertUtil.assertPositive(start);
Collection<T> items = null;
if (limit > 0)
{
items = manager.getAll(sortby, desc, start, limit);
}
else
{
items = manager.getAll();
}
return items;
}
//~--- get methods ----------------------------------------------------------
/**

View File

@@ -54,6 +54,7 @@ import sonia.scm.search.SearchUtil;
import sonia.scm.security.SecurityContext;
import sonia.scm.store.Store;
import sonia.scm.store.StoreFactory;
import sonia.scm.util.CollectionAppender;
import sonia.scm.util.SecurityUtil;
import sonia.scm.util.Util;
@@ -362,6 +363,34 @@ public class XmlGroupManager extends AbstractGroupManager
return groups;
}
/**
* Method description
*
*
* @param sortby
* @param desc
* @param start
* @param limit
*
* @return
*/
@Override
public Collection<Group> getAll(String sortby, boolean desc, int start,
int limit)
{
// TODO sort
return Util.createSubCollection(groupDB.values(),
new CollectionAppender<Group>()
{
@Override
public void append(Collection<Group> collection, Group item)
{
collection.add(item.clone());
}
}, start, limit);
}
/**
* Method description
*

View File

@@ -59,8 +59,10 @@ import sonia.scm.security.ScmSecurityException;
import sonia.scm.store.Store;
import sonia.scm.store.StoreFactory;
import sonia.scm.util.AssertUtil;
import sonia.scm.util.CollectionAppender;
import sonia.scm.util.IOUtil;
import sonia.scm.util.SecurityUtil;
import sonia.scm.util.Util;
import sonia.scm.web.security.WebSecurityContext;
//~--- JDK imports ------------------------------------------------------------
@@ -394,6 +396,34 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
return repositories;
}
/**
* Method description
*
*
* @param sortby
* @param desc
* @param start
* @param limit
*
* @return
*/
@Override
public Collection<Repository> getAll(String sortby, boolean desc, int start,
int limit)
{
// TODO sort
return Util.createSubCollection(repositoryDB.values(),
new CollectionAppender<Repository>()
{
@Override
public void append(Collection<Repository> collection, Repository item)
{
collection.add(item.clone());
}
}, start, limit);
}
/**
* Method description
*

View File

@@ -35,6 +35,7 @@ package sonia.scm.user.xml;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.collect.Collections2;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -55,6 +56,7 @@ import sonia.scm.user.User;
import sonia.scm.user.UserAllreadyExistException;
import sonia.scm.user.UserException;
import sonia.scm.util.AssertUtil;
import sonia.scm.util.CollectionAppender;
import sonia.scm.util.IOUtil;
import sonia.scm.util.SecurityUtil;
import sonia.scm.util.Util;
@@ -65,8 +67,11 @@ import sonia.scm.web.security.WebSecurityContext;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -402,6 +407,34 @@ public class XmlUserManager extends AbstractUserManager
return users;
}
/**
* Method description
*
*
* @param sortby
* @param desc
* @param start
* @param limit
*
* @return
*/
@Override
public Collection<User> getAll(String sortby, boolean desc, int start,
int limit)
{
// TODO sort
return Util.createSubCollection(userDB.values(),
new CollectionAppender<User>()
{
@Override
public void append(Collection<User> collection, User item)
{
collection.add(item.clone());
}
}, start, limit);
}
/**
* Method description
*