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