diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java index 3fc9e82a04..87052b147b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java @@ -38,12 +38,15 @@ package sonia.scm.api.rest.resources; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.LastModifiedAware; import sonia.scm.Manager; import sonia.scm.ModelObject; +import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ import java.util.Collection; +import java.util.Date; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -54,8 +57,11 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.Context; +import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -211,6 +217,8 @@ public abstract class AbstractManagerResource getAll() + public Response getAll(@Context Request request) { - return prepareForReturn(manager.getAll()); + Collection items = manager.getAll(); + + if (Util.isNotEmpty(items)) + { + prepareForReturn(manager.getAll()); + } + + return createResponse(request, items); } //~--- methods -------------------------------------------------------------- @@ -295,6 +314,85 @@ public abstract class AbstractManagerResource items) + { + Date lastModified = getLastModified(manager); + Response.ResponseBuilder builder = + request.evaluatePreconditions(lastModified); + + if (builder == null) + { + builder = Response.ok(items).lastModified(lastModified); + } + + addCacheControl(builder); + + return builder.build(); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param item + * + * @return + */ + private Date getLastModified(LastModifiedAware item) + { + return new Date(item.getLastModified()); + } + //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.group.js b/scm-webapp/src/main/webapp/resources/js/sonia.group.js index 387a9c9c0d..d866e81f99 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.group.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.group.js @@ -52,7 +52,10 @@ Sonia.group.Grid = Ext.extend(Sonia.rest.Grid, { initComponent: function(){ var groupStore = new Sonia.rest.JsonStore({ - url: restUrl + 'groups.json', + proxy: new Ext.data.HttpProxy({ + url: restUrl + 'groups.json', + disableCaching: false + }), fields: [ 'name', 'members', 'description', 'creationDate', 'type'], sortInfo: { field: 'name' diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js index 439eedd5d2..00ba1a3722 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js @@ -83,7 +83,10 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { initComponent: function(){ var repositoryStore = new Sonia.rest.JsonStore({ - url: restUrl + 'repositories.json', + proxy: new Ext.data.HttpProxy({ + url: restUrl + 'repositories.json', + disableCaching: false + }), fields: [ 'id', 'name', 'type', 'contact', 'description', 'creationDate', 'url', 'public', 'permissions' ], sortInfo: { field: 'name' diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.user.js b/scm-webapp/src/main/webapp/resources/js/sonia.user.js index c60a7d788b..138ffa216b 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.user.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.user.js @@ -58,7 +58,10 @@ Sonia.user.Grid = Ext.extend(Sonia.rest.Grid, { initComponent: function(){ var userStore = new Sonia.rest.JsonStore({ - url: restUrl + 'users.json', + proxy: new Ext.data.HttpProxy({ + url: restUrl + 'users.json', + disableCaching: false + }), fields: [ 'name', 'displayName', 'mail', 'admin', 'creationDate', 'lastModified', 'type'], sortInfo: { field: 'name'