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.DataInterfaceBerechnungsauftraege;
41 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
42 import org.fhw.cabaweb.data.DataInterfaceProjekte;
43
44 import org.fhw.cabaweb.ojb.dataobjects.Berechnungsauftraege;
45 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
46
47 import org.fhw.cabaweb.webfrontend.configs.Keys;
48 import org.fhw.cabaweb.webfrontend.forms.simple.BerechnungsauftragForm;
49
50 /***
51 * <strong>Action</strong>-Klasse für die Edit Berechnungsauftrag 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 09.07.2004
56 */
57 public final class EditBerechnungsauftragAction 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 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
101 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102 DataInterfaceBerechnungsauftraege diba = new DataInterfaceBerechnungsauftraege();
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 if (action == null)
110 {
111 action = "Create";
112 }
113
114 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
115 boolean isAdmin = request.isUserInRole("Administrator");
116 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
117 boolean isProjectleader = false;
118 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
119 boolean isUser = false;
120 /*** Zwischenspeichvaribale für den Namen des Benutzers */
121 String username = request.getRemoteUser();
122
123 if(!isAdmin)
124 {
125 isProjectleader = request.isUserInRole("Projektleiter");
126 }
127 if(!isAdmin && !isProjectleader)
128 {
129 isUser = request.isUserInRole("Benutzer");
130 }
131
132 /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
133 Integer projektnummer = null;
134 /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
135 String prjnummer = request.getParameter("projektnummer");
136
137 if(prjnummer != null)
138 {
139 projektnummer = new Integer(prjnummer);
140 }
141
142 if (log.isDebugEnabled())
143 {
144 log.debug("EditBerechnungsauftragAction: Processing " + action + " action for Calculation [" + projektnummer + "]");
145 }
146
147 Berechnungsauftraege berechnungsauftrag = (Berechnungsauftraege) diba.sucheProjektnummer(projektnummer);
148
149 if ((berechnungsauftrag == null) && !action.equals("Create"))
150 {
151 if (log.isDebugEnabled())
152 {
153 log.debug(" No Calculation for projektnummer " + projektnummer);
154 }
155
156 return (mapping.findForward("failure"));
157 }
158
159 if (berechnungsauftrag != null)
160 {
161 session.setAttribute(Keys.BERECHNUNGSAUFTRAG_KEY, berechnungsauftrag);
162 }
163
164 Collection projekte = null;
165
166 if(isAdmin)
167 {
168 if (log.isDebugEnabled())
169 {
170 log.debug(" User has Role: Administrator");
171 log.debug(" Searching all Projects");
172 }
173
174 projekte = dip.sucheAlle();
175
176 if (log.isDebugEnabled())
177 {
178 log.debug(" Found " + projekte.size() + " Projects");
179 }
180 }
181 else if(isProjectleader)
182 {
183 if (log.isDebugEnabled())
184 {
185 log.debug(" User is NOT Administrator");
186 log.debug(" Searching own Project");
187 }
188
189 Collection usernames = digm.sucheLogInName(username);
190 Iterator iter = usernames.iterator();
191 Gruppenmitglieder user = null;
192
193 if(iter.hasNext())
194 {
195 user = (Gruppenmitglieder) iter.next();
196 }
197
198 if (log.isDebugEnabled())
199 {
200 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
201 }
202
203 ArrayList projekteAL = new ArrayList();
204 projekteAL.add((user.getProjektgruppe()).getProjekte());
205 projekte = projekteAL;
206
207 if (log.isDebugEnabled())
208 {
209 log.debug(" Found " + projekte.size() + " Projects");
210 }
211 }
212 else if(isUser)
213 {
214 if (log.isDebugEnabled())
215 {
216 log.debug(" User is User");
217 log.debug(" No Search");
218 }
219 }
220
221 if (projekte != null)
222 {
223 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
224 }
225
226
227 if (form == null)
228 {
229 if (log.isDebugEnabled())
230 {
231 log.debug(" Creating new BerechnungsauftragForm bean under key " + mapping.getAttribute());
232 }
233
234 form = new BerechnungsauftragForm();
235
236 if ("request".equals(mapping.getScope()))
237 {
238 request.setAttribute(mapping.getAttribute(), form);
239 }
240 else
241 {
242 session.setAttribute(mapping.getAttribute(), form);
243 }
244 }
245
246 BerechnungsauftragForm prjgform = (BerechnungsauftragForm) form;
247 prjgform.setAction(action);
248
249 if (!action.equals("Create"))
250 {
251 if (log.isDebugEnabled())
252 {
253 log.debug(" Populating form from " + berechnungsauftrag);
254 }
255
256 try
257 {
258 PropertyUtils.copyProperties(prjgform, berechnungsauftrag);
259 prjgform.setProjektnummer(berechnungsauftrag.getProjekte().getProjektnummer());
260 prjgform.setAction(action);
261 }
262 catch (InvocationTargetException e)
263 {
264 Throwable t = e.getTargetException();
265 if (t == null)
266 t = e;
267 log.error("BerechnungsauftragForm.populate", t);
268 throw new ServletException("BerechnungsauftragForm.populate", t);
269 }
270 catch (Throwable t)
271 {
272 log.error("BerechnungsauftragForm.populate", t);
273 throw new ServletException("BerechnungsauftragForm.populate", t);
274 }
275 }
276
277
278 if (log.isDebugEnabled())
279 {
280 log.debug(" Forwarding to 'success' page");
281 }
282 return (mapping.findForward("success"));
283 }
284 }