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   * Class AViewIssue
32   * 
33   * @author AUGUSTO Manuel / Vincent Thoul�
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  	 * @see ViewIssue#doExecute()
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  	 * @see ViewIssue#redirectToView()
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  	 * Test if user have permission to see subtask
94  	 * 
95  	 * @return boolean
96  	 */
97  	public boolean isHasPermissionToSeeSubTask() {
98  		boolean isHasPermissionToSeeSubTask = isHasProjectPermission(CustomPermissions.BROWSE_SUBTASK, getProject());
99  		return isHasPermissionToSeeSubTask;
100 	}
101 
102 	/**
103 	 * @TODO To Suppress when implemented by JIRA
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 //	 * @see com.atlassian.jira.web.action.JiraWebActionSupport#getText(String)
122 //	 * @param key
123 //	 */
124 //	public String getText(String key) {
125 //		String result = key;
126 //
127 //		try {
128 //			result = getText(key, new Object[0]);
129 //		} catch (MissingResourceException e) {
130 //			log.debug("Cannot find key " + key);
131 //		}
132 //
133 //		return result;
134 //	}
135 
136 }