Spring-Beispiel um eine View mit Controller erweitert
[percentcodec] / examples / spring / src / main / java / de / halbekunst / juplo / examples / spring / SpringController.java
diff --git a/examples/spring/src/main/java/de/halbekunst/juplo/examples/spring/SpringController.java b/examples/spring/src/main/java/de/halbekunst/juplo/examples/spring/SpringController.java
new file mode 100644 (file)
index 0000000..2ce8f4e
--- /dev/null
@@ -0,0 +1,65 @@
+package de.halbekunst.juplo.examples.spring;
+
+import de.halbekunst.juplo.cachecontrol.annotations.CacheSeconds;
+import de.halbekunst.juplo.cachecontrol.annotations.Cacheable;
+import de.halbekunst.juplo.cachecontrol.annotations.LastModified;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+
+/**
+ * Simple Spring-MVC Controller
+ * @author kai
+ */
+@Controller
+@Cacheable(eager=true)
+public class SpringController
+{
+  public static final String ACCESS_TIME = SpringController.class.getCanonicalName() + ".ACCESS_TIME";
+  public static final Integer DEFAULT_MAX_AGE = 60;
+
+  private Date lastModified = new Date();
+  private Map<Date,String> requests = new TreeMap<Date,String>();
+  private Map<String,Date> accessTimes = new HashMap<String,Date>();
+
+
+  @CacheSeconds
+  public int cacheSeconds(HttpServletRequest request) {
+    String maxAge = request.getParameter("max-age");
+    if (maxAge != null && maxAge.matches("^\\s*\\d+\\s*$"))
+      return Integer.parseInt(maxAge);
+    else
+      return DEFAULT_MAX_AGE;
+  }
+
+  @LastModified
+  public long lastModified(HttpServletRequest request) {
+    String query = request.getQueryString();
+    query = query == null ? "" : query;
+    Date accessTime = accessTimes.get(query);
+    if (accessTime == null || !accessTime.equals(lastModified))
+      /** Neuer Zugriff! */
+      accessTime = new Date();
+    request.setAttribute(ACCESS_TIME, accessTime);
+    return accessTime.getTime();
+  }
+
+  @RequestMapping("/spring-controller.html")
+  public ModelAndView process(HttpServletRequest request)
+  {
+    lastModified = (Date)request.getAttribute(ACCESS_TIME);
+    String query = request.getQueryString();
+    query = query == null ? "" : query;
+    requests.put(lastModified, query);
+    accessTimes.put(query, lastModified);
+    ModelAndView mav = new ModelAndView("controller-view");
+    mav.addObject("requests", requests);
+    return mav;
+  }
+}
\ No newline at end of file