1 package de.tivsource.page.admin.actions.others.picture;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.InputStreamReader;
10 import java.util.Date;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.UUID;
15
16 import org.apache.commons.codec.digest.DigestUtils;
17 import org.apache.logging.log4j.LogManager;
18 import org.apache.logging.log4j.Logger;
19 import org.apache.struts2.ServletActionContext;
20 import org.apache.struts2.convention.annotation.Action;
21 import org.apache.struts2.convention.annotation.Actions;
22 import org.apache.struts2.convention.annotation.Result;
23 import org.apache.struts2.tiles.annotation.TilesDefinition;
24 import org.apache.struts2.tiles.annotation.TilesDefinitions;
25 import org.apache.struts2.tiles.annotation.TilesPutAttribute;
26
27 import de.tivsource.ejb3plugin.InjectEJB;
28 import de.tivsource.page.admin.actions.EmptyAction;
29 import de.tivsource.page.dao.gallery.GalleryDaoLocal;
30 import de.tivsource.page.dao.picture.PictureDaoLocal;
31 import de.tivsource.page.entity.enumeration.Language;
32 import de.tivsource.page.entity.gallery.Gallery;
33 import de.tivsource.page.entity.picture.Picture;
34 import de.tivsource.page.entity.picture.PictureUrl;
35 import de.tivsource.page.enumeration.UrlType;
36
37
38
39
40
41
42 @TilesDefinitions({
43 @TilesDefinition(name="pictureAddForm", extend = "adminTemplate", putAttributes = {
44 @TilesPutAttribute(name = "meta", value = "/WEB-INF/tiles/active/meta/chosen.jsp"),
45 @TilesPutAttribute(name = "navigation", value = "/WEB-INF/tiles/active/navigation/others.jsp"),
46 @TilesPutAttribute(name = "content", value = "/WEB-INF/tiles/active/view/picture/add_form.jsp")
47 })
48 })
49 public class AddAction extends EmptyAction {
50
51
52
53
54 private static final long serialVersionUID = -5152279376430754651L;
55
56
57
58
59 private static final Logger LOGGER = LogManager.getLogger(AddAction.class);
60
61 @InjectEJB(name="PictureDao")
62 private PictureDaoLocal pictureDaoLocal;
63
64 @InjectEJB(name="GalleryDao")
65 private GalleryDaoLocal galleryDaoLocal;
66
67 private Picture picture;
68
69 private File file;
70
71 public Picture getPicture() {
72 return picture;
73 }
74
75 public void setPicture(Picture picture) {
76 this.picture = picture;
77 }
78
79 public void setFile(File file) {
80 this.file = file;
81 }
82
83 @Override
84 @Actions({
85 @Action(
86 value = "add",
87 results = {
88 @Result(name = "success", type = "redirectAction", location = "index.html"),
89 @Result(name = "input", type="tiles", location = "pictureAddForm"),
90 @Result(name = "error", type="tiles", location = "pictureAddError")
91 }
92 )
93 })
94 public String execute() throws Exception {
95 LOGGER.info("execute() aufgerufen.");
96
97 String remoteUser = ServletActionContext.getRequest().getRemoteUser();
98 String remoteAddress = ServletActionContext.getRequest().getRemoteAddr();
99
100 if(picture != null) {
101 picture.setUuid(UUID.randomUUID().toString());
102 picture.setModified(new Date());
103 picture.setCreated(new Date());
104 picture.setModifiedBy(remoteUser);
105 picture.setModifiedAddress(remoteAddress);
106
107 picture.getDescriptionMap().get(Language.DE).setUuid(UUID.randomUUID().toString());
108 picture.getDescriptionMap().get(Language.DE).setPicture(picture);
109 picture.getDescriptionMap().get(Language.DE).setLanguage(Language.DE);
110 String noLineBreaks = picture.getDescriptionMap().get(Language.DE).getDescription().replaceAll("(\\r|\\n)", "");
111 picture.getDescriptionMap().get(Language.DE).setDescription(noLineBreaks);
112
113 picture.getDescriptionMap().get(Language.EN).setUuid(UUID.randomUUID().toString());
114 picture.getDescriptionMap().get(Language.EN).setPicture(picture);
115 picture.getDescriptionMap().get(Language.EN).setLanguage(Language.EN);
116 picture.getDescriptionMap().get(Language.EN).setName(picture.getDescriptionMap().get(Language.DE).getName());
117 picture.getDescriptionMap().get(Language.EN).setDescription(picture.getDescriptionMap().get(Language.DE).getDescription());
118 picture.getDescriptionMap().get(Language.EN).setKeywords(picture.getDescriptionMap().get(Language.DE).getKeywords());
119
120
121
122 if(file != null) {
123
124
125 String generatePath = "/var/www/html/pictures/";
126 String uploadPath = generatePath + "FULL/";
127
128
129 String pictureSaveName = DigestUtils.shaHex("Hier ist das Geheimniss."
130 + file.getName() + new Date() + "Noch ein bischen.")
131 + ".png";
132
133 File fullPictureFileToCreate = new File(uploadPath, pictureSaveName);
134
135 if (!fullPictureFileToCreate.exists()) {
136 savePictureFile(file, fullPictureFileToCreate);
137 }
138
139 createNormal(uploadPath + pictureSaveName, generatePath
140 + "NORMAL/" + pictureSaveName);
141 createThumbnail(uploadPath + pictureSaveName, generatePath
142 + "THUMBNAIL/" + pictureSaveName);
143 createLarge(uploadPath + pictureSaveName, generatePath
144 + "LARGE/" + pictureSaveName);
145
146
147 picture.setPictureUrls(generatePictureUrls(pictureSaveName, picture));
148 }
149
150
151 pictureDaoLocal.merge(picture);
152 return SUCCESS;
153 }
154 else {
155 return ERROR;
156 }
157
158
159 }
160
161 public List<Gallery> getGalleryList() {
162 return galleryDaoLocal.findAll(0, galleryDaoLocal.countAll());
163 }
164
165 private static void savePictureFile(File source, File destination) throws Exception {
166 byte[] buffer = new byte[(int) source.length()];
167 InputStream in = new FileInputStream(source);
168 in.read(buffer);
169 FileOutputStream fileOutStream = new FileOutputStream(destination);
170 fileOutStream.write(buffer);
171 fileOutStream.flush();
172 fileOutStream.close();
173 in.close();
174 }
175
176 private static void createNormal(String source, String destination) throws IOException {
177 String s = null;
178
179 Process p = Runtime.getRuntime().exec(
180 "/usr/bin/convert " + source
181 + " -resize 600x500 -quality 85 -compress JPEG "
182 + destination);
183 BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
184 BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
185
186 while ((s = stdInput.readLine()) != null) {
187 System.out.println(s);
188 }
189
190 while ((s = stdError.readLine()) != null) {
191 System.out.println(s);
192 }
193 }
194
195 private static void createLarge(String source, String destination) throws IOException {
196 String s = null;
197
198 Process p = Runtime.getRuntime().exec(
199 "/usr/bin/convert " + source
200 + " -resize 1000x1000 -quality 85 -compress JPEG "
201 + destination);
202 BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
203 BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
204
205 while ((s = stdInput.readLine()) != null) {
206 System.out.println(s);
207 }
208
209 while ((s = stdError.readLine()) != null) {
210 System.out.println(s);
211 }
212 }
213
214 private static void createThumbnail(String source, String destination) throws IOException {
215 String s = null;
216
217 Process p = Runtime.getRuntime().exec(
218 "/usr/bin/convert " + source
219 + " -resize 200x143 -quality 85 -compress JPEG "
220 + destination);
221 BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
222 BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
223
224 while ((s = stdInput.readLine()) != null) {
225 System.out.println(s);
226 }
227
228 while ((s = stdError.readLine()) != null) {
229 System.out.println(s);
230 }
231 }
232
233 private static Map<UrlType, PictureUrl> generatePictureUrls(String pictureName, Picture pictureObject) {
234
235 Map<UrlType, PictureUrl> pictureUrls = new HashMap<UrlType, PictureUrl>();
236 PictureUrl normalPictureUrl = new PictureUrl();
237 normalPictureUrl.setUuid(UUID.randomUUID().toString());
238 normalPictureUrl.setPicture(pictureObject);
239 normalPictureUrl.setUrl(pictureName);
240 normalPictureUrl.setUrlType(UrlType.NORMAL);
241
242 PictureUrl largePictureUrl = new PictureUrl();
243 largePictureUrl.setUuid(UUID.randomUUID().toString());
244 largePictureUrl.setPicture(pictureObject);
245 largePictureUrl.setUrl(pictureName);
246 largePictureUrl.setUrlType(UrlType.LARGE);
247
248 PictureUrl thumbnailPictureUrl = new PictureUrl();
249 thumbnailPictureUrl.setUuid(UUID.randomUUID().toString());
250 thumbnailPictureUrl.setPicture(pictureObject);
251 thumbnailPictureUrl.setUrl(pictureName);
252 thumbnailPictureUrl.setUrlType(UrlType.THUMBNAIL);
253
254 PictureUrl fullPictureUrl = new PictureUrl();
255 fullPictureUrl.setUuid(UUID.randomUUID().toString());
256 fullPictureUrl.setPicture(pictureObject);
257 fullPictureUrl.setUrl(pictureName);
258 fullPictureUrl.setUrlType(UrlType.FULL);
259
260 pictureUrls.put(UrlType.NORMAL, normalPictureUrl);
261 pictureUrls.put(UrlType.LARGE, largePictureUrl);
262 pictureUrls.put(UrlType.THUMBNAIL, thumbnailPictureUrl);
263 pictureUrls.put(UrlType.FULL, fullPictureUrl);
264
265 return pictureUrls;
266 }
267
268 }