1 package org.cateproject.controller.interceptor;
2
3 import java.util.UUID;
4
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
7
8 import org.cateproject.controller.user.UserPreferences;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.web.bind.ServletRequestUtils;
11 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
12
13 import eu.etaxonomy.cdm.api.service.IAuditEventService;
14 import eu.etaxonomy.cdm.model.view.AuditEvent;
15 import eu.etaxonomy.cdm.model.view.context.AuditEventContextHolder;
16
17 public class AuditEventContextHandlerInterceptor extends HandlerInterceptorAdapter {
18 public static String AUDIT_EVENT_CONTEXT_PARAM_NAME = "view";
19 private IAuditEventService auditEventService;
20
21 private UserPreferences userPreferences;
22
23 @Autowired
24 public void setAuditEventService(IAuditEventService auditEventService) {
25 this.auditEventService = auditEventService;
26 }
27
28 @Autowired
29 public void setUserPreferences(UserPreferences userPreferences) {
30 this.userPreferences = userPreferences;
31 }
32
33 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
34
35 AuditEvent auditEvent = null;
36
37 String auditEventUuidString = ServletRequestUtils.getStringParameter(request,AuditEventContextHandlerInterceptor.AUDIT_EVENT_CONTEXT_PARAM_NAME);
38
39 if(auditEventUuidString != null) {
40 try {
41 UUID auditEventUuid = UUID.fromString(auditEventUuidString);
42 if(auditEventUuid.equals(AuditEvent.CURRENT_VIEW.getUuid())) {
43 auditEvent = AuditEvent.CURRENT_VIEW;
44 } else {
45 auditEvent = auditEventService.find(auditEventUuid);
46 }
47
48 } catch(IllegalArgumentException iae) {
49
50 }
51 }
52
53 if(auditEvent == null) {
54 auditEvent = userPreferences.getAuditEvent();
55 }
56
57 if(auditEvent == null) {
58 auditEvent = AuditEvent.CURRENT_VIEW;
59 }
60
61 AuditEventContextHolder.getContext().setAuditEvent(auditEvent);
62 userPreferences.setAuditEvent(auditEvent);
63
64 return true;
65 }
66 }