View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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&uuml;r den Download von Ergebnisdaten zust&auml;ndig (Export nach XML und evtl. Transformation nach PDF/HTML/o.&auml;)
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          //        Locale locale = getLocale(request);
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          //        HttpSession session = request.getSession();
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             //            Document xml = ExportReport.createDocument(projektgruppe.getProjekte().getProjektnummer(), gruppennummer, quartal, reportnummer, sprachnummer);
203 
204             if (log.isDebugEnabled())
205             {
206                 log.debug(" Formatiere XML Ausgabe");
207             }
208 
209             ByteArrayOutputStream baos = null;
210 
211             /*
212              * reportkind
213              * <0 = UNGÜLTIG
214              * 0  = XML
215              * 1  = PDF
216              * 2  = HTML
217              * 3  = RTF
218              * >3 = RESERVED
219              */
220             switch (reportkind.intValue())
221             {
222                 case 0 :
223                     // PREPARE XML RESPONSE
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                     //                    baos = ReportTransform.writeXML(xml);
233 
234                     //Send content to Browser
235                     response.setContentLength(baos.size());
236                     response.getOutputStream().write(baos.toByteArray());
237                     response.getOutputStream().flush();
238                     break;
239                 case 1 :
240                     // PREPARE XML->PDF RESPONSE
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                     //                    baos = ReportTransform.writePDF(xml);
250 
251                     //Send content to Browser
252                     response.setContentLength(baos.size());
253                     response.getOutputStream().write(baos.toByteArray());
254                     response.getOutputStream().flush();
255                     break;
256                 case 2 :
257                     // PREPARE XML->HTML RESPONSE
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                     //                    baos = ReportTransform.writeHTML(xml);
267 
268                     //Send content to Browser
269                     response.setContentLength(baos.size());
270                     response.getOutputStream().write(baos.toByteArray());
271                     response.getOutputStream().flush();
272                     break;
273                 case 3 :
274                     // PREPARE XML->RTF RESPONSE
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                     //                    baos = ReportTransform.writeRTF(xml);
284 
285                     //Send content to Browser
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                 //                Document xml = ExportReport.createDocument(projektgruppe.getProjekte().getProjektnummer(), projektgruppe.getGruppennummer(), quartal, reportnummer, sprachnummer);
319 
320                 if (log.isDebugEnabled())
321                 {
322                     log.debug(" Formatiere XML Ausgabe");
323                 }
324 
325                 ByteArrayOutputStream baos = null;
326 
327                 /*
328                  * reportkind
329                  * <0 = UNGÜLTIG
330                  * 0  = XML
331                  * 1  = PDF
332                  * 2  = HTML
333                  * 3  = RTF
334                  * >3 = RESERVED
335                  */
336                 switch (reportkind.intValue())
337                 {
338                     case 0 :
339                         // PREPARE XML RESPONSE
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                         //                        baos = ReportTransform.writeXML(xml);
349 
350                         //Send content to Browser
351                         response.setContentLength(baos.size());
352                         response.getOutputStream().write(baos.toByteArray());
353                         response.getOutputStream().flush();
354                         break;
355                     case 1 :
356                         // PREPARE XML->PDF RESPONSE
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                         //                        baos = ReportTransform.writePDF(xml);
366 
367                         //Send content to Browser
368                         response.setContentLength(baos.size());
369                         response.getOutputStream().write(baos.toByteArray());
370                         response.getOutputStream().flush();
371                         break;
372                     case 2 :
373                         // PREPARE XML->HTML RESPONSE
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                         //                        baos = ReportTransform.writeHTML(xml);
383 
384                         //Send content to Browser
385                         response.setContentLength(baos.size());
386                         response.getOutputStream().write(baos.toByteArray());
387                         response.getOutputStream().flush();
388                         break;
389                     case 3 :
390                         // PREPARE XML->RTF RESPONSE
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                         //                        baos = ReportTransform.writeRTF(xml);
400 
401                         //Send content to Browser
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             //            Document xml = ExportReport.createDocument(user.getProjektgruppe().getProjekte().getProjektnummer(), user.getProjektgruppe().getGruppennummer(), quartal, reportnummer, sprachnummer);
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                  * reportkind
433                  * <0 = UNGÜLTIG
434                  * 0  = XML
435                  * 1  = PDF
436                  * 2  = HTML
437                  * 3  = RTF
438                  * >3 = RESERVED
439                  */
440                 switch (reportkind.intValue())
441                 {
442                     case 0 :
443                         // PREPARE XML RESPONSE
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                         //                    baos = ReportTransform.writeXML(xml);
453 
454                         //Send content to Browser
455                         response.setContentLength(baos.size());
456                         response.getOutputStream().write(baos.toByteArray());
457                         response.getOutputStream().flush();
458                         break;
459                     case 1 :
460                         // PREPARE XML->PDF RESPONSE
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                         //                    baos = ReportTransform.writePDF(xml);
470 
471                         //Send content to Browser
472                         response.setContentLength(baos.size());
473                         response.getOutputStream().write(baos.toByteArray());
474                         response.getOutputStream().flush();
475                         break;
476                     case 2 :
477                         // PREPARE XML->HTML RESPONSE
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                         //                baos = ReportTransform.writeHTML(xml);
487 
488                         //Send content to Browser
489                         response.setContentLength(baos.size());
490                         response.getOutputStream().write(baos.toByteArray());
491                         response.getOutputStream().flush();
492                         break;
493                     case 3 :
494                         // PREPARE XML->RTF RESPONSE
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                         //                    baos = ReportTransform.writeRTF(xml);
504 
505                         //Send content to Browser
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 }