View Javadoc

1   package de.tivsource.page.admin.actions.locations.request;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.text.SimpleDateFormat;
6   import java.util.Calendar;
7   import java.util.GregorianCalendar;
8   
9   import javax.servlet.http.HttpServletRequest;
10  import javax.servlet.http.HttpServletResponse;
11  
12  import org.apache.logging.log4j.LogManager;
13  import org.apache.logging.log4j.Logger;
14  import org.apache.struts2.ServletActionContext;
15  import org.apache.struts2.convention.annotation.Action;
16  import org.apache.struts2.convention.annotation.Actions;
17  import org.apache.struts2.convention.annotation.Result;
18  import org.apache.struts2.interceptor.ServletRequestAware;
19  import org.apache.tika.Tika;
20  
21  import com.opensymphony.xwork2.ActionSupport;
22  
23  import de.tivsource.ejb3plugin.InjectEJB;
24  import de.tivsource.page.dao.property.PropertyDaoLocal;
25  import de.tivsource.page.dao.request.RequestDaoLocal;
26  import de.tivsource.page.entity.request.Request;
27  
28  /**
29   *
30   * @author Marc Michele
31   */
32  public class ImageAction extends ActionSupport implements ServletRequestAware {
33  
34      /**
35       * Generierte Versions-Kennung der Klasse.
36       */
37      private static final long serialVersionUID = 7367696315767291095L;
38  
39      private static final Logger logger = LogManager.getLogger(ImageAction.class);
40  
41      /**
42       * Servlet-Request der die Post und Get Daten der Session enthält.
43       */
44      private HttpServletRequest servletRequest;
45  
46      @InjectEJB(name="PropertyDao")
47      private PropertyDaoLocal propertyDaoLocal;
48  
49      @InjectEJB(name="RequestDao")
50      private RequestDaoLocal requestDaoLocal;
51  
52      /**
53       * Aktueller Antrag.
54       */
55      private Request request;
56  
57      /**
58       * 
59       */
60      private String mimeType = "image/png";
61      
62      /**
63       * Das Bild darf normalerweise aus dem Cache geladen werden.
64       */
65      private boolean cache = true;
66  
67      public void setServletRequest(HttpServletRequest servletRequest) {
68          this.servletRequest = servletRequest;
69      }
70  
71      /**
72       * @return the request
73       */
74      public Request getRequest() {
75          return request;
76      }
77  
78      /**
79       * @return the mimeType
80       */
81      public String getMimeType() {
82          return mimeType;
83      }
84  
85      /**
86       * @param cache the cache to set
87       */
88      public void setCache(boolean cache) {
89          this.cache = cache;
90      }
91  
92      /**
93       * Die Methode get() laedt eine Kategorie anhand des
94       * ServletRequest-Parameters "category_id" aus der entsprechenden
95       * Datenbanktabelle und speichert diese in die Variable "this.category"
96       * 
97       * @return SUCCESS oder ERROR (wenn Exception);
98       */
99      @Actions({
100         @Action(
101             value = "*/original",
102             results = {
103                 @Result(
104                     name = "success", 
105                     type="stream", 
106                     params= { "contentType","mimeType","inputName","request.proofOfAuthorityFileInputStream"}
107                 ),
108                 @Result(name = "input", type="tiles", location="imageTemplate")
109             }
110         )
111     })
112     public String execute() {
113         logger.trace("execute() aufgerufen.");
114 
115         // Lese lastModified aus der Datenbank
116         String lastModified = propertyDaoLocal.findByKey("captcha.image.lastModified").getValue();
117         // Hole If-Modified-Since aus der Anfrage
118         String since = servletRequest.getHeader("If-Modified-Since");
119         logger.info("If-Modified-Since: " + since);
120 
121         // Setze Fomatierung
122         // "Thu, 01 Dec 1994 16:00:00 GMT"
123         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
124         Calendar gregorianCalendar = new GregorianCalendar();
125         gregorianCalendar.add(Calendar.HOUR, 12);
126         String expires = simpleDateFormat.format(gregorianCalendar.getTime());
127 
128         HttpServletResponse response = ServletActionContext.getResponse();
129         //response.setHeader("Cache-control", "no-cache, no-store");
130         //response.setHeader("Pragma", "no-cache");
131 
132         if(cache) {
133             response.setHeader("Expires", expires);
134             response.setHeader("Last-Modified", lastModified);
135             response.setHeader("Retry-After", expires);
136         } else {
137             response.setHeader("Cache-control", "no-cache, no-store, must-revalidate");
138             response.setHeader("Pragma", "no-cache");
139             response.setHeader("Expires", "-1");
140         }
141 
142         if(cache && since!=null && since.equals(lastModified)) {
143             response.setStatus(304);
144             return INPUT;
145         }
146 
147         String requestUuid = ServletActionContext.getRequest().getServletPath();
148 
149         logger.info("Request UUID: " + requestUuid);
150         requestUuid = requestUuid.replaceAll("/locations/request/", "");
151         requestUuid = requestUuid.replaceAll("/original.html", "");
152         logger.info("Request UUID: " + requestUuid);
153 
154         try {
155             this.request = this.requestDaoLocal.findByUuid(requestUuid);
156             Tika tika = new Tika();
157             mimeType = tika.detect(new File(request.getProofOfAuthority()));
158             return SUCCESS;
159         } catch (NumberFormatException exception) {
160             addActionError(getText("request.actionError.get.numberFormatException"));
161             exception.printStackTrace();
162             return ERROR;
163         } catch (NullPointerException exception) {
164             addActionError(getText("request.actionError.get.nullPointerException"));
165             exception.printStackTrace();
166             return ERROR;
167         } catch (IOException exception) {
168             addActionError(getText("request.actionError.get.iOException"));
169             exception.printStackTrace();
170             return ERROR;
171         }
172     }
173 
174 }// Ende class