1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.fhw.cabaweb.webfrontend.actions;
21
22 import java.io.ByteArrayOutputStream;
23 import java.util.Collection;
24 import java.util.Iterator;
25
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.struts.action.Action;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
35 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
36 import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
37 import org.fhw.cabaweb.data.DataInterfaceReportnamen;
38 import org.fhw.cabaweb.export.caching.CachableByteArrayOutputStreamManager;
39 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
40 import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
41 import org.fhw.cabaweb.ojb.dataobjects.Reportnamen;
42
43 /***
44 * Diese Action Klasse ist für den Download von Ergebnisdaten zuständig (Export nach XML und evtl. Transformation nach PDF/HTML/o.ä)
45 *
46 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
47 * @version Version 1.0 10.09.2004
48 */
49 public final class ResultsAction extends Action
50 {
51
52 /*** Commons Logging Instanz */
53 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.ResultsAction");
54
55 /***
56 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
57 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
58 * erzeugt.
59 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
60 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
61 * wenn die Anfrage bereits bearbeitet wurde.
62 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
63 * bzw. die Business Logik einen Fehler verursacht
64 * @param request Die HTTP Anfrage die wir gerade bearbeiten
65 * @param response The HTTP Antwort die wir erzeugen
66 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
67 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
68 * @return Die Action zu der wir weiterleiten
69 */
70 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
71 {
72 /*** Forwarding Action Variable mit null initialisieren */
73 ActionForward forward = null;
74 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
75
76
77 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
78 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
79 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
80 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
81 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
82 DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
83 /*** Die Session der aktuellen Anfrage */
84
85 /*** Die übergebene Action */
86 String action = request.getParameter("action");
87
88 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
89 boolean isAdmin = request.isUserInRole("Administrator");
90 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
91 boolean isProjectleader = false;
92 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
93 boolean isUser = false;
94 /*** Zwischenspeichvaribale für den Namen des Benutzers */
95 String username = request.getRemoteUser();
96
97 if (!isAdmin)
98 {
99 isProjectleader = request.isUserInRole("Projektleiter");
100 }
101 if (!isAdmin && !isProjectleader)
102 {
103 isUser = request.isUserInRole("Benutzer");
104 }
105
106 Collection usernames = digm.sucheLogInName(username);
107 Iterator iter = usernames.iterator();
108 Gruppenmitglieder user = null;
109
110 if (iter.hasNext())
111 {
112 user = (Gruppenmitglieder) iter.next();
113 }
114
115 if (action == null)
116 {
117 action = "Export";
118 }
119
120 /*** Zwischenspeichvaribale für die Gruppennummer (Integer) */
121 Integer gruppennummer = null;
122 /*** Zwischenspeichvaribale für die Gruppennummer (Request String) */
123 String grpnummer = request.getParameter("gruppennummer");
124
125 /*** Zwischenspeichvaribale für das Quartal (Integer) */
126 Integer quartal = null;
127 /*** Zwischenspeichvaribale für das Quartal (Request String) */
128 String qrt = request.getParameter("quartal");
129
130 /*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
131 Integer sprachnummer = null;
132 /*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
133 String sprnummer = request.getParameter("sprachnummer");
134
135 /*** Zwischenspeichvaribale für die Reportnummer (Integer) */
136 Integer reportnummer = null;
137 /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
138 String rptnummer = request.getParameter("reportnummer");
139
140 /*** Zwischenspeichvaribale für die Reportnummer (Integer) */
141 Integer reportkind = new Integer(0);
142 /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
143 String rptkind = request.getParameter("reportkind");
144
145 if (grpnummer != null)
146 {
147 gruppennummer = new Integer(grpnummer);
148 }
149 else
150 {
151 gruppennummer = user.getProjektgruppe().getGruppennummer();
152 }
153
154 if (qrt != null)
155 {
156 quartal = new Integer(qrt);
157 }
158 else
159 {
160 quartal = new Integer(0);
161 }
162
163 if (sprnummer != null)
164 {
165 sprachnummer = new Integer(sprnummer);
166 }
167
168 if (rptnummer != null)
169 {
170 reportnummer = new Integer(rptnummer);
171 }
172
173 if (rptkind != null)
174 {
175 reportkind = new Integer(rptkind);
176 }
177
178 CachableByteArrayOutputStreamManager cbaosm = CachableByteArrayOutputStreamManager.getInstance();
179
180 Reportnamen reportname = (Reportnamen) dirn.sucheReportnummer(reportnummer);
181
182 if (isAdmin)
183 {
184 if (log.isDebugEnabled())
185 {
186 log.debug(" User has Role: Administrator");
187 log.debug(" Erzeuge Ausgabe");
188 }
189
190 Projektgruppen projektgruppe = (Projektgruppen) dipg.sucheGruppennummer(gruppennummer);
191
192 if ((projektgruppe == null) && !action.equals("Create"))
193 {
194 if (log.isDebugEnabled())
195 {
196 log.debug(" No Project Group for gruppennummer " + gruppennummer);
197 }
198
199 return (mapping.findForward("failure"));
200 }
201
202
203
204 if (log.isDebugEnabled())
205 {
206 log.debug(" Formatiere XML Ausgabe");
207 }
208
209 ByteArrayOutputStream baos = null;
210
211
212
213
214
215
216
217
218
219
220 switch (reportkind.intValue())
221 {
222 case 0 :
223
224 response.setContentType("text/xml");
225
226 if (log.isDebugEnabled())
227 {
228 log.debug(" Gebe XML zurueck");
229 }
230
231 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "XML");
232
233
234
235 response.setContentLength(baos.size());
236 response.getOutputStream().write(baos.toByteArray());
237 response.getOutputStream().flush();
238 break;
239 case 1 :
240
241 response.setContentType("application/pdf");
242
243 if (log.isDebugEnabled())
244 {
245 log.debug(" Gebe PDF zurueck");
246 }
247
248 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "PDF");
249
250
251
252 response.setContentLength(baos.size());
253 response.getOutputStream().write(baos.toByteArray());
254 response.getOutputStream().flush();
255 break;
256 case 2 :
257
258 response.setContentType("text/html");
259
260 if (log.isDebugEnabled())
261 {
262 log.debug(" Gebe HTML zurueck");
263 }
264
265 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "HTML");
266
267
268
269 response.setContentLength(baos.size());
270 response.getOutputStream().write(baos.toByteArray());
271 response.getOutputStream().flush();
272 break;
273 case 3 :
274
275 response.setContentType("application/rtf");
276
277 if (log.isDebugEnabled())
278 {
279 log.debug(" Gebe RTF zurueck");
280 }
281
282 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "RTF");
283
284
285
286 response.setContentLength(baos.size());
287 response.getOutputStream().write(baos.toByteArray());
288 response.getOutputStream().flush();
289 break;
290 default :
291 log.warn(" WHAT YOU TRYING THIS MODE DOES NOT EXIST !!!");
292 break;
293 }
294 }
295 else if (isProjectleader)
296 {
297 if (log.isDebugEnabled())
298 {
299 log.debug(" User has Role: Projectleader");
300 log.debug(" Erzeuge XML");
301 }
302
303 Projektgruppen projektgruppe = (Projektgruppen) dipg.sucheGruppennummer(gruppennummer);
304
305 if (projektgruppe == null)
306 {
307 if (log.isDebugEnabled())
308 {
309 log.debug(" No Project Group for gruppennummer " + gruppennummer);
310 }
311
312 return (mapping.findForward("failure"));
313 }
314
315 if (projektgruppe.getProjekte().getProjektnummer().intValue() == user.getProjektgruppe().getProjekte().getProjektnummer().intValue())
316 {
317
318
319
320 if (log.isDebugEnabled())
321 {
322 log.debug(" Formatiere XML Ausgabe");
323 }
324
325 ByteArrayOutputStream baos = null;
326
327
328
329
330
331
332
333
334
335
336 switch (reportkind.intValue())
337 {
338 case 0 :
339
340 response.setContentType("text/xml");
341
342 if (log.isDebugEnabled())
343 {
344 log.debug(" Gebe XML zurueck");
345 }
346
347 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "XML");
348
349
350
351 response.setContentLength(baos.size());
352 response.getOutputStream().write(baos.toByteArray());
353 response.getOutputStream().flush();
354 break;
355 case 1 :
356
357 response.setContentType("application/pdf");
358
359 if (log.isDebugEnabled())
360 {
361 log.debug(" Gebe PDF zurueck");
362 }
363
364 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "PDF");
365
366
367
368 response.setContentLength(baos.size());
369 response.getOutputStream().write(baos.toByteArray());
370 response.getOutputStream().flush();
371 break;
372 case 2 :
373
374 response.setContentType("text/html");
375
376 if (log.isDebugEnabled())
377 {
378 log.debug(" Gebe HTML zurueck");
379 }
380
381 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "HTML");
382
383
384
385 response.setContentLength(baos.size());
386 response.getOutputStream().write(baos.toByteArray());
387 response.getOutputStream().flush();
388 break;
389 case 3 :
390
391 response.setContentType("application/rtf");
392
393 if (log.isDebugEnabled())
394 {
395 log.debug(" Gebe RTF zurueck");
396 }
397
398 baos = cbaosm.getCachableByteArrayOutputStream(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer, "RTF");
399
400
401
402 response.setContentLength(baos.size());
403 response.getOutputStream().write(baos.toByteArray());
404 response.getOutputStream().flush();
405 break;
406 default :
407 log.warn(" WHAT YOU TRYING THIS MODE DOES NOT EXIST !!!");
408 break;
409 }
410 }
411 }
412 else if (isUser)
413 {
414 if (log.isDebugEnabled())
415 {
416 log.debug(" User has Role: simple User");
417 log.debug(" Erzeuge XML");
418 }
419
420
421
422 if (reportname.getReporttyp().compareTo("Bewertung") != 0)
423 {
424 if (log.isDebugEnabled())
425 {
426 log.debug(" Formatiere XML Ausgabe");
427 }
428
429 ByteArrayOutputStream baos = null;
430
431
432
433
434
435
436
437
438
439
440 switch (reportkind.intValue())
441 {
442 case 0 :
443
444 response.setContentType("text/xml");
445
446 if (log.isDebugEnabled())
447 {
448 log.debug(" Gebe XML zurueck");
449 }
450
451 baos = cbaosm.getCachableByteArrayOutputStream(user.getProjektgruppe().getProjekte().getProjektnummer(), user.getProjektgruppe().getGruppennummer(), quartal, reportnummer, sprachnummer, "XML");
452
453
454
455 response.setContentLength(baos.size());
456 response.getOutputStream().write(baos.toByteArray());
457 response.getOutputStream().flush();
458 break;
459 case 1 :
460
461 response.setContentType("application/pdf");
462
463 if (log.isDebugEnabled())
464 {
465 log.debug(" Gebe PDF zurueck");
466 }
467
468 baos = cbaosm.getCachableByteArrayOutputStream(user.getProjektgruppe().getProjekte().getProjektnummer(), user.getProjektgruppe().getGruppennummer(), quartal, reportnummer, sprachnummer, "PDF");
469
470
471
472 response.setContentLength(baos.size());
473 response.getOutputStream().write(baos.toByteArray());
474 response.getOutputStream().flush();
475 break;
476 case 2 :
477
478 response.setContentType("text/html");
479
480 if (log.isDebugEnabled())
481 {
482 log.debug(" Gebe HTML zurueck");
483 }
484
485 baos = cbaosm.getCachableByteArrayOutputStream(user.getProjektgruppe().getProjekte().getProjektnummer(), user.getProjektgruppe().getGruppennummer(), quartal, reportnummer, sprachnummer, "HTML");
486
487
488
489 response.setContentLength(baos.size());
490 response.getOutputStream().write(baos.toByteArray());
491 response.getOutputStream().flush();
492 break;
493 case 3 :
494
495 response.setContentType("application/rtf");
496
497 if (log.isDebugEnabled())
498 {
499 log.debug(" Gebe RTF zurueck");
500 }
501
502 baos = cbaosm.getCachableByteArrayOutputStream(user.getProjektgruppe().getProjekte().getProjektnummer(), user.getProjektgruppe().getGruppennummer(), quartal, reportnummer, sprachnummer, "RTF");
503
504
505
506 response.setContentLength(baos.size());
507 response.getOutputStream().write(baos.toByteArray());
508 response.getOutputStream().flush();
509 break;
510 default :
511 log.warn(" WHAT YOU TRYING THIS MODE DOES NOT EXIST !!!");
512 break;
513 }
514 }
515 else
516 {
517 log.error(" User is not allowed to view BEWERTUNG");
518 }
519 }
520
521 if (log.isDebugEnabled())
522 {
523 log.debug(" Verarbeitung abgeschlossen");
524 }
525
526 return forward;
527 }
528 }