mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
improve client side caching
This commit is contained in:
@@ -263,22 +263,22 @@ public class Group implements ModelObject, Iterable<String>
|
|||||||
{
|
{
|
||||||
int hash = 7;
|
int hash = 7;
|
||||||
|
|
||||||
hash = 29 * hash + ((this.creationDate != null)
|
hash = 73 * hash + ((this.creationDate != null)
|
||||||
? this.creationDate.hashCode()
|
? this.creationDate.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 29 * hash + ((this.description != null)
|
hash = 73 * hash + ((this.description != null)
|
||||||
? this.description.hashCode()
|
? this.description.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 29 * hash + ((this.lastModified != null)
|
hash = 73 * hash + ((this.lastModified != null)
|
||||||
? this.lastModified.hashCode()
|
? this.lastModified.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 29 * hash + ((this.members != null)
|
hash = 73 * hash + ((this.members != null)
|
||||||
? this.members.hashCode()
|
? this.members.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 29 * hash + ((this.name != null)
|
hash = 73 * hash + ((this.name != null)
|
||||||
? this.name.hashCode()
|
? this.name.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 29 * hash + ((this.type != null)
|
hash = 73 * hash + ((this.type != null)
|
||||||
? this.type.hashCode()
|
? this.type.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
|
|
||||||
@@ -371,6 +371,7 @@ public class Group implements ModelObject, Iterable<String>
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Long getLastModified()
|
public Long getLastModified()
|
||||||
{
|
{
|
||||||
return lastModified;
|
return lastModified;
|
||||||
|
|||||||
@@ -100,6 +100,75 @@ public class Permission implements Serializable
|
|||||||
this.groupPermission = groupPermission;
|
this.groupPermission = groupPermission;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//~--- methods --------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Permission other = (Permission) obj;
|
||||||
|
|
||||||
|
if (this.groupPermission != other.groupPermission)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.name == null)
|
||||||
|
? (other.name != null)
|
||||||
|
: !this.name.equals(other.name))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.type != other.type)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
int hash = 7;
|
||||||
|
|
||||||
|
hash = 97 * hash + (this.groupPermission
|
||||||
|
? 1
|
||||||
|
: 0);
|
||||||
|
hash = 97 * hash + ((this.name != null)
|
||||||
|
? this.name.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 97 * hash + ((this.type != null)
|
||||||
|
? this.type.hashCode()
|
||||||
|
: 0);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
//~--- get methods ----------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -157,6 +157,145 @@ public class Repository implements ModelObject
|
|||||||
repository.setUrl(url);
|
repository.setUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Repository other = (Repository) obj;
|
||||||
|
|
||||||
|
if ((this.contact == null)
|
||||||
|
? (other.contact != null)
|
||||||
|
: !this.contact.equals(other.contact))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.creationDate != other.creationDate)
|
||||||
|
&& ((this.creationDate == null)
|
||||||
|
||!this.creationDate.equals(other.creationDate)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.description == null)
|
||||||
|
? (other.description != null)
|
||||||
|
: !this.description.equals(other.description))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.id == null)
|
||||||
|
? (other.id != null)
|
||||||
|
: !this.id.equals(other.id))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.lastModified != other.lastModified)
|
||||||
|
&& ((this.lastModified == null)
|
||||||
|
||!this.lastModified.equals(other.lastModified)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.name == null)
|
||||||
|
? (other.name != null)
|
||||||
|
: !this.name.equals(other.name))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.permissions != other.permissions)
|
||||||
|
&& ((this.permissions == null)
|
||||||
|
||!this.permissions.equals(other.permissions)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.publicReadable != other.publicReadable)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.type == null)
|
||||||
|
? (other.type != null)
|
||||||
|
: !this.type.equals(other.type))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.url == null)
|
||||||
|
? (other.url != null)
|
||||||
|
: !this.url.equals(other.url))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
int hash = 7;
|
||||||
|
|
||||||
|
hash = 61 * hash + ((this.contact != null)
|
||||||
|
? this.contact.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.creationDate != null)
|
||||||
|
? this.creationDate.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.description != null)
|
||||||
|
? this.description.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.id != null)
|
||||||
|
? this.id.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.lastModified != null)
|
||||||
|
? this.lastModified.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.name != null)
|
||||||
|
? this.name.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.permissions != null)
|
||||||
|
? this.permissions.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + (this.publicReadable
|
||||||
|
? 1
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.type != null)
|
||||||
|
? this.type.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 61 * hash + ((this.url != null)
|
||||||
|
? this.url.hashCode()
|
||||||
|
: 0);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method description
|
* Method description
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -210,6 +210,18 @@ public class User implements Principal, ModelObject
|
|||||||
|
|
||||||
final User other = (User) obj;
|
final User other = (User) obj;
|
||||||
|
|
||||||
|
if (this.admin != other.admin)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.creationDate != other.creationDate)
|
||||||
|
&& ((this.creationDate == null)
|
||||||
|
||!this.creationDate.equals(other.creationDate)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.displayName == null)
|
if ((this.displayName == null)
|
||||||
? (other.displayName != null)
|
? (other.displayName != null)
|
||||||
: !this.displayName.equals(other.displayName))
|
: !this.displayName.equals(other.displayName))
|
||||||
@@ -217,6 +229,13 @@ public class User implements Principal, ModelObject
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((this.lastModified != other.lastModified)
|
||||||
|
&& ((this.lastModified == null)
|
||||||
|
||!this.lastModified.equals(other.lastModified)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.mail == null)
|
if ((this.mail == null)
|
||||||
? (other.mail != null)
|
? (other.mail != null)
|
||||||
: !this.mail.equals(other.mail))
|
: !this.mail.equals(other.mail))
|
||||||
@@ -257,21 +276,30 @@ public class User implements Principal, ModelObject
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
int hash = 7;
|
int hash = 3;
|
||||||
|
|
||||||
hash = 79 * hash + ((this.displayName != null)
|
hash = 37 * hash + (this.admin
|
||||||
|
? 1
|
||||||
|
: 0);
|
||||||
|
hash = 37 * hash + ((this.creationDate != null)
|
||||||
|
? this.creationDate.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 37 * hash + ((this.displayName != null)
|
||||||
? this.displayName.hashCode()
|
? this.displayName.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 79 * hash + ((this.mail != null)
|
hash = 37 * hash + ((this.lastModified != null)
|
||||||
|
? this.lastModified.hashCode()
|
||||||
|
: 0);
|
||||||
|
hash = 37 * hash + ((this.mail != null)
|
||||||
? this.mail.hashCode()
|
? this.mail.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 79 * hash + ((this.name != null)
|
hash = 37 * hash + ((this.name != null)
|
||||||
? this.name.hashCode()
|
? this.name.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 79 * hash + ((this.password != null)
|
hash = 37 * hash + ((this.password != null)
|
||||||
? this.password.hashCode()
|
? this.password.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
hash = 79 * hash + ((this.type != null)
|
hash = 37 * hash + ((this.type != null)
|
||||||
? this.type.hashCode()
|
? this.type.hashCode()
|
||||||
: 0);
|
: 0);
|
||||||
|
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
response = createCacheResponse(request, item);
|
response = createCacheResponse(request, item, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
@@ -267,7 +267,7 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
|
|
||||||
if (Util.isNotEmpty(items))
|
if (Util.isNotEmpty(items))
|
||||||
{
|
{
|
||||||
prepareForReturn(manager.getAll());
|
items = prepareForReturn(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
Response response = null;
|
Response response = null;
|
||||||
@@ -278,7 +278,7 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
response = createCacheResponse(request, items);
|
response = createCacheResponse(request, manager, items);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
@@ -401,14 +401,17 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @param request
|
* @param request
|
||||||
|
* @param timeItem
|
||||||
* @param item
|
* @param item
|
||||||
|
* @param <I>
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Response createCacheResponse(Request request, T item)
|
private <I> Response createCacheResponse(Request request,
|
||||||
|
LastModifiedAware timeItem, I item)
|
||||||
{
|
{
|
||||||
Response.ResponseBuilder builder = null;
|
Response.ResponseBuilder builder = null;
|
||||||
Date lastModified = getLastModified(item);
|
Date lastModified = getLastModified(timeItem);
|
||||||
EntityTag e = new EntityTag(Integer.toString(item.hashCode()));
|
EntityTag e = new EntityTag(Integer.toString(item.hashCode()));
|
||||||
|
|
||||||
if (lastModified != null)
|
if (lastModified != null)
|
||||||
@@ -430,35 +433,6 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param items
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private Response createCacheResponse(Request request, Collection<T> items)
|
|
||||||
{
|
|
||||||
Response.ResponseBuilder builder = null;
|
|
||||||
Date lastModified = getLastModified(manager);
|
|
||||||
|
|
||||||
if (lastModified != null)
|
|
||||||
{
|
|
||||||
builder = request.evaluatePreconditions(lastModified);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (builder == null)
|
|
||||||
{
|
|
||||||
builder = Response.ok(items).lastModified(lastModified);
|
|
||||||
}
|
|
||||||
|
|
||||||
addCacheControl(builder);
|
|
||||||
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
//~--- get methods ----------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -485,7 +459,7 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
|||||||
//~--- fields ---------------------------------------------------------------
|
//~--- fields ---------------------------------------------------------------
|
||||||
|
|
||||||
/** Field description */
|
/** Field description */
|
||||||
protected int cacheMaxAge = 1;
|
protected int cacheMaxAge = 0;
|
||||||
|
|
||||||
/** Field description */
|
/** Field description */
|
||||||
protected boolean disableCache = false;
|
protected boolean disableCache = false;
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class RepositoryResource
|
|||||||
this.repositoryManager = repositoryManager;
|
this.repositoryManager = repositoryManager;
|
||||||
this.securityContextProvider = securityContextProvider;
|
this.securityContextProvider = securityContextProvider;
|
||||||
this.requestProvider = requestProvider;
|
this.requestProvider = requestProvider;
|
||||||
setDisableCache(true);
|
setDisableCache(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods --------------------------------------------------------------
|
//~--- methods --------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user