1 package com.atlassian.jira.web.action.issue;
2
3 import java.util.Collections;
4 import java.util.Iterator;
5 import java.util.Map;
6
7 import org.ofbiz.core.entity.GenericValue;
8
9 import com.atlassian.jira.bc.issue.attachment.AttachmentService;
10 import com.atlassian.jira.bc.issue.comment.CommentService;
11 import com.atlassian.jira.config.SubTaskManager;
12 import com.atlassian.jira.exception.IssueNotFoundException;
13 import com.atlassian.jira.exception.IssuePermissionException;
14 import com.atlassian.jira.issue.RendererManager;
15 import com.atlassian.jira.issue.comments.CommentManager;
16 import com.atlassian.jira.issue.fields.FieldManager;
17 import com.atlassian.jira.issue.fields.layout.field.FieldLayoutManager;
18 import com.atlassian.jira.issue.fields.screen.FieldScreenRendererFactory;
19 import com.atlassian.jira.issue.link.IssueLinkManager;
20 import com.atlassian.jira.issue.thumbnail.ThumbnailManager;
21 import com.atlassian.jira.issue.util.AggregateTimeTrackingCalculatorFactory;
22 import com.atlassian.jira.issue.vote.VoteManager;
23 import com.atlassian.jira.issue.watchers.WatcherManager;
24 import com.atlassian.jira.security.CustomPermissions;
25 import com.atlassian.jira.security.roles.ProjectRoleManager;
26 import com.atlassian.jira.trackback.TrackbackManager;
27 import com.atlassian.plugin.PluginManager;
28 import com.opensymphony.workflow.loader.ActionDescriptor;
29
30
31
32
33
34
35
36 public abstract class AReservedViewIssue extends ViewIssue {
37
38 public AReservedViewIssue(TrackbackManager trackbackManager, ThumbnailManager thumbnailManager, SubTaskManager subTaskManager, IssueLinkManager issueLinkManager,
39 VoteManager voteManager, WatcherManager watcherManager, PluginManager pluginManager, FieldManager fieldManager, FieldScreenRendererFactory fieldScreenRendererFactory,
40 FieldLayoutManager fieldLayoutManager, RendererManager rendererManager, CommentManager commentManager, ProjectRoleManager projectRoleManager,
41 CommentService commentService, AttachmentService attachmentService, AggregateTimeTrackingCalculatorFactory aggregateTimeTrackingCalculatorFactory) {
42
43 super(trackbackManager, thumbnailManager, subTaskManager, issueLinkManager, voteManager, watcherManager, pluginManager, fieldManager, fieldScreenRendererFactory,
44 fieldLayoutManager, rendererManager, commentManager, projectRoleManager, commentService, attachmentService, aggregateTimeTrackingCalculatorFactory);
45 }
46
47
48
49
50 protected String doExecute() throws Exception {
51 String res = super.doExecute();
52
53 if (res.equals(SUCCESS)) {
54 try {
55 GenericValue issue = getIssue();
56 String issueStr = issue.getString("key") != null ? issue.getString("key") : issue.toString();
57
58 if (isSubTask()) {
59 if (!isHasPermissionToSeeSubTask()) {
60 addErrorMessage(getText("admin.errors.issues.no.permission.to.see"));
61 addErrorMessage("User '" + getRemoteUser() + "' does not have permission to see issue '" + issueStr + "'");
62 }
63 }
64
65 if (getHasErrorMessages()) {
66 for (Iterator it = getErrorMessages().iterator(); it.hasNext();) {
67 log.warn("" + (String) it.next());
68 }
69 res = redirectToView();
70 }
71 } catch (IssueNotFoundException ex) {
72 addErrorMessage(getText("admin.errors.issues.issue.does.not.exist"));
73 return ISSUE_NOT_FOUND_RESULT;
74 } catch (IssuePermissionException ex) {
75 addErrorMessage(getText("admin.errors.issues.no.browse.permission"));
76 return PERMISSION_VIOLATION_RESULT;
77 }
78 }
79
80 return res;
81 }
82
83
84
85
86 public String redirectToView() {
87 String redirectUrl = "/browse/" + getProject().getString("key");
88 setErrorMessages(Collections.EMPTY_LIST);
89 return getRedirect(redirectUrl);
90 }
91
92
93
94
95
96
97 public boolean isHasPermissionToSeeSubTask() {
98 boolean isHasPermissionToSeeSubTask = isHasProjectPermission(CustomPermissions.BROWSE_SUBTASK, getProject());
99 return isHasPermissionToSeeSubTask;
100 }
101
102
103
104
105 public String getWorkflowTransitionDescription(ActionDescriptor descriptor) {
106
107 Map metadata = descriptor.getMetaAttributes();
108 if (metadata.containsKey("jira.i18n.description")) {
109 String key = (String) metadata.get("jira.i18n.description");
110 String value = getText(key);
111 if (value != null && !"".equals(value.trim()) && !value.trim().equals(key.trim())) {
112 return value;
113 }
114 return descriptor.getName();
115 } else {
116 return super.getWorkflowTransitionDescription(descriptor);
117 }
118 }
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 }