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.DataInterfaceProjekte;
37  import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
38  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
39  import org.fhw.cabaweb.ojb.dataobjects.Projekte;
40  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
41  
42  /***
43   * Diese Action Klasse ist f&uuml;r den Download der Mitglieds- und Gruppendaten
44   *
45   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
46   * @version Version 1.0 19.09.2004
47   */
48  public final class MitgliedslisteAction extends Action
49  {
50  
51      /*** Commons Logging Instanz */
52      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.MitgliedslisteAction");
53  
54      /***
55       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
56       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
57       * erzeugt.
58       *
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       *
63       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
64       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
65       * @param request Die HTTP Anfrage die wir gerade bearbeiten
66       * @param response The HTTP Antwort die wir erzeugen
67       *
68       * @return Die Action zu der wir weiterleiten
69       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
70       *            bzw. die Business Logik einen Fehler verursacht
71       */
72      public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
73      {
74          /*** Forwarding Action Variable mit null initialisieren */
75          ActionForward forward = null;
76          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
77          //        Locale locale = getLocale(request);
78  
79          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
80          DataInterfaceProjekte dip = new DataInterfaceProjekte();
81          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
82          DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
83          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
84          DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
85          /*** Die Session der aktuellen Anfrage */
86          //        HttpSession session = request.getSession();
87          /*** Die übergebene Action */
88          String action = request.getParameter("action");
89  
90          /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
91          boolean isAdmin = request.isUserInRole("Administrator");
92          /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
93          boolean isProjectleader = false;
94          /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
95          boolean isUser = false;
96          /*** Zwischenspeichvaribale für den Namen des Benutzers */
97          String username = request.getRemoteUser();
98  
99          if (!isAdmin)
100         {
101             isProjectleader = request.isUserInRole("Projektleiter");
102         }
103         if (!isAdmin && !isProjectleader)
104         {
105             isUser = request.isUserInRole("Benutzer");
106         }
107 
108         Collection usernames = digm.sucheLogInName(username);
109         Iterator iter = usernames.iterator();
110         Gruppenmitglieder user = null;
111 
112         if (iter.hasNext())
113         {
114             user = (Gruppenmitglieder) iter.next();
115         }
116 
117         if (action == null)
118         {
119             action = "Liste";
120         }
121 
122         /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
123         Integer projektnummer = null;
124         /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
125         String prjnummer = request.getParameter("projektnummer");
126 
127         if (prjnummer != null)
128         {
129             projektnummer = new Integer(prjnummer);
130         }
131 
132         if (isAdmin)
133         {
134             if (log.isDebugEnabled())
135             {
136                 log.debug(" User has Role: Administrator");
137                 log.debug(" Erzeuge Ausgabe fuer " + projektnummer);
138             }
139 
140             Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
141 
142             if (projekt == null)
143             {
144                 if (log.isDebugEnabled())
145                 {
146                     log.debug(" No Project for projektnummer " + projektnummer);
147                 }
148 
149                 return (mapping.findForward("failure"));
150             }
151 
152             if (log.isDebugEnabled())
153             {
154                 log.debug(" Formatiere TEXT Ausgabe");
155             }
156 
157             ByteArrayOutputStream baos = new ByteArrayOutputStream();
158 
159             String projektdaten = "Projekt: " + projekt.getProjektname();
160 
161             baos.write(projektdaten.getBytes());
162             baos.write('\n');
163 
164             Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
165             iter = projektgruppen.iterator();
166             Projektgruppen projektgruppe = null;
167 
168             while (iter.hasNext())
169             {
170                 projektgruppe = (Projektgruppen) iter.next();
171                     
172                 String projektgruppendaten = "Projektgruppe: " + projektgruppe.getGruppenname() + "\nPasswort: " + projektgruppe.getPasswort();
173 
174                 baos.write("--------------------------------------------".getBytes());
175                 baos.write('\n');
176                 baos.write(projektgruppendaten.getBytes());
177                 baos.write("\n----------\n".getBytes());
178 
179                 Collection gruppenmitglieder = digm.sucheGruppennummer(projektgruppe.getGruppennummer());
180                 Iterator iter2 = gruppenmitglieder.iterator();
181                 Gruppenmitglieder gruppenmitglied = null;
182 
183                 while (iter2.hasNext())
184                 {
185                     gruppenmitglied = (Gruppenmitglieder) iter2.next();
186                     
187                     String benutzer = gruppenmitglied.getMitgliedsname() + ", " + gruppenmitglied.getMitgliedsvorname();
188                     String adresse = gruppenmitglied.getMitgliedsadresse1() + "\n" + gruppenmitglied.getMitgliedsadresse2() + "\n" + gruppenmitglied.getMitgliedsplz() + " " + gruppenmitglied.getMitgliedsort();
189                     String daten = "Matrikelnummer: " + gruppenmitglied.getMitgliedskennzeichen() + "\n" + gruppenmitglied.getMitgliedsemailadresse();
190 
191                     baos.write(benutzer.getBytes());
192                     baos.write('\n');
193                     baos.write(adresse.getBytes());
194                     baos.write('\n');
195                     baos.write(daten.getBytes());
196                     baos.write("\n----------\n".getBytes());
197                 }
198             }
199 
200             // PREPARE XML RESPONSE
201             response.setContentType("text");
202 
203             if (log.isDebugEnabled())
204             {
205                 log.debug(" Gebe TEXT zurueck");
206             }
207 
208             //Send content to Browser
209             response.setContentLength(baos.size());
210             response.getOutputStream().write(baos.toByteArray());
211             response.getOutputStream().flush();
212         }
213         else if (isProjectleader)
214         {
215             if (log.isDebugEnabled())
216             {
217                 log.debug(" User has Role: Projectleader");
218                 log.debug(" Erzeuge Ausgabe fuer " + user.getProjektgruppe().getProjekte().getProjektnummer());
219             }
220 
221             Projekte projekt = user.getProjektgruppe().getProjekte();
222 
223             if (projekt == null)
224             {
225                 if (log.isDebugEnabled())
226                 {
227                     log.debug(" No Project for Projectleader");
228                 }
229 
230                 return (mapping.findForward("failure"));
231             }
232 
233             if (log.isDebugEnabled())
234             {
235                 log.debug(" Formatiere TEXT Ausgabe");
236             }
237 
238             ByteArrayOutputStream baos = new ByteArrayOutputStream();
239 
240             String projektdaten = "Projekt: " + projekt.getProjektname();
241 
242             baos.write(projektdaten.getBytes());
243             baos.write('\n');
244 
245             Collection projektgruppen = dipg.sucheProjektnummer(projekt.getProjektnummer());
246             iter = projektgruppen.iterator();
247             Projektgruppen projektgruppe = null;
248 
249             while (iter.hasNext())
250             {
251                 projektgruppe = (Projektgruppen) iter.next();
252                     
253                 String projektgruppendaten = "Projektgruppe: " + projektgruppe.getGruppenname() + "\nPasswort: " + projektgruppe.getPasswort();
254 
255                 baos.write("--------------------------------------------".getBytes());
256                 baos.write('\n');
257                 baos.write(projektgruppendaten.getBytes());
258                 baos.write("\n----------\n".getBytes());
259 
260                 Collection gruppenmitglieder = digm.sucheGruppennummer(projektgruppe.getGruppennummer());
261                 Iterator iter2 = gruppenmitglieder.iterator();
262                 Gruppenmitglieder gruppenmitglied = null;
263 
264                 while (iter2.hasNext())
265                 {
266                     gruppenmitglied = (Gruppenmitglieder) iter2.next();
267                     
268                     String benutzer = gruppenmitglied.getMitgliedsname() + ", " + gruppenmitglied.getMitgliedsvorname();
269                     String adresse = gruppenmitglied.getMitgliedsadresse1() + "\n" + gruppenmitglied.getMitgliedsadresse2() + "\n" + gruppenmitglied.getMitgliedsplz() + " " + gruppenmitglied.getMitgliedsort();
270                     String daten = "Matrikelnummer: " + gruppenmitglied.getMitgliedskennzeichen() + "\n" + gruppenmitglied.getMitgliedsemailadresse();
271 
272                     baos.write(benutzer.getBytes());
273                     baos.write('\n');
274                     baos.write(adresse.getBytes());
275                     baos.write('\n');
276                     baos.write(daten.getBytes());
277                     baos.write("\n----------\n".getBytes());
278                 }
279             }
280 
281             // PREPARE XML RESPONSE
282             response.setContentType("text");
283 
284             if (log.isDebugEnabled())
285             {
286                 log.debug(" Gebe TEXT zurueck");
287             }
288 
289             //Send content to Browser
290             response.setContentLength(baos.size());
291             response.getOutputStream().write(baos.toByteArray());
292             response.getOutputStream().flush();
293         }
294 
295         if (log.isDebugEnabled())
296         {
297             log.debug(" Verarbeitung abgeschlossen");
298         }
299 
300         return forward;
301     }
302 }