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.DataInterfaceProjekte;
43 import org.fhw.cabaweb.data.initialdata.ErgebnissDatenInitialisierung;
44 import org.fhw.cabaweb.data.initialdata.ProjektgruppenUndMitgliederInitialisierung;
45 import org.fhw.cabaweb.data.initialdata.ReporterzeugungenInitialisierung;
46 import org.fhw.cabaweb.data.initialdata.VoreinstellungsDatenInitialisierung;
47
48 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
49 import org.fhw.cabaweb.ojb.dataobjects.Projekte;
50
51 import org.fhw.cabaweb.tools.StringUtilities;
52 import org.fhw.cabaweb.webfrontend.configs.Keys;
53 import org.fhw.cabaweb.webfrontend.forms.simple.ProjektForm;
54
55 /***
56 * <strong>Action</strong>-Klasse für die Save Projekt Action .
57 * Die Controller Klasse der Struts Model View Controller Architektur.
58 *
59 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
60 * @version Version 1.0 03.06.2004
61 */
62 public final class SaveProjektAction extends Action {
63
64 /***
65 * The <code>Log</code> instance for this application.
66 */
67 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.save");
68
69 /***
70 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
71 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
72 * erzeugt.
73 *
74 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
75 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
76 * wenn die Anfrage bereits bearbeitet wurde.
77 *
78 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
79 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
80 * @param request Die HTTP Anfrage die wir gerade bearbeiten
81 * @param response The HTTP Antwort die wir erzeugen
82 *
83 * @return Die Action zu der wir weiterleiten
84 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
85 * bzw. die Business Logik einen Fehler verursacht
86 */
87 public ActionForward execute(ActionMapping mapping,
88 ActionForm form,
89 HttpServletRequest request,
90 HttpServletResponse response)
91 throws Exception {
92 /*** Forwarding Action Variable mit null initialisieren */
93
94 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
95
96
97 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
98 DataInterfaceProjekte dip = new DataInterfaceProjekte();
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 ProjektForm prjform = (ProjektForm) form;
107 /*** Die übergebene Action */
108 String action = prjform.getAction();
109
110 /*** Zwischenspeichvaribale für den Rückgabewert */
111 boolean returnvalue = false;
112 /*** Zwischenspeichvaribale für das Projekt */
113 Projekte projekt = 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("SaveProjektAction: 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
156 if (isCancelled(request))
157 {
158 if (log.isDebugEnabled())
159 {
160 log.debug(" Transaction '" + action + "' was cancelled");
161 }
162
163 session.removeAttribute(Keys.PROJEKT_KEY);
164 return (mapping.findForward("success"));
165 }
166
167 projekt = (Projekte) session.getAttribute(Keys.PROJEKT_KEY);
168
169 if (projekt == null)
170 {
171 if (log.isDebugEnabled())
172 {
173 log.debug(" In Session saved Project is NULL.");
174 }
175
176 projekt = new Projekte();
177 }
178
179
180 if (log.isDebugEnabled())
181 {
182 log.debug(" Populating database from form bean");
183 }
184
185 try
186 {
187 PropertyUtils.copyProperties(projekt, prjform);
188 }
189 catch (InvocationTargetException e)
190 {
191 Throwable t = e.getTargetException();
192 if (t == null)
193 t = e;
194 log.error("Project.populate", t);
195 throw new ServletException("Project.populate", t);
196 }
197 catch (Throwable t)
198 {
199 log.error("Project.populate", t);
200 throw new ServletException("Project.populate", t);
201 }
202
203 projekt.setProjektname(StringUtilities.convertUTF8String(projekt.getProjektname()));
204
205 if ("Create".equals(action) && isAdmin)
206 {
207 if (log.isDebugEnabled())
208 {
209 log.debug("Creating a new Project");
210 }
211
212 returnvalue = dip.erzeugen(projekt);
213 session.removeAttribute(Keys.PROJEKT_KEY);
214
215 if (!returnvalue)
216 {
217 if (log.isDebugEnabled())
218 {
219 log.debug(" Project creation failed");
220 }
221
222 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.project.create"));
223 return (null);
224 }
225 else
226 {
227 Collection projekte = dip.sucheProjektname(projekt.getProjektname());
228 Iterator iter = projekte.iterator();
229
230 if (iter.hasNext())
231 {
232 projekt = (Projekte) iter.next();
233 }
234
235 if (projekt == null)
236 {
237 if (log.isDebugEnabled())
238 {
239 log.debug(" Project not found !?!");
240 }
241
242 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.project.create"));
243 return (null);
244 }
245 else
246 {
247 ProjektgruppenUndMitgliederInitialisierung.ProjektgruppenInitialisieren(projekt.getProjektnummer());
248 ProjektgruppenUndMitgliederInitialisierung.GruppenmitgliederInitialisieren(projekt.getProjektnummer());
249 ErgebnissDatenInitialisierung.ergebnissDatenInitialisieren(projekt.getProjektnummer());
250 VoreinstellungsDatenInitialisierung.VoreinstellungsDatenInitialisieren(projekt.getProjektnummer());
251 VoreinstellungsDatenInitialisierung.VoreinstellungenInitialisieren(projekt.getProjektnummer());
252 ReporterzeugungenInitialisierung.ReporterzeugungenInitialisieren(projekt.getProjektnummer());
253 }
254 }
255 }
256
257 if (action.equals("Delete") && isAdmin)
258 {
259 if (log.isDebugEnabled())
260 {
261 log.debug(" Deleting existing Project [ " + projekt.getProjektnummer() + " ] Name: " + projekt.getProjektname());
262 }
263
264 returnvalue = dip.loeschen(projekt);
265 session.removeAttribute(Keys.PROJEKT_KEY);
266
267 if (!returnvalue)
268 {
269 if (log.isDebugEnabled())
270 {
271 log.debug(" Project deletion failed");
272 }
273
274 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.project.delete"));
275 return (null);
276 }
277 }
278
279 if (action.equals("Edit") && (isAdmin || isProjectleader))
280 {
281 if (log.isDebugEnabled())
282 {
283 log.debug(" Editing existing Project [ " + projekt.getProjektnummer() + " ] Name: " + projekt.getProjektname());
284 }
285
286 Collection usernames = dig.sucheLogInName(username);
287 Iterator iter = usernames.iterator();
288 Gruppenmitglieder user = null;
289
290 while (iter.hasNext())
291 {
292 user = (Gruppenmitglieder) iter.next();
293 }
294
295 if(isProjectleader && projekt.getProjektnummer().equals(((user.getProjektgruppe()).getProjekte()).getProjektnummer()) || isAdmin)
296 {
297 if (log.isDebugEnabled())
298 {
299 log.debug(" Project editing is being processed");
300 }
301
302 returnvalue = dip.editieren(projekt);
303 }
304 else
305 {
306 if (log.isDebugEnabled())
307 {
308 log.debug(" User not authorized to edit Project");
309 }
310 }
311
312 session.removeAttribute(Keys.PROJEKT_KEY);
313
314 if (!returnvalue)
315 {
316 if (log.isDebugEnabled())
317 {
318 log.debug(" Project editing failed");
319 }
320
321 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.project.edit"));
322 return (null);
323 }
324 }
325
326
327 if (mapping.getAttribute() != null)
328 {
329 if ("request".equals(mapping.getScope()))
330 request.removeAttribute(mapping.getAttribute());
331 else
332 session.removeAttribute(mapping.getAttribute());
333 }
334 session.removeAttribute(Keys.PROJEKT_KEY);
335
336
337 if (log.isDebugEnabled())
338 {
339 log.debug(" Forwarding to 'success' page");
340 }
341 return (mapping.findForward("success"));
342 }
343 }