+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