001: package org.tigris.scarab.screens;
002:
003: /* ================================================================
004: * Copyright (c) 2000-2002 CollabNet. 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: // Turbine Stuff
050: import org.apache.turbine.RunData;
051: import org.apache.turbine.TemplateContext;
052:
053: // Scarab Stuff
054: import org.tigris.scarab.services.security.ScarabSecurity;
055: import org.tigris.scarab.tools.ScarabRequestTool;
056: import org.tigris.scarab.tools.ScarabLocalizationTool;
057: import org.tigris.scarab.tools.localization.L10NKeySet;
058: import org.tigris.scarab.tools.localization.L10NMessage;
059: import org.tigris.scarab.util.Log;
060: import org.tigris.scarab.util.ScarabLink;
061: import org.tigris.scarab.om.Issue;
062: import org.tigris.scarab.om.IssueManager;
063: import org.tigris.scarab.om.ScarabModule;
064:
065: /**
066: * Handles dynamic title
067: *
068: * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
069: * @version $Id: ViewIssue.java 10083 2006-05-01 18:27:48Z jorgeuriarte $
070: */
071: public class ViewIssue extends Default {
072: /**
073: * Checks the validity of the issue before displaying the ViewIssue page, and
074: * sets the proper alert messages for the cases of invalid, moved or deleted issues.
075: */
076: protected void doBuildTemplate(RunData data, TemplateContext context)
077: throws Exception {
078: super .doBuildTemplate(data, context);
079: ScarabRequestTool scarabR = getScarabRequestTool(context);
080: Issue issue = null;
081: try {
082: String id = data.getParameters().getString("id");
083: issue = getReferredIssue(id, (ScarabModule) scarabR
084: .getCurrentModule());
085: boolean hasViewPermission = false;
086: boolean hasDeletePermission = false;
087: // Deleted issues will appear to not have existed before
088: if (issue == null || issue.getDeleted()) {
089: L10NMessage msg = new L10NMessage(
090: L10NKeySet.IssueIdNotValid, id);
091: scarabR.setAlertMessage(msg);
092: } else {
093: // Initialize the values the ViewIssue.vm template needs
094: hasViewPermission = scarabR.hasPermission(
095: ScarabSecurity.ISSUE__VIEW, issue.getModule());
096: hasDeletePermission = scarabR
097: .hasPermission(ScarabSecurity.ISSUE__DELETE,
098: issue.getModule());
099: context.put("currentIssue", issue);
100: context.put("hasViewPermission",
101: hasViewPermission ? Boolean.TRUE
102: : Boolean.FALSE);
103: context.put("hasDeletePermission",
104: hasDeletePermission ? Boolean.TRUE
105: : Boolean.FALSE);
106: if (!hasViewPermission) {
107: L10NMessage msg = new L10NMessage(
108: L10NKeySet.NoPermissionToViewIssue, id);
109: scarabR.setAlertMessage(msg);
110: } else if (issue.getMoved()) {
111: ScarabLink link = (ScarabLink) context.get("link");
112: Issue newIssue = scarabR
113: .getIssueIncludingDeleted(issue
114: .getIssueNewId());
115: L10NMessage msg = new L10NMessage(
116: L10NKeySet.IssueIsNowLocatedIn, link
117: .getIssueIdLink(newIssue), newIssue
118: .getUniqueId());
119: scarabR.setAlertMessage(msg);
120: }
121: }
122: } catch (Exception e) {
123: Log.get().error("doBuildTemplate: " + e);
124: }
125:
126: }
127:
128: private Issue getReferredIssue(String id, ScarabModule module) {
129: if (module != null) { // Will prefix with module's code if ID is just a number
130: try {
131: Integer.parseInt(id);
132: id = module.getCode().concat(id);
133: } catch (NumberFormatException nfe) {
134: }
135: }
136:
137: Issue issue = IssueManager.getIssueById(id);
138: return issue;
139: }
140:
141: protected String getTitle(ScarabRequestTool scarabR,
142: ScarabLocalizationTool l10n, RunData data,
143: TemplateContext context) throws Exception {
144: String title = (new L10NMessage(L10NKeySet.ViewIssue)
145: .getMessage(l10n));
146: String currentIssueId = data.getParameters().getString("id");
147: Issue issue = null;
148: if (currentIssueId != null) {
149: issue = scarabR.getIssue(currentIssueId);
150: }
151: if (issue != null) {
152: String name = issue.getModule().getRModuleIssueType(
153: issue.getIssueType()).getDisplayName();
154: String id = (new L10NMessage(L10NKeySet.ID)
155: .getMessage(l10n));
156: String unique = issue.getUniqueId();
157: title = name + " " + id + ": " + unique;
158: }
159: return title;
160: }
161: }
|