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