void cacheControl(HttpServletRequest request, Map<String, String> cacheControlMap) throws Exception;
}
- class DefaultCacheMethodHandle implements CacheMethodHandle {
-
- long now = System.currentTimeMillis();
- Integer cacheSeconds;
- Long lastModified;
- String eTag;
-
-
- DefaultCacheMethodHandle() {
- this.cacheSeconds = CacheControl.this.defaultCacheSeconds;
- this.lastModified = CacheControl.this.defaultLastModified;
- this.eTag = null;
- }
-
-
- @Override
- public long getTimestamp() {
- return now;
- }
-
- @Override
- public int accepts(HttpServletRequest request) {
- return HttpServletResponse.SC_OK;
- }
-
- @Override
- public int getCacheSeconds(HttpServletRequest request) {
- return cacheSeconds;
- }
-
- @Override
- public long getLastModified(HttpServletRequest request) {
- return lastModified;
- }
-
- @Override
- public String getETag(HttpServletRequest request) {
- return eTag;
- }
-
- @Override
- public void cacheControl(HttpServletRequest request, Map<String, String> cacheControlMap) {
- }
- }
class ReflectionCacheMethodHandle implements CacheMethodHandle {
private Object handler;
- private DefaultCacheMethodHandle defaults = new DefaultCacheMethodHandle();
- private Method accepts, cacheSeconds, lastModified, eTag, cacheControl;
- private boolean isAcceptsDefined, isCacheSecondsDefined, isLastModifiedDefined, isETagDefined, isCacheControlDefined;
+ private long now = System.currentTimeMillis();
+ private Integer cacheSeconds;
+ private Long lastModified;
+ private String eTag;
+ private Method acceptsMethod;
+ private Method cacheSecondsMethod;
+ private Method lastModifiedMethod;
+ private Method eTagMethod;
+ private Method cacheControlMethod;
+ private boolean isAcceptsMethodDefined;
+ private boolean isCacheSecondsMethodDefined;
+ private boolean isLastModifiedMethodDefined;
+ private boolean isETagMethodDefined;
+ private boolean isCacheControlMethodDefined;
ReflectionCacheMethodHandle(Object handler) throws NoSuchMethodException {
+
this.handler = handler;
+
+ cacheSeconds = CacheControl.this.defaultCacheSeconds;
+ lastModified = CacheControl.this.defaultLastModified;
+ eTag = null;
+
/** Class-Level-Annotations auslesen */
for (Annotation annotation : handler.getClass().getAnnotations()) {
if (annotation.annotationType().equals(CacheSeconds.class)) {
- defaults.cacheSeconds = ((CacheSeconds)annotation).value();
- isCacheSecondsDefined = true;
+ cacheSeconds = ((CacheSeconds)annotation).value();
+ isCacheSecondsMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(LastModified.class)) {
- defaults.lastModified = ((LastModified)annotation).value();
- if (defaults.lastModified < 1) {
+ lastModified = ((LastModified)annotation).value();
+ if (lastModified < 1) {
/**
* Ein Last-Modified-Header wurde angefordert, aber es wurde kein
* statischer Wert spezifiziert:
* globalen statischen Default-Wert benutzen!
*/
- defaults.lastModified = defaultLastModified;
+ lastModified = defaultLastModified;
}
- isLastModifiedDefined = true;
+ isLastModifiedMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(ETag.class)) {
- defaults.eTag = ((ETag)annotation).value();
- isETagDefined = true;
+ eTag = ((ETag)annotation).value();
+ isETagMethodDefined = true;
continue;
}
}
for (Method method : handler.getClass().getMethods()) {
for (Annotation annotation : method.getAnnotations()) {
if (annotation.annotationType().equals(Accepts.class)) {
- if (isAcceptsDefined)
+ if (isAcceptsMethodDefined)
throw new IllegalArgumentException("Die Annotation @Accept wurde in der Klasse " + handler.getClass().getSimpleName() + " mehrfach verwendet!");
- accepts = method;
- isAcceptsDefined = true;
+ acceptsMethod = method;
+ isAcceptsMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(CacheSeconds.class)) {
- if (isCacheSecondsDefined)
+ if (isCacheSecondsMethodDefined)
throw new IllegalArgumentException("Die Annotation @CacheSeconds wurde in der Klasse " + handler.getClass().getSimpleName() + " mehrfach verwendet!");
- cacheSeconds = method;
- isCacheSecondsDefined = true;
+ cacheSecondsMethod = method;
+ isCacheSecondsMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(LastModified.class)) {
- if (isLastModifiedDefined)
+ if (isLastModifiedMethodDefined)
throw new IllegalArgumentException("Die Annotation @LastModified wurde in der Klasse " + handler.getClass().getSimpleName() + " mehrfach verwendet!");
- lastModified = method;
- isLastModifiedDefined = true;
+ lastModifiedMethod = method;
+ isLastModifiedMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(ETag.class)) {
- if (isETagDefined)
+ if (isETagMethodDefined)
throw new IllegalArgumentException("Die Annotation @ETag wurde in der Klasse " + handler.getClass().getSimpleName() + " mehrfach verwendet!");
- eTag = method;
- isETagDefined = true;
+ eTagMethod = method;
+ isETagMethodDefined = true;
continue;
}
if (annotation.annotationType().equals(de.halbekunst.juplo.cachecontrol.annotations.CacheControl.class)) {
- if (isCacheControlDefined)
+ if (isCacheControlMethodDefined)
throw new IllegalArgumentException("Die Annotation @CacheControl wurde in der Klasse " + handler.getClass().getSimpleName() + " mehrfach verwendet!");
- cacheControl = method;
- isCacheControlDefined = true;
+ cacheControlMethod = method;
+ isCacheControlMethodDefined = true;
continue;
}
}
@Override
public long getTimestamp() {
- return defaults.now;
+ return now;
}
@Override
IllegalArgumentException,
InvocationTargetException
{
- if (accepts == null)
- return defaults.accepts(request);
+ if (acceptsMethod == null)
+ return HttpServletResponse.SC_OK;
else
- return (Integer)accepts.invoke(handler, request);
+ return (Integer)acceptsMethod.invoke(handler, request);
}
@Override
IllegalArgumentException,
InvocationTargetException
{
- if (cacheSeconds == null)
- return defaults.getCacheSeconds(request);
+ if (cacheSecondsMethod == null)
+ return cacheSeconds;
else
- return (Integer)cacheSeconds.invoke(handler, request);
+ return (Integer)cacheSecondsMethod.invoke(handler, request);
}
@Override
IllegalArgumentException,
InvocationTargetException
{
- if (lastModified == null)
- return defaults.getLastModified(request);
+ if (lastModifiedMethod == null)
+ return lastModified;
else
- return (Long)lastModified.invoke(handler, request);
+ return (Long)lastModifiedMethod.invoke(handler, request);
}
@Override
IllegalArgumentException,
InvocationTargetException
{
- if (eTag == null)
- return defaults.getETag(request);
+ if (eTagMethod == null)
+ return eTag;
else
- return (String)eTag.invoke(handler, request);
+ return (String)eTagMethod.invoke(handler, request);
}
@Override
IllegalArgumentException,
InvocationTargetException
{
- if (cacheControl == null)
- defaults.cacheControl(request, cacheControlMap);
- else
- cacheControl.invoke(handler, request, cacheControlMap);
+ if (cacheControlMethod != null)
+ cacheControlMethod.invoke(handler, request, cacheControlMap);
}
}