View Javadoc

1   package de.tivsource.page.css.actions;
2   
3   import java.io.File;
4   import java.io.FileInputStream;
5   import java.io.FileNotFoundException;
6   import java.text.SimpleDateFormat;
7   import java.util.Calendar;
8   import java.util.GregorianCalendar;
9   
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  
13  import org.apache.logging.log4j.LogManager;
14  import org.apache.logging.log4j.Logger;
15  import org.apache.struts2.ServletActionContext;
16  import org.apache.struts2.convention.annotation.Action;
17  import org.apache.struts2.convention.annotation.Actions;
18  import org.apache.struts2.convention.annotation.Result;
19  import org.apache.struts2.interceptor.ServletRequestAware;
20  
21  import com.opensymphony.xwork2.ActionSupport;
22  
23  import de.tivsource.ejb3plugin.InjectEJB;
24  import de.tivsource.page.common.css.CSSFile;
25  import de.tivsource.page.dao.cssfile.CSSFileDaoLocal;
26  import de.tivsource.page.dao.property.PropertyDaoLocal;
27  
28  
29  
30  /**
31   *
32   * @author Marc Michele
33   */
34  public class CssAction extends ActionSupport implements ServletRequestAware {
35  
36      /**
37       * Generierte Versions-Kennung der Klasse.
38       */
39      private static final long serialVersionUID = 7367696315767291095L;
40  
41      private static final Logger logger = LogManager.getLogger(CssAction.class);
42  
43      /**
44       * Servlet-Request der die Post und Get Daten der Session enthält.
45       */
46      private HttpServletRequest servletRequest;
47  
48      @InjectEJB(name="PropertyDao")
49      private PropertyDaoLocal propertyDaoLocal;
50  
51      @InjectEJB(name="CSSFileDao")
52      private CSSFileDaoLocal cssFileDaoLocal;
53  
54      private FileInputStream cssFileInputStream;
55      
56      public void setServletRequest(HttpServletRequest servletRequest) {
57          this.servletRequest = servletRequest;
58      }
59  
60      /**
61       * @return the cssFileInputStream
62       */
63      public FileInputStream getCssFileInputStream() {
64          return cssFileInputStream;
65      }
66  
67      /**
68       * Die Methode get() laedt eine Kategorie anhand des
69       * ServletRequest-Parameters "category_id" aus der entsprechenden
70       * Datenbanktabelle und speichert diese in die Variable "this.category"
71       * 
72       * @return SUCCESS oder ERROR (wenn Exception);
73       */
74      @Actions({
75          @Action(
76              value = "*",
77              results = {
78                  @Result(
79                      name = "success", 
80                      type="stream", 
81                      params= { "contentType","text/css","inputName","cssFileInputStream"}
82                  ),
83                  @Result(name = "input", type="tiles", location="cssTemplate")
84              }
85          )
86      })
87      public String execute() {
88          logger.trace("execute() aufgerufen.");
89  
90          // Lese lastModified aus der Datenbank
91          String lastModified = propertyDaoLocal.findByKey("cssFile.lastModified").getValue();
92          // Hole If-Modified-Since aus der Anfrage
93          String since = servletRequest.getHeader("If-Modified-Since");
94          logger.info("If-Modified-Since: " + since);
95  
96          // Setze Fomatierung
97          // "Thu, 01 Dec 1994 16:00:00 GMT"
98          SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
99          Calendar gregorianCalendar = new GregorianCalendar();
100         gregorianCalendar.add(Calendar.HOUR, 12);
101         String expires = simpleDateFormat.format(gregorianCalendar.getTime());
102 
103         HttpServletResponse response = ServletActionContext.getResponse();
104         //response.setHeader("Cache-control", "no-cache, no-store");
105         //response.setHeader("Pragma", "no-cache");
106 
107         response.setHeader("Expires", expires);
108         response.setHeader("Last-Modified", lastModified);
109         response.setHeader("Retry-After", expires);
110 
111         if(since!=null && since.equals(lastModified)) {
112             response.setStatus(304);
113             return INPUT;
114         }
115 
116         String cssFileUuid = ServletActionContext.getRequest().getServletPath();
117 
118         logger.info("CSS-Datei UUID: " + cssFileUuid);
119         cssFileUuid = cssFileUuid.replaceAll("/", "");
120         cssFileUuid = cssFileUuid.replaceAll(".css", "");
121         logger.info("CSS-Datei UUID: " + cssFileUuid);
122 
123         CSSFile cssFile = this.cssFileDaoLocal.findByUuid(cssFileUuid);
124         try {
125             this.cssFileInputStream = new FileInputStream(new File(cssFile.getPath()));
126             return SUCCESS;
127         } catch (FileNotFoundException e) {
128             e.printStackTrace();
129             return ERROR;
130         }
131 
132     }// Ende execute()
133 
134 }// Ende class