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 public abstract class AViewIssue extends ViewIssue {
35 public AViewIssue(TrackbackManager trackbackManager, ThumbnailManager thumbnailManager, SubTaskManager subTaskManager, IssueLinkManager issueLinkManager,
36 VoteManager voteManager, WatcherManager watcherManager, PluginManager pluginManager, FieldManager fieldManager, FieldScreenRendererFactory fieldScreenRendererFactory,
37 FieldLayoutManager fieldLayoutManager, RendererManager rendererManager, CommentManager commentManager, ProjectRoleManager projectRoleManager,
38 CommentService commentService, AttachmentService attachmentService, AggregateTimeTrackingCalculatorFactory aggregateTimeTrackingCalculatorFactory) {
39
40 super(trackbackManager, thumbnailManager, subTaskManager, issueLinkManager, voteManager, watcherManager, pluginManager, fieldManager, fieldScreenRendererFactory,
41 fieldLayoutManager, rendererManager, commentManager, projectRoleManager, commentService, attachmentService, aggregateTimeTrackingCalculatorFactory);
42
43 }
44
45
46
47
48 protected String doExecute() throws Exception {
49 String res = super.doExecute();
50
51 try {
52 GenericValue issue = getIssue();
53 String issueStr = issue.getString("key") != null ? issue.getString("key") : issue.toString();
54
55 if (isSubTask()) {
56 if (!isHasPermissionToSeeSubTask()) {
57 addErrorMessage(getText("admin.errors.issues.no.permission.to.see"));
58 addErrorMessage("User '" + getRemoteUser() + "' does not have permission to see issue '" + issueStr + "'");
59 }
60 }
61
62 if (getHasErrorMessages()) {
63 for (Iterator it = getErrorMessages().iterator(); it.hasNext();) {
64 log.warn("" + (String) it.next());
65 }
66 res = redirectToView();
67 }
68 } catch (IssueNotFoundException ex) {
69 addErrorMessage(getText("admin.errors.issues.issue.does.not.exist"));
70 return ISSUE_NOT_FOUND_RESULT;
71 } catch (IssuePermissionException ex) {
72 addErrorMessage(getText("admin.errors.issues.no.browse.permission"));
73 return PERMISSION_VIOLATION_RESULT;
74 }
75
76 return res;
77 }
78
79
80
81
82 public String redirectToView() {
83 String redirectUrl = "/browse/" + getProject().getString("key");
84 setErrorMessages(Collections.EMPTY_LIST);
85 return getRedirect(redirectUrl);
86 }
87
88
89
90
91
92
93 public boolean isHasPermissionToSeeSubTask() {
94 boolean isHasPermissionToSeeSubTask = isHasProjectPermission(CustomPermissions.BROWSE_SUBTASK, getProject());
95 return isHasPermissionToSeeSubTask;
96 }
97
98
99
100
101 public String getWorkflowTransitionDescription(ActionDescriptor descriptor) {
102
103 Map metadata = descriptor.getMetaAttributes();
104 if (metadata.containsKey("jira.i18n.description")) {
105 String key = (String) metadata.get("jira.i18n.description");
106 String value = getText(key);
107 if (value != null && !"".equals(value.trim()) && !value.trim().equals(key.trim())) {
108 return value;
109 }
110 return descriptor.getName();
111 } else {
112 return super.getWorkflowTransitionDescription(descriptor);
113 }
114 }
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 }