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
33
34 public class CssAction extends ActionSupport implements ServletRequestAware {
35
36
37
38
39 private static final long serialVersionUID = 7367696315767291095L;
40
41 private static final Logger logger = LogManager.getLogger(CssAction.class);
42
43
44
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
62
63 public FileInputStream getCssFileInputStream() {
64 return cssFileInputStream;
65 }
66
67
68
69
70
71
72
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
91 String lastModified = propertyDaoLocal.findByKey("cssFile.lastModified").getValue();
92
93 String since = servletRequest.getHeader("If-Modified-Since");
94 logger.info("If-Modified-Since: " + since);
95
96
97
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
105
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 }
133
134 }