667165877b73420c929f374c33f8257d548692e7
[percentcodec] /
1 package de.juplo.accelerator.examples.spring;
2
3 import de.juplo.accelerator.annotations.CacheSeconds;
4 import de.juplo.accelerator.annotations.Cacheable;
5 import de.juplo.accelerator.annotations.LastModified;
6 import java.util.Date;
7 import java.util.HashMap;
8 import java.util.Map;
9 import java.util.TreeMap;
10 import javax.servlet.http.HttpServletRequest;
11 import org.springframework.stereotype.Controller;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.servlet.ModelAndView;
14
15
16 /**
17  * Simple Spring-MVC Controller
18  * @author kai
19  */
20 @Controller
21 @Cacheable(eager=true)
22 public class SpringController
23 {
24   public static final String ACCESS_TIME = SpringController.class.getCanonicalName() + ".ACCESS_TIME";
25   public static final Integer DEFAULT_MAX_AGE = 60;
26
27   private Date lastModified = new Date();
28   private Map<Date,String> requests = new TreeMap<Date,String>();
29   private Map<String,Date> accessTimes = new HashMap<String,Date>();
30
31
32   @CacheSeconds
33   public int cacheSeconds(HttpServletRequest request) {
34     String maxAge = request.getParameter("max-age");
35     if (maxAge != null && maxAge.matches("^\\s*\\d+\\s*$"))
36       return Integer.parseInt(maxAge);
37     else
38       return DEFAULT_MAX_AGE;
39   }
40
41   @LastModified
42   public long lastModified(HttpServletRequest request) {
43     String query = request.getQueryString();
44     query = query == null ? "" : query;
45     Date accessTime = accessTimes.get(query);
46     if (accessTime == null || !accessTime.equals(lastModified))
47       /** Neuer Zugriff! */
48       accessTime = new Date();
49     request.setAttribute(ACCESS_TIME, accessTime);
50     return accessTime.getTime();
51   }
52
53   @RequestMapping("/spring-controller.html")
54   public ModelAndView process(HttpServletRequest request)
55   {
56     lastModified = (Date)request.getAttribute(ACCESS_TIME);
57     String query = request.getQueryString();
58     query = query == null ? "" : query;
59     requests.put(lastModified, query);
60     accessTimes.put(query, lastModified);
61     ModelAndView mav = new ModelAndView("controller-view");
62     mav.addObject("requests", requests);
63     return mav;
64   }
65 }