1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ü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
95 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
96
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
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
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
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
329 if (log.isDebugEnabled())
330 {
331 log.debug(" Forwarding to 'success' page");
332 }
333 return (mapping.findForward("success"));
334 }
335 }