001: package org.tigris.scarab.pipeline;
002:
003: /* ================================================================
004: * Copyright (c) 2001 Collab.Net. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by Collab.Net <http://www.Collab.Net/>."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" or
028: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
029: * prior written permission of Collab.Net.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of Collab.Net.
047: */
048:
049: import java.io.IOException;
050: import java.util.HashMap;
051: import java.util.Map;
052:
053: import org.apache.fulcrum.parser.ParameterParser;
054: import org.apache.torque.TorqueException;
055: import org.apache.torque.om.NumberKey;
056: import org.apache.turbine.RunData;
057: import org.apache.turbine.TurbineException;
058: import org.apache.turbine.ValveContext;
059: import org.apache.turbine.pipeline.AbstractValve;
060: import org.tigris.scarab.om.IssueManager;
061: import org.tigris.scarab.om.IssueType;
062: import org.tigris.scarab.om.IssueTypeManager;
063: import org.tigris.scarab.om.MITList;
064: import org.tigris.scarab.om.MITListManager;
065: import org.tigris.scarab.om.Module;
066: import org.tigris.scarab.om.ModuleManager;
067: import org.tigris.scarab.om.ScarabUser;
068: import org.tigris.scarab.util.Log;
069: import org.tigris.scarab.util.ScarabConstants;
070:
071: /**
072: * This valve clears any stale data out of the user due to aborted wizards.
073: *
074: * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
075: * @version $Id: FreshenUserValve.java 10290 2006-09-08 23:42:25Z jorgeuriarte $
076: */
077: public class FreshenUserValve extends AbstractValve {
078: protected static final Map XMIT_SCREENS = new HashMap();
079:
080: public void initialize() throws Exception {
081: XMIT_SCREENS.put("IssueTypeList.vm", null);
082: XMIT_SCREENS.put("AdvancedQuery.vm", null);
083: XMIT_SCREENS.put("Search.vm", null);
084: XMIT_SCREENS.put("IssueList.vm", null);
085: XMIT_SCREENS.put("RSSDataExport.vm", null);
086: XMIT_SCREENS.put("RSSIssueList.vm", null);
087: XMIT_SCREENS.put("ViewIssue.vm", null);
088: XMIT_SCREENS.put("QueryList.vm", null);
089: XMIT_SCREENS.put("SaveQuery.vm", null);
090: XMIT_SCREENS.put("EditQuery.vm", null);
091: XMIT_SCREENS.put("UserList.vm", null);
092: XMIT_SCREENS.put("ConfigureIssueList.vm", null);
093: XMIT_SCREENS.put("EditXModuleList.vm", null);
094: XMIT_SCREENS.put("reports,Info.vm", null);
095: XMIT_SCREENS.put("reports,ConfineDataset.vm", null);
096: XMIT_SCREENS.put("reports,XModuleList.vm", null);
097: XMIT_SCREENS.put("reports,AxisConfiguration.vm", null);
098: XMIT_SCREENS.put("reports,Report_1.vm", null);
099: // this is not a real .vm file, but a pointer to a java screen class
100: XMIT_SCREENS.put("IssueListExport.vm", null);
101:
102: }
103:
104: /**
105: * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
106: */
107: public void invoke(RunData data, ValveContext context)
108: throws IOException, TurbineException {
109: ScarabUser user = (ScarabUser) data.getUser();
110:
111: try {
112: // Check, whether password is expired
113: if (user.isPasswordExpired()) {
114: // Under no conditions an expired password will be
115: // accepted. The request is always forwarded to the
116: // password change mask until the password has been reset. [HD]
117: data.setTarget("ChangePassword.vm");
118: data.save();
119: context.invokeNext(data);
120: return;
121: }
122: adjustCurrentModule(user, data);
123: adjustCurrentIssueType(user, data);
124: } catch (Exception e) {
125: Log.get().error("", e);
126: // Ignore on purpose because if things
127: // are screwed up, we don't need to know about it.
128: }
129:
130: // set the thread key
131: ParameterParser parameters = data.getParameters();
132: String key = parameters
133: .getString(ScarabConstants.THREAD_QUERY_KEY);
134: if (key != null) {
135: user.setThreadKey(new Integer(key));
136: } else {
137: user.setThreadKey(null);
138: }
139:
140: // remove any report that was aborted
141: String reportKey = parameters
142: .getString(ScarabConstants.REMOVE_CURRENT_REPORT);
143: if (reportKey != null && reportKey.length() > 0) {
144: user.setCurrentReport(reportKey, null);
145: }
146:
147: // remove the current module/issuetype list, if needed
148: String removeMitKey = parameters
149: .getString(ScarabConstants.REMOVE_CURRENT_MITLIST_QKEY);
150: String target = data.getTarget();
151: boolean xmitScreen = XMIT_SCREENS.containsKey(target);
152: if (removeMitKey != null || !xmitScreen) {
153: Log.get().debug("xmit list set to null");
154: user.setCurrentMITList(null);
155: }
156:
157: // override the current module/issuetype list if one is given
158: // in the url.
159: String mitid = parameters
160: .getString(ScarabConstants.CURRENT_MITLIST_ID);
161: if (mitid != null) {
162: MITList mitList = null;
163: try {
164: // FIXME: no getInstance(Integer)
165: mitList = MITListManager.getInstance(new NumberKey(
166: mitid));
167: user.setCurrentMITList(mitList);
168: mitList.setScarabUser(user);
169: } catch (TorqueException e) {
170: throw new TurbineException(e); //EXCEPTION
171: }
172: }
173:
174: // Pass control to the next Valve in the Pipeline
175: context.invokeNext(data);
176: }
177:
178: private void adjustCurrentModule(ScarabUser user, RunData data)
179: throws TurbineException, Exception {
180: Module module = null;
181: ParameterParser parameters = data.getParameters();
182: String key = parameters
183: .getString(ScarabConstants.CURRENT_MODULE);
184: if (key != null) {
185: try {
186: module = ModuleManager.getInstance(new Integer(key));
187: } catch (Exception e) {
188: throw new TurbineException(e); //EXCEPTION
189: }
190: } else if (parameters.getString("id") != null) {
191: try {
192: module = IssueManager.getIssueById(
193: parameters.getString("id")).getModule();
194: parameters.setString(ScarabConstants.CURRENT_MODULE,
195: module.getQueryKey());
196: } catch (Exception e) {
197: // ignore
198: Log
199: .get()
200: .debug(
201: "'id' parameter was available, "
202: + parameters.getString("id")
203: + ", but did not contain enough info to create issue.");
204: }
205: }
206: if (module != null) {
207: user.setCurrentModule(module);
208: }
209: }
210:
211: /**
212: * Sets the current issue type if its value changed in the RunData instance.
213: * If the RunData instance does not contain an issueType, this method
214: * returns without doing anything.
215: *
216: * @param user
217: * @param data
218: * @throws TurbineException
219: */
220: private void adjustCurrentIssueType(ScarabUser user, RunData data)
221: throws TurbineException {
222: IssueType issueType = null;
223: ParameterParser parameters = data.getParameters();
224: String key = parameters
225: .getString(ScarabConstants.CURRENT_ISSUE_TYPE);
226: if (key != null && key.length() > 0) {
227: try {
228: issueType = IssueTypeManager.getInstance(new Integer(
229: key));
230: if (Log.get().isDebugEnabled()) {
231: Log.get().debug(
232: "setting issue type: "
233: + issueType.getName()
234: + " based on curit");
235: }
236: } catch (NumberFormatException noIssueType) {
237: } catch (Exception e) {
238: throw new TurbineException(e); //EXCEPTION
239: }
240: } else {
241: String templateId = data.getParameters().getString(
242: "templateId");
243: if (templateId != null && templateId.length() > 0) {
244: try {
245: IssueType templateType = IssueManager.getInstance(
246: new Long(templateId)).getIssueType();
247: issueType = templateType
248: .getIssueTypeForTemplateType();
249: parameters.setString(
250: ScarabConstants.CURRENT_ISSUE_TYPE,
251: issueType.getQueryKey());
252: if (Log.get().isDebugEnabled()) {
253: Log.get().debug(
254: "setting issue type: "
255: + issueType.getName()
256: + " based on template");
257: }
258: } catch (Exception e) {
259: Log.get().warn(
260: "'templateId' parameter was available, "
261: + parameters
262: .getString("templateId")
263: + ", but invalid.", e);
264: }
265: }
266: }
267:
268: if (issueType != null) {
269: user.setCurrentIssueType(issueType);
270: }
271:
272: }
273:
274: }
|