1 package de.tivsource.page.user.actions.gallery;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.regex.Pattern;
6
7 import org.apache.logging.log4j.LogManager;
8 import org.apache.logging.log4j.Logger;
9 import org.apache.struts2.ServletActionContext;
10 import org.apache.struts2.convention.annotation.Action;
11 import org.apache.struts2.convention.annotation.Actions;
12 import org.apache.struts2.convention.annotation.Result;
13 import org.apache.struts2.tiles.annotation.TilesDefinition;
14 import org.apache.struts2.tiles.annotation.TilesDefinitions;
15 import org.apache.struts2.tiles.annotation.TilesPutAttribute;
16
17 import de.tivsource.ejb3plugin.InjectEJB;
18 import de.tivsource.page.dao.gallery.GalleryDaoLocal;
19 import de.tivsource.page.dao.picture.PictureDaoLocal;
20 import de.tivsource.page.dao.property.PropertyDaoLocal;
21 import de.tivsource.page.entity.enumeration.Language;
22 import de.tivsource.page.entity.gallery.Gallery;
23 import de.tivsource.page.entity.namingitem.Description;
24 import de.tivsource.page.entity.page.Page;
25 import de.tivsource.page.entity.picture.Picture;
26 import de.tivsource.page.user.actions.EmptyAction;
27 import de.tivsource.page.user.interfaces.Pagination;
28
29
30
31
32
33
34 @TilesDefinitions({
35 @TilesDefinition(name="picture", extend = "userTemplate", putAttributes = {
36 @TilesPutAttribute(name = "meta", value = "/WEB-INF/tiles/active/meta/picture.jsp"),
37 @TilesPutAttribute(name = "content", value = "/WEB-INF/tiles/active/view/gallery/picture.jsp")
38 })
39 })
40 public class PictureAction extends EmptyAction implements Pagination {
41
42
43
44
45 private static final long serialVersionUID = -5967314888490364407L;
46
47
48
49
50 private static final Logger LOGGER = LogManager.getLogger(PictureAction.class);
51
52 @InjectEJB(name="PropertyDao")
53 private PropertyDaoLocal propertyDaoLocal;
54
55 @InjectEJB(name="GalleryDao")
56 private GalleryDaoLocal galleryDaoLocal;
57
58 @InjectEJB(name="PictureDao")
59 private PictureDaoLocal pictureDaoLocal;
60
61 private Page page;
62
63 private Gallery gallery;
64
65 private Picture picture;
66
67
68
69
70
71 private String pathUuid;
72
73
74
75
76
77 private Integer requestedPicture;
78
79
80
81
82
83 private Integer requestedPage;
84
85 private Integer previousPicture;
86
87 private Integer nextPicture;
88
89
90
91
92 private Integer pictureCount;
93
94
95
96
97 private Integer maxPictures;
98
99
100
101 private Integer maxElements = 5;
102
103 private Integer next;
104 private Integer previous;
105 private Integer current;
106
107
108
109
110 private Integer from;
111
112
113
114
115 private Integer maxPages;
116
117 @Override
118 @Actions({
119 @Action(value = "*/*/*/index", results = {
120 @Result(name = "success", type = "tiles", location = "picture"),
121 @Result(name = "input", type = "redirectAction", location = "index.html", params={"namespace", "/"}),
122 @Result(name = "error", type = "redirectAction", location = "index.html", params={"namespace", "/"})
123 })
124 })
125 public String execute() throws Exception {
126 LOGGER.info("execute() aufgerufen.");
127
128
129 this.getLanguageFromActionContext();
130
131
132
133
134 boolean galleryPageEnabled = getProperty("gallery.page.enabled").equals("true") ? true : false;
135 if(!galleryPageEnabled) {
136 return ERROR;
137 }
138
139
140
141
142
143 if(getProperty("gallery.overview.list.quantity") != null) {
144 maxElements = Integer.parseInt(getProperty("gallery.overview.list.quantity"));
145 }
146
147 pathUuid = ServletActionContext.getRequest().getServletPath();
148 LOGGER.info("UUID from Path: " + pathUuid);
149
150
151
152
153 pathUuid = pathUuid.replaceAll("/index.html", "");
154 pathUuid = pathUuid.replaceAll("/gallery/", "");
155
156 LOGGER.info("UUID from Path: " + pathUuid);
157
158 String[] parts = pathUuid.split("/");
159
160 LOGGER.info("Erster Teil: " + parts[0]);
161
162
163
164
165
166 LOGGER.info("Zweiter Teil: " + parts[1]);
167 if(parts.length == 3 && isNumber(parts[1])) {
168 try {
169 requestedPage = Integer.parseInt(parts[1]);
170 } catch (Exception e) {
171 return ERROR;
172 }
173 } else {
174 return ERROR;
175 }
176
177
178
179
180
181
182 LOGGER.info("Dritter Teil: " + parts[2]);
183 if(parts.length == 3 && isNumber(parts[2])) {
184 try {
185 requestedPicture = Integer.parseInt(parts[2]);
186 } catch (Exception e){
187 return ERROR;
188 }
189 } else {
190 return ERROR;
191 }
192
193
194
195
196
197 if (isValid(parts[0]) && galleryDaoLocal.isGallery(parts[0])) {
198 LOGGER.info("gültige Gallery UUID.");
199
200 gallery = galleryDaoLocal.findByUuid(parts[0]);
201
202 pictureCount = pictureDaoLocal.countAllInGallery(gallery.getUuid());
203
204 calculate();
205
206
207 Integer pictureStart = requestedPage == 1 ? requestedPicture - 1 : (requestedPage - 1) * maxElements + requestedPicture - 1;
208 LOGGER.info("Attribute pictureStart: " + pictureStart);
209 picture = pictureDaoLocal.findCurrentPicture(pictureStart, gallery.getUuid());
210
211 createPageObject();
212
213 return SUCCESS;
214 }
215
216
217
218
219
220 return ERROR;
221 }
222
223 public Page getPage() {
224 return page;
225 }
226
227 public Gallery getGallery() {
228 return gallery;
229 }
230
231 public Picture getPicture() {
232 return picture;
233 }
234
235 public Integer getRequestedPage() {
236 return requestedPage;
237 }
238
239 public Integer getPreviousPicture() {
240 return previousPicture;
241 }
242
243 public Integer getNextPicture() {
244 return nextPicture;
245 }
246
247 @Override
248 public Integer getNext() {
249 return next;
250 }
251
252 @Override
253 public Integer getPrevious() {
254 return previous;
255 }
256
257 @Override
258 public Integer getCurrent() {
259 return requestedPicture;
260 }
261
262 @Override
263 public void setPage(Integer page) {
264
265 }
266
267 private Boolean isValid(String input) {
268 if (Pattern.matches("[abcdef0-9-]*", input)) {
269 return true;
270 } else {
271 return false;
272 }
273 }
274
275 private Boolean isNumber(String input) {
276 if (Pattern.matches("[0-9]*", input)) {
277 return true;
278 } else {
279 return false;
280 }
281 }
282
283
284
285
286
287 private void calculate() {
288 maxPages = (pictureCount % maxElements == 0) ? (pictureCount / maxElements)
289 : (pictureCount / maxElements) + 1;
290
291 LOGGER.info("Inhalt von requestedPage: " + requestedPage);
292
293 if(requestedPage == null) {
294 requestedPage = 1;
295 }
296
297
298 if(requestedPage > maxPages) {
299 requestedPage = 1;
300 }
301 LOGGER.info("Inhalt von requestedPage nach den Überprüfungen: " + requestedPage);
302
303 maxPictures = requestedPage * maxElements < pictureCount ? maxElements :
304 pictureCount - ((requestedPage - 1) * maxElements);
305 LOGGER.info("Errechnet maximal Anzahl von Bildern: " + maxPictures);
306
307
308 if(requestedPicture > maxPictures) {
309 requestedPicture = 1;
310 }
311
312
313 if(requestedPage == 1) {
314 LOGGER.info("requestedPage erste Abfrage");
315 previous = requestedPage;
316 next = (requestedPicture + 1 > maxPictures) ? requestedPage + 1 : requestedPage;
317 }
318 else if(requestedPicture == 1 && requestedPage - 1 >= 1) {
319 LOGGER.info("requestedPage zweite Abfrage");
320 previous = requestedPage - 1;
321 next = (requestedPicture + 1 > maxPictures) ? requestedPage + 1 : requestedPage;
322 current = requestedPage;
323 }
324 else {
325 LOGGER.info("requestedPage letze Abfrage");
326 previous = requestedPicture <= maxElements ? requestedPage : 1;
327 next = (requestedPicture + 1 > maxPictures) ? requestedPage + 1 : requestedPage;
328 current = requestedPage;
329 }
330
331
332 if(requestedPage == 1 && requestedPicture == 1) {
333 LOGGER.info("requestedPicture erste Abfrage");
334 previousPicture = null;
335 nextPicture = (2 <= pictureCount) ? 2 : null;
336 }
337 else if ((requestedPicture + 1 <= maxElements) && (requestedPicture + 1 <= maxPictures)) {
338 LOGGER.info("requestedPicture zweite Abfrage");
339 previousPicture = requestedPicture - 1 >= 1 ? requestedPicture - 1 : maxElements;
340 nextPicture = requestedPicture + 1;
341 }
342 else {
343 LOGGER.info("requestedPicture letzte Abfrage");
344 previousPicture = requestedPicture - 1 > 1 ? requestedPicture - 1 : maxElements;
345 nextPicture = (requestedPicture + 1 > maxElements) && (requestedPage + 1 <= maxPages) ? 1 : null;
346 }
347
348 }
349
350 private void createPageObject(){
351
352 page = new Page();
353 page.setTechnical("picture_current");
354 Map<Language, Description> descriptionMap = new HashMap<Language, Description>();
355
356 Description descriptionDE = new Description();
357 descriptionDE.setDescription(picture.getDescriptionMap().get(Language.DE).getDescription());
358 descriptionDE.setKeywords(picture.getDescriptionMap().get(Language.DE).getKeywords());
359 descriptionDE.setLanguage(Language.DE);
360 descriptionDE.setName(picture.getDescriptionMap().get(Language.DE).getName());
361 descriptionDE.setNamingItem(page);
362 descriptionMap.put(Language.DE, descriptionDE);
363
364 Description descriptionEN = new Description();
365 descriptionEN.setDescription(picture.getDescriptionMap().get(Language.EN).getDescription());
366 descriptionEN.setKeywords(picture.getDescriptionMap().get(Language.EN).getKeywords());
367 descriptionEN.setLanguage(Language.EN);
368 descriptionEN.setName(picture.getDescriptionMap().get(Language.EN).getName());
369 descriptionEN.setNamingItem(page);
370 descriptionMap.put(Language.EN, descriptionEN);
371
372 page.setDescriptionMap(descriptionMap);
373 page.setPicture(picture);
374 page.setPictureOnPage(gallery.getPictureOnPage());
375 page.setCssGroup(gallery.getCssGroup());
376
377 }
378
379 }