View Javadoc

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   * @author Vincent
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  // , AggregateTimeTrackingCalculatorFactory aggregateTimeTrackingCalculatorFactory) {
40  		super(trackbackManager, thumbnailManager, subTaskManager, issueLinkManager, voteManager, watcherManager, pluginManager, fieldManager, fieldScreenRendererFactory,
41  				fieldLayoutManager, rendererManager, commentManager, projectRoleManager, commentService, attachmentService, aggregateTimeTrackingCalculatorFactory);
42  // , aggregateTimeTrackingCalculatorFactory);
43  	}
44  
45  	/**
46  	 * @see ViewIssue#doExecute()
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  	 * @see ViewIssue#redirectToView()
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  	 * Test if user have permission to see subtask
90  	 * 
91  	 * @return boolean
92  	 */
93  	public boolean isHasPermissionToSeeSubTask() {
94  		boolean isHasPermissionToSeeSubTask = isHasProjectPermission(CustomPermissions.BROWSE_SUBTASK, getProject());
95  		return isHasPermissionToSeeSubTask;
96  	}
97  
98  	/**
99  	 * @TODO To Suppress when implemented by JIRA
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 	// * @see com.atlassian.jira.web.action.JiraWebActionSupport#getText(String)
118 	// * @param key
119 	// */
120 	// public String getText(String key) {
121 	// String result = key;
122 	//
123 	// try {
124 	// result = getText(key, new Object[0]);
125 	// } catch (MissingResourceException e) {
126 	// log.debug("Cannot find key " + key);
127 	// }
128 	//
129 	// return result;
130 	// }
131 
132 }