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.edit;
20
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29 import javax.servlet.http.HttpSession;
30
31 import org.apache.struts.action.Action;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
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.DataInterfaceErgebnissdatenFeldnamen;
41 import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenGruppierungsnamen;
42 import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenUntergruppierungsnamen;
43 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
44 import org.fhw.cabaweb.data.DataInterfaceReporterzeugung;
45 import org.fhw.cabaweb.data.DataInterfaceProjekte;
46 import org.fhw.cabaweb.data.DataInterfaceReportnamen;
47 import org.fhw.cabaweb.data.DataInterfaceSprachen;
48
49 import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Feldnamen;
50 import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Gruppierungsnamen;
51 import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Untergruppierungsnamen;
52 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
53 import org.fhw.cabaweb.ojb.dataobjects.Reporterzeugung;
54
55 import org.fhw.cabaweb.webfrontend.configs.Keys;
56 import org.fhw.cabaweb.webfrontend.forms.simple.ReporterzeugungForm;
57
58 /***
59 * <strong>Action</strong>-Klasse für die Edit Reporterzeugung Action .
60 * Die Controller Klasse der Struts Model View Controller Architektur.
61 *
62 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
63 * @version Version 1.0 05.09.2004
64 */
65 public final class EditReporterzeugungAction extends Action {
66
67 /***
68 * The <code>Log</code> instance for this application.
69 */
70 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.edit");
71
72 /***
73 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
74 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
75 * erzeugt.
76 *
77 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
78 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
79 * wenn die Anfrage bereits bearbeitet wurde.
80 *
81 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
82 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
83 * @param request Die HTTP Anfrage die wir gerade bearbeiten
84 * @param response The HTTP Antwort die wir erzeugen
85 *
86 * @return Die Action zu der wir weiterleiten
87 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
88 * bzw. die Business Logik einen Fehler verursacht
89 */
90 public ActionForward execute(ActionMapping mapping,
91 ActionForm form,
92 HttpServletRequest request,
93 HttpServletResponse response)
94 throws Exception
95 {
96 /*** Forwarding Action Variable mit null initialisieren */
97
98 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
99
100 /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
101
102 /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
103 * <code>ActionErrors</code> Objekt hinzugefügt.
104 */
105
106
107 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
108 DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
109 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
110 DataInterfaceReporterzeugung dire = new DataInterfaceReporterzeugung();
111 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
112 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
113 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
114 DataInterfaceProjekte dip = new DataInterfaceProjekte();
115 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
116 DataInterfaceErgebnissdatenFeldnamen diefn = new DataInterfaceErgebnissdatenFeldnamen();
117 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
118 DataInterfaceErgebnissdatenGruppierungsnamen diegn = new DataInterfaceErgebnissdatenGruppierungsnamen();
119 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
120 DataInterfaceErgebnissdatenUntergruppierungsnamen dieugn = new DataInterfaceErgebnissdatenUntergruppierungsnamen();
121 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
122 DataInterfaceSprachen dis = new DataInterfaceSprachen();
123 /*** Die Session der aktuellen Anfrage */
124 HttpSession session = request.getSession();
125 /*** Die übergebene Action */
126 String action = request.getParameter("action");
127
128 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
129 boolean isAdmin = request.isUserInRole("Administrator");
130 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
131 boolean isProjectleader = false;
132 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
133 boolean isUser = false;
134 /*** Zwischenspeichvaribale für den Namen des Benutzers */
135 String username = request.getRemoteUser();
136
137 if(!isAdmin)
138 {
139 isProjectleader = request.isUserInRole("Projektleiter");
140 }
141 if(!isAdmin && !isProjectleader)
142 {
143 isUser = request.isUserInRole("Benutzer");
144 }
145
146 if (action == null)
147 {
148 action = "Create";
149 }
150
151 /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
152 Integer projektnummer = null;
153 /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
154 String prjnummer = request.getParameter("projektnummer");
155
156 /*** Zwischenspeichvaribale für die Reportnummer (Integer) */
157 Integer reportnummer = null;
158 /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
159 String rptnummer = request.getParameter("reportnummer");
160
161 /*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
162 Integer sprachnummer = null;
163 /*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
164 String sprnummer = request.getParameter("sprachnummer");
165
166 /*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
167 Integer seite = null;
168 /*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
169 String page = request.getParameter("seite");
170
171 /*** Zwischenspeichvaribale für die Position (Integer) */
172 Integer position = null;
173 /*** Zwischenspeichvaribale für die Position (Request String) */
174 String pos = request.getParameter("position");
175
176 if(prjnummer != null)
177 {
178 projektnummer = new Integer(prjnummer);
179 }
180
181 if(rptnummer != null)
182 {
183 reportnummer = new Integer(rptnummer);
184 }
185
186 if(sprnummer != null)
187 {
188 sprachnummer = new Integer(sprnummer);
189 }
190
191 if(page != null)
192 {
193 seite = new Integer(page);
194 }
195
196 if(pos != null)
197 {
198 position = new Integer(pos);
199 }
200
201 if (log.isDebugEnabled())
202 {
203 log.debug("EditReporterzeugungAction: Processing " + action + " action for Reporterzeugung [" + projektnummer + ", " + reportnummer + ", " + sprachnummer + ", " + seite + ", " + position + "]");
204 }
205
206 Collection reporterzeugungen = dire.sucheKombination(reportnummer, projektnummer, sprachnummer, seite, position);
207 Iterator reporterzeugungenIterator = reporterzeugungen.iterator();
208 Reporterzeugung reporterzeugung = null;
209 if(reporterzeugungenIterator.hasNext())
210 reporterzeugung = (Reporterzeugung) reporterzeugungenIterator.next();
211
212 if ((reporterzeugung == null) && !action.equals("Create"))
213 {
214 if (log.isDebugEnabled())
215 {
216 log.debug(" No Reporterzeugung for reportnummer " + reportnummer);
217 }
218
219 return (mapping.findForward("failure"));
220 }
221
222 if (reporterzeugung != null)
223 {
224 session.setAttribute(Keys.REPORTERZEUGUNG_KEY, reporterzeugung);
225 }
226
227 Collection projekte = new ArrayList();
228 Collection reportnamen = new ArrayList();
229 Collection feldnamen = new ArrayList();
230 Collection gruppierungsnamen = new ArrayList();
231 Collection untergruppierungsnamen = new ArrayList();
232
233 if(isAdmin)
234 {
235 if (log.isDebugEnabled())
236 {
237 log.debug(" User has Role: Administrator");
238 log.debug(" Searching all Projects");
239 log.debug(" Searching all Reportnames");
240 log.debug(" Searching all Fieldnames");
241 log.debug(" Searching all Groupnames");
242 log.debug(" Searching all Sub-Groupnames");
243 }
244
245 projekte = dip.sucheAlle();
246 reportnamen = dirn.sucheAlle();
247 feldnamen.add(new Ergebnissdaten_Feldnamen(new Integer(0), null, null, "", "", ""));
248 feldnamen.addAll(diefn.sucheAlle());
249 gruppierungsnamen.add(new Ergebnissdaten_Gruppierungsnamen(new Integer(0), null, ""));
250 gruppierungsnamen.addAll(diegn.sucheAlle());
251 untergruppierungsnamen.add(new Ergebnissdaten_Untergruppierungsnamen(new Integer(0), null, ""));
252 untergruppierungsnamen.addAll(dieugn.sucheAlle());
253
254 if (log.isDebugEnabled())
255 {
256 log.debug(" Found " + projekte.size() + " Projects");
257 log.debug(" Found " + reportnamen.size() + " Reportnames");
258 log.debug(" Found " + feldnamen.size() + " Fieldnames");
259 log.debug(" Found " + gruppierungsnamen.size() + " Groupnames");
260 log.debug(" Found " + untergruppierungsnamen.size() + " Sub-Groupnames");
261 }
262 }
263 else if(isProjectleader)
264 {
265 if (log.isDebugEnabled())
266 {
267 log.debug(" User is NOT Administrator");
268 log.debug(" Searching own Project");
269 log.debug(" Searching own Reportnames");
270 log.debug(" Searching own Fieldnames");
271 log.debug(" Searching own Groupnames");
272 log.debug(" Searching own Sub-Groupnames");
273 }
274
275 Collection usernames = digm.sucheLogInName(username);
276 Iterator iter = usernames.iterator();
277 Gruppenmitglieder user = null;
278
279 if(iter.hasNext())
280 {
281 user = (Gruppenmitglieder) iter.next();
282 }
283
284 if (log.isDebugEnabled())
285 {
286 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
287 }
288
289 ArrayList projekteAL = new ArrayList();
290 projekteAL.add((user.getProjektgruppe()).getProjekte());
291 projekte = projekteAL;
292 reportnamen = dirn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer());
293
294 feldnamen.add(new Ergebnissdaten_Feldnamen(new Integer(0), null, null, "", "", ""));
295 feldnamen.addAll(diefn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
296 gruppierungsnamen.add(new Ergebnissdaten_Gruppierungsnamen(new Integer(0), null, ""));
297 gruppierungsnamen.addAll(diegn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
298 untergruppierungsnamen.add(new Ergebnissdaten_Untergruppierungsnamen(new Integer(0), null, ""));
299 untergruppierungsnamen.addAll(dieugn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
300
301 if (log.isDebugEnabled())
302 {
303 log.debug(" Found " + projekte.size() + " Projects");
304 log.debug(" Found " + reportnamen.size() + " Reportnames");
305 log.debug(" Found " + feldnamen.size() + " Fieldnames");
306 log.debug(" Found " + gruppierungsnamen.size() + " Groupnames");
307 log.debug(" Found " + untergruppierungsnamen.size() + " Sub-Groupnames");
308 }
309 }
310
311 if (projekte != null)
312 {
313 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
314 }
315
316 if (reportnamen != null)
317 {
318 session.setAttribute(Keys.REPORTNAMEN_KEY, reportnamen);
319 }
320
321 if (reportnamen != null)
322 {
323 session.setAttribute(Keys.ERGEBNISSDATENFELDNAMEN_KEY, feldnamen);
324 }
325
326 if (reportnamen != null)
327 {
328 session.setAttribute(Keys.ERGEBNISSDATENGRUPPIERUNGSNAMEN_KEY, gruppierungsnamen);
329 }
330
331 if (reportnamen != null)
332 {
333 session.setAttribute(Keys.ERGEBNISSDATENUNTERGRUPPIERUNGSNAMEN_KEY, untergruppierungsnamen);
334 }
335
336 Collection sprachen = dis.sucheAlle();
337 if (sprachen != null)
338 {
339 session.setAttribute(Keys.SPRACHEN_KEY, sprachen);
340 }
341
342
343 if (form == null)
344 {
345 if (log.isDebugEnabled())
346 {
347 log.debug(" Creating new ReporterzeugungForm bean under key " + mapping.getAttribute());
348 }
349
350 form = new ReporterzeugungForm();
351
352 if ("request".equals(mapping.getScope()))
353 {
354 request.setAttribute(mapping.getAttribute(), form);
355 }
356 else
357 {
358 session.setAttribute(mapping.getAttribute(), form);
359 }
360 }
361
362 ReporterzeugungForm reform = (ReporterzeugungForm) form;
363 reform.setAction(action);
364
365 if (!action.equals("Create"))
366 {
367 if (log.isDebugEnabled())
368 {
369 log.debug(" Populating form from " + reporterzeugung);
370 }
371
372 try
373 {
374 PropertyUtils.copyProperties(reform, reporterzeugung);
375 reform.setProjektnummer(reporterzeugung.getReportnamen().getProjekte().getProjektnummer());
376 reform.setReportnummer(reporterzeugung.getReportnamen().getReportnummer());
377 reform.setSprachnummer(reporterzeugung.getSprachen().getSprachnummer());
378 reform.setAction(action);
379 }
380 catch (InvocationTargetException e)
381 {
382 Throwable t = e.getTargetException();
383 if (t == null)
384 t = e;
385 log.error("ReporterzeugungForm.populate", t);
386 throw new ServletException("ReporterzeugungForm.populate", t);
387 }
388 catch (Throwable t)
389 {
390 log.error("ReporterzeugungForm.populate", t);
391 throw new ServletException("ReporterzeugungForm.populate", t);
392 }
393 }
394
395
396 if (log.isDebugEnabled())
397 {
398 log.debug(" Forwarding to 'success' page");
399 }
400 return (mapping.findForward("success"));
401 }
402 }