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