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.DataInterfaceGruppenmitglieder;
41 import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
42 import org.fhw.cabaweb.data.DataInterfaceProjekte;
43
44 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
45 import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
46
47 import org.fhw.cabaweb.webfrontend.configs.Keys;
48 import org.fhw.cabaweb.webfrontend.forms.simple.ProjektgruppeForm;
49
50 /***
51 * <strong>Action</strong>-Klasse für die Edit Projektbeschreibung Action .
52 * Die Controller Klasse der Struts Model View Controller Architektur.
53 *
54 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
55 * @version Version 1.0 06.07.2004
56 */
57 public final class EditProjektgruppeAction extends Action {
58
59 /***
60 * The <code>Log</code> instance for this application.
61 */
62 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.edit");
63
64 /***
65 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
66 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
67 * erzeugt.
68 *
69 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
70 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
71 * wenn die Anfrage bereits bearbeitet wurde.
72 *
73 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
74 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
75 * @param request Die HTTP Anfrage die wir gerade bearbeiten
76 * @param response The HTTP Antwort die wir erzeugen
77 *
78 * @return Die Action zu der wir weiterleiten
79 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
80 * bzw. die Business Logik einen Fehler verursacht
81 */
82 public ActionForward execute(ActionMapping mapping,
83 ActionForm form,
84 HttpServletRequest request,
85 HttpServletResponse response)
86 throws Exception
87 {
88 /*** Forwarding Action Variable mit null initialisieren */
89
90 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
91
92 /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
93
94 /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
95 * <code>ActionErrors</code> Objekt hinzugefügt.
96 */
97
98
99 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
100 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
101 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
103 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
104 DataInterfaceProjekte dip = new DataInterfaceProjekte();
105 /*** Die Session der aktuellen Anfrage */
106 HttpSession session = request.getSession();
107 /*** Die übergebene Action */
108 String action = request.getParameter("action");
109
110 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
111 boolean isAdmin = request.isUserInRole("Administrator");
112 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
113 boolean isProjectleader = false;
114 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
115 boolean isUser = false;
116 /*** Zwischenspeichvaribale für den Namen des Benutzers */
117 String username = request.getRemoteUser();
118
119 if(!isAdmin)
120 {
121 isProjectleader = request.isUserInRole("Projektleiter");
122 }
123 if(!isAdmin && !isProjectleader)
124 {
125 isUser = request.isUserInRole("Benutzer");
126 }
127
128 if (action == null)
129 {
130 action = "Create";
131 }
132
133 /*** Zwischenspeichvaribale für die Gruppennummer (Integer) */
134 Integer gruppennummer = null;
135 /*** Zwischenspeichvaribale für die Gruppennummer (Request String) */
136 String grpnummer = request.getParameter("gruppennummer");
137
138 if(grpnummer != null)
139 {
140 gruppennummer = new Integer(grpnummer);
141 }
142
143 if (log.isDebugEnabled())
144 {
145 log.debug("EditProjektgruppeAction: Processing " + action + " action for Project Group [" + gruppennummer + "]");
146 }
147
148 Projektgruppen projektgruppe = (Projektgruppen) dipg.sucheGruppennummer(gruppennummer);
149
150 if ((projektgruppe == null) && !action.equals("Create"))
151 {
152 if (log.isDebugEnabled())
153 {
154 log.debug(" No Project Group for gruppennummer " + gruppennummer);
155 }
156
157 return (mapping.findForward("failure"));
158 }
159
160 if (projektgruppe != null)
161 {
162 session.setAttribute(Keys.PROJEKTGRUPPE_KEY, projektgruppe);
163 }
164
165 Collection projekte = null;
166
167 if(isAdmin)
168 {
169
170 if (log.isDebugEnabled())
171 {
172 log.debug(" User has Role: Administrator");
173 log.debug(" Searching all Projects");
174 }
175
176 projekte = dip.sucheAlle();
177
178 if (log.isDebugEnabled())
179 {
180 log.debug(" Found " + projekte.size() + " Projects");
181 }
182 }
183 else if(isProjectleader)
184 {
185 if (log.isDebugEnabled())
186 {
187 log.debug(" User is NOT Administrator");
188 log.debug(" Searching own Project");
189 }
190
191 Collection usernames = digm.sucheLogInName(username);
192 Iterator iter = usernames.iterator();
193 Gruppenmitglieder user = null;
194
195 if(iter.hasNext())
196 {
197 user = (Gruppenmitglieder) iter.next();
198 }
199
200 if (log.isDebugEnabled())
201 {
202 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
203 }
204
205 ArrayList projektAL = new ArrayList();
206 projektAL.add((user.getProjektgruppe()).getProjekte());
207 projekte = projektAL;
208
209 if (log.isDebugEnabled())
210 {
211 log.debug(" Found " + projekte.size() + " Projects");
212 }
213 }
214
215 if (projekte != null)
216 {
217 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
218 }
219
220
221 if (form == null)
222 {
223 if (log.isDebugEnabled())
224 {
225 log.debug(" Creating new ProjektgruppeForm bean under key " + mapping.getAttribute());
226 }
227
228 form = new ProjektgruppeForm();
229
230 if ("request".equals(mapping.getScope()))
231 {
232 request.setAttribute(mapping.getAttribute(), form);
233 }
234 else
235 {
236 session.setAttribute(mapping.getAttribute(), form);
237 }
238 }
239
240 ProjektgruppeForm prjgform = (ProjektgruppeForm) form;
241 prjgform.setAction(action);
242
243 if (!action.equals("Create"))
244 {
245 if (log.isDebugEnabled())
246 {
247 log.debug(" Populating form from " + projektgruppe);
248 }
249
250 try
251 {
252 PropertyUtils.copyProperties(prjgform, projektgruppe);
253 prjgform.setGruppennummer(gruppennummer);
254 prjgform.setProjektnummer(projektgruppe.getProjekte().getProjektnummer());
255 prjgform.setAction(action);
256 }
257 catch (InvocationTargetException e)
258 {
259 Throwable t = e.getTargetException();
260 if (t == null)
261 t = e;
262 log.error("ProjektgruppeForm.populate", t);
263 throw new ServletException("ProjektgruppeForm.populate", t);
264 }
265 catch (Throwable t)
266 {
267 log.error("ProjektgruppeForm.populate", t);
268 throw new ServletException("ProjektgruppeForm.populate", t);
269 }
270 }
271
272
273 if (log.isDebugEnabled())
274 {
275 log.debug(" Forwarding to 'success' page");
276 }
277 return (mapping.findForward("success"));
278 }
279 }