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  package org.fhw.cabaweb.webfrontend.actions.save;
20  
21  import java.lang.reflect.InvocationTargetException;
22  import java.util.Collection;
23  import java.util.Iterator;
24  
25  import javax.servlet.ServletException;
26  import javax.servlet.http.HttpServletRequest;
27  import javax.servlet.http.HttpServletResponse;
28  import javax.servlet.http.HttpSession;
29  
30  import org.apache.struts.action.Action;
31  import org.apache.struts.action.ActionForm;
32  import org.apache.struts.action.ActionForward;
33  import org.apache.struts.action.ActionMapping;
34  
35  import org.apache.struts.util.MessageResources;
36  
37  import org.apache.commons.beanutils.PropertyUtils;
38  import org.apache.commons.logging.Log;
39  import org.apache.commons.logging.LogFactory;
40  
41  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
42  import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
43  import org.fhw.cabaweb.data.DataInterfaceProjekte;
44  
45  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
46  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
47  import org.fhw.cabaweb.ojb.dataobjects.Projekte;
48  
49  import org.fhw.cabaweb.tools.Password;
50  import org.fhw.cabaweb.tools.StringUtilities;
51  import org.fhw.cabaweb.webfrontend.configs.Keys;
52  import org.fhw.cabaweb.webfrontend.forms.simple.ProjektgruppeForm;
53  
54  /***
55   * <strong>Action</strong>-Klasse f&uuml;r die Save Projektgruppe Action .
56   * Die Controller Klasse der Struts Model View Controller Architektur.
57   *
58   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
59   * @version Version 1.0 06.07.2004
60   */
61  public final class SaveProjektgruppeAction extends Action {
62  
63      /***
64       * The <code>Log</code> instance for this application.
65       */
66      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.save");
67  
68      /***
69       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
70       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
71       * erzeugt.  
72       * 
73       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
74       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
75       * wenn die Anfrage bereits bearbeitet wurde.
76       * 
77       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
78       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
79       * @param request Die HTTP Anfrage die wir gerade bearbeiten
80       * @param response The HTTP Antwort die wir erzeugen
81       *
82       * @return Die Action zu der wir weiterleiten
83       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
84       *            bzw. die Business Logik einen Fehler verursacht 
85       */
86      public ActionForward execute(ActionMapping mapping,
87  				                 ActionForm form,
88                                   HttpServletRequest request,
89                                   HttpServletResponse response)
90      throws Exception {
91          /*** Forwarding Action Variable mit null initialisieren */
92  //        ActionForward forward = null;
93          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
94  //        Locale locale = getLocale(request);
95  
96          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
97          DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
98          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
99          DataInterfaceProjekte dip = new DataInterfaceProjekte();
100         /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
101         DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
102         /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
103         MessageResources messages = getResources(request);
104         /*** Die Session der aktuellen Anfrage */
105         HttpSession session = request.getSession();
106         /*** Das übergebene Formular */
107         ProjektgruppeForm prjgform = (ProjektgruppeForm) form;
108         /*** Die übergebene Action */
109         String action = prjgform.getAction();
110 
111         /*** Zwischenspeichvaribale für den Rückgabewert */
112         boolean returnvalue = false;
113         /*** Zwischenspeichvaribale für das Projektgruppe */
114         Projektgruppen projektgruppe = null;
115 
116         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
117         boolean isAdmin = request.isUserInRole("Administrator");
118         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
119         boolean isProjectleader = false;
120         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
121         boolean isUser = false;
122         /*** Zwischenspeichvaribale für den Namen des Benutzers */
123         String username = request.getRemoteUser();
124 
125         if(!isAdmin)
126         {
127             isProjectleader = request.isUserInRole("Projektleiter");
128         }
129         if(!isAdmin && !isProjectleader)
130         {
131             isUser = request.isUserInRole("Benutzer");
132         }
133 
134         Collection usernames = dig.sucheLogInName(username);
135         Iterator iter = usernames.iterator();
136         Gruppenmitglieder user = null;
137             
138         while (iter.hasNext())
139         {
140             user = (Gruppenmitglieder) iter.next();
141         }         
142 
143     	if (action == null) 
144     	{
145     	    action = "?";
146         }
147         
148         if (log.isDebugEnabled()) 
149         {
150             log.debug("SaveProjektgruppeAction: Processing " + action + " action");
151             if(isAdmin)
152             {
153                 log.debug(" User has Role: Administrator");
154             }
155             else if(isProjectleader)
156             {
157                 log.debug(" User has Role: Projectleader");
158             }
159             else if(isUser)
160             {
161                 log.debug(" User has Role: User");
162             }
163         }
164     
165     	// Was this transaction cancelled?
166     	if (isCancelled(request)) 
167     	{
168             if (log.isDebugEnabled()) 
169             {
170                 log.debug(" Transaction '" + action + "' was cancelled");
171             }
172             
173             session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
174     	    return (mapping.findForward("success"));
175     	}
176 
177         projektgruppe = (Projektgruppen) session.getAttribute(Keys.PROJEKTGRUPPE_KEY);
178 
179         if (projektgruppe == null) 
180         {
181             if (log.isDebugEnabled()) 
182             {
183                 log.debug(" In Session saved Project Group is NULL.");
184             }
185             
186             projektgruppe = new Projektgruppen();
187         }
188 
189         // All required validations were done by the form itself
190         if (log.isDebugEnabled()) 
191         {
192             log.debug(" Populating database from form bean");
193         }
194 
195         try 
196         {
197             PropertyUtils.copyProperties(projektgruppe, prjgform);
198             projektgruppe.setProjekte((Projekte) dip.sucheProjektnummer(prjgform.getProjektnummer()));
199         } 
200         catch (InvocationTargetException e) 
201         {
202             Throwable t = e.getTargetException();
203             if (t == null)
204                 t = e;
205             log.error("ProjektgruppeForm.populate", t);
206             throw new ServletException("ProjektgruppeForm.populate", t);
207         } 
208         catch (Throwable t) 
209         {
210             log.error("ProjektgruppeForm.populate", t);
211             throw new ServletException("ProjektgruppeForm.populate", t);
212         }
213 
214         projektgruppe.setGruppenname(StringUtilities.convertUTF8String(projektgruppe.getGruppenname()));
215         projektgruppe.setPasswort(StringUtilities.convertUTF8String(projektgruppe.getPasswort()));
216 
217         if ("Create".equals(action) && (isAdmin || isProjectleader)) 
218         {
219             if (log.isDebugEnabled()) 
220             {
221                 log.debug("Creating a new Project Group: " + projektgruppe);
222             }
223 
224             if(prjgform.getGeneratePasswort().booleanValue())
225             {
226                 projektgruppe.setPasswort(Password.passwortGenerator(10));
227             }
228             
229             returnvalue = dipg.erzeugen(projektgruppe);
230             session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
231 
232             if (!returnvalue) 
233             {
234                 if (log.isDebugEnabled()) 
235                 {
236                     log.debug(" Project Group creation failed");
237                 }
238 
239                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.projektgruppe.create"));
240                 return (null);
241             }
242         }
243         
244         if (action.equals("Delete") && isAdmin) 
245         {
246             if (log.isDebugEnabled()) 
247             {
248                 log.debug(" Deleting existing Project Group [ " + projektgruppe.getGruppennummer() + ", " 
249                           + projektgruppe.getProjekte().getProjektname() + " ] " + projektgruppe.getGruppenname());
250             }
251 
252             returnvalue = dipg.loeschen(projektgruppe);
253             session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
254 
255             if (!returnvalue) 
256             {
257                 if (log.isDebugEnabled()) 
258                 {
259                     log.debug(" Project Group deletion failed");
260                 }
261 
262                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.projektgruppe.delete"));
263                 return (null);
264             }
265         }
266         else if (action.equals("Delete") && isProjectleader) 
267         {
268             if (log.isDebugEnabled()) 
269             {
270                 log.debug(" Deleting existing Project Group [ " + projektgruppe.getGruppennummer() + ", " 
271                           + projektgruppe.getProjekte().getProjektname() + " ] " + projektgruppe.getGruppenname());
272             }
273 
274             if(projektgruppe.getProjekte().getProjektnummer().compareTo(user.getProjektgruppe().getProjekte().getProjektnummer()) == 0)
275             {
276                 returnvalue = dipg.loeschen(projektgruppe);
277             }
278             else
279             {
280                 returnvalue = false;
281             }
282             session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
283 
284             if (!returnvalue) 
285             {
286                 if (log.isDebugEnabled()) 
287                 {
288                     log.debug(" Project Group deletion failed");
289                 }
290 
291                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.projektgruppe.delete"));
292                 return (null);
293             }
294         }
295         
296         if (action.equals("Edit") && (isAdmin || isProjectleader)) 
297         {
298             if (log.isDebugEnabled()) 
299             {
300                 log.debug(" Editing existing Project Group [ " + projektgruppe.getGruppennummer() + ", " 
301                           + projektgruppe.getProjekte().getProjektname() + " ] " + projektgruppe.getGruppenname());
302             }
303 
304             if(prjgform.getGeneratePasswort() != null && prjgform.getGeneratePasswort().booleanValue())
305             {
306                 projektgruppe.setPasswort(Password.passwortGenerator(10));
307             }
308 
309             if((isProjectleader && projektgruppe.getProjekte().getProjektnummer().equals(((user.getProjektgruppe()).getProjekte()).getProjektnummer())) || isAdmin)
310             {
311                 if (log.isDebugEnabled()) 
312                 {
313                     log.debug(" Project Group editing is being processed");
314                 }
315 
316                 returnvalue = dipg.editieren(projektgruppe);
317             }
318             else
319             {
320                 if (log.isDebugEnabled()) 
321                 {
322                     log.debug(" User not authorized to edit Project Group");
323                 }
324             }
325             
326             session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
327 
328             if (!returnvalue) 
329             {
330                 if (log.isDebugEnabled()) 
331                 {
332                     log.debug(" Project Group editing failed");
333                 }
334 
335                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.projektgruppe.edit"));
336                 return (null);
337             }
338         }
339     
340         // Remove the obsolete form bean and current project
341         if (mapping.getAttribute() != null) 
342         {
343             if ("request".equals(mapping.getScope()))
344                 request.removeAttribute(mapping.getAttribute());
345             else
346                 session.removeAttribute(mapping.getAttribute());
347         }
348         session.removeAttribute(Keys.PROJEKTGRUPPE_KEY);
349     
350         // Forward control to the specified success URI
351         if (log.isDebugEnabled()) 
352         {
353             log.debug(" Forwarding to 'success' page");
354         }
355     	return (mapping.findForward("success"));
356     }
357 }