View Javadoc

1   package com.atlassian.jira.issue.link;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Collections;
6   import java.util.List;
7   
8   import org.apache.log4j.Category;
9   import org.ofbiz.core.entity.GenericEntityException;
10  import org.ofbiz.core.entity.GenericValue;
11  
12  import webwork.action.ActionContext;
13  
14  import com.atlassian.jira.exception.DataAccessException;
15  import com.atlassian.jira.issue.Issue;
16  import com.atlassian.jira.issue.search.SearchException;
17  import com.atlassian.jira.issue.search.SearchProvider;
18  import com.atlassian.jira.issue.search.SearchRequest;
19  import com.atlassian.jira.issue.search.SearchRequestManager;
20  import com.atlassian.jira.issue.search.SearchResults;
21  import com.atlassian.jira.issue.search.parameters.lucene.IssueTypeParameter;
22  import com.atlassian.jira.issue.search.parameters.lucene.MultipleFieldSingleValueLuceneParameter;
23  import com.atlassian.jira.issue.search.parameters.lucene.ProjectParameter;
24  import com.atlassian.jira.issue.search.searchers.impl.QuerySearcher;
25  import com.atlassian.jira.util.EasyList;
26  import com.atlassian.jira.web.bean.PagerFilter;
27  import com.atlassian.seraph.auth.DefaultAuthenticator;
28  import com.opensymphony.user.User;
29  
30  /**
31   * FQCN : com.atlassian.jira.issue.link.CreateAndLinkIssueHelper
32   * @author Kaamelot
33   * @since 3.10.1.30
34   * Description : 
35   *
36   */
37  public class CreateAndLinkIssueHelper {
38  
39  	protected static Category log = Category.getInstance(CreateAndLinkIssueHelper.class);
40  
41  	protected LinkSchemeManager linkSchemeManager;
42  
43  	protected SearchProvider searchProvider;
44  
45  	protected SearchRequestManager searchRequestManager;
46  
47  	public CreateAndLinkIssueHelper(LinkSchemeManager _linkSchemeManager, SearchProvider _searchProvider, SearchRequestManager _searchRequestManager) {
48  		linkSchemeManager = _linkSchemeManager;
49  		searchProvider = _searchProvider;
50  		searchRequestManager = _searchRequestManager;
51  	}
52  
53  	/**
54  	 * @param _issue Concerned Issue 
55  	 * @return List of all available Link Scheme Entities for the mentionned Issue
56  	 */
57  	public List getAvailableLinks(Issue _issue) {
58  		List availableLinks;
59  		List schemeEntities = new ArrayList();
60  		try {
61  			List projectLinkSchemes = linkSchemeManager.getSchemes(_issue.getProjectObject().getGenericValue());
62  			if (!(projectLinkSchemes.isEmpty())) {
63  				GenericValue projectLinkScheme = (GenericValue) (projectLinkSchemes.get(0));
64  				schemeEntities = linkSchemeManager.getLinkSchemeEntities(projectLinkScheme, _issue.getIssueTypeObject().getId());
65  			}
66  		} catch (GenericEntityException e) {
67  			e.printStackTrace();
68  		}
69  		availableLinks = linkSchemeManager.toLinkSchemeEntityObjects(schemeEntities);
70  		return availableLinks;
71  	}
72  
73  	public List getLinkableIssues(Issue _issue, LinkSchemeEntity _linkSchemeEntity) {
74  		List linkableIssues;
75  		SearchRequest srq = getSearchRequest(_issue, _linkSchemeEntity);
76  		SearchResults srs = getSearchResults(srq);
77  		if (srs != null) {
78  			linkableIssues = srs.getIssues();
79  		} else {
80  			linkableIssues = Collections.EMPTY_LIST;
81  		}
82  		return linkableIssues;
83  	}
84  
85  	public User getRemoteUser() {
86  		return (User) ActionContext.getSession().get(DefaultAuthenticator.LOGGED_IN_KEY);
87  	}
88  
89  	/**
90  	 * @return A SearchRequest depending on Service Parameters
91  	 */
92  	protected SearchRequest getSearchRequest(Issue _issue, LinkSchemeEntity _linkSchemeEntity) {
93  		SearchRequest sr = new SearchRequest(true);
94  		sr.addParameter(new ProjectParameter(_issue.getId()));
95  		sr.addParameter(new IssueTypeParameter(EasyList.build(_linkSchemeEntity.getDestIssueTypeId())));
96  		
97        Collection fields = new ArrayList();
98        fields.add(QuerySearcher.SUMMARY_FIELD);
99        fields.add(QuerySearcher.DESCRIPTION_FIELD);
100       fields.add(QuerySearcher.ENVIRONMENT_FIELDS);
101 		sr.addParameter(new MultipleFieldSingleValueLuceneParameter(fields,_issue.getSummary()));
102 
103 		return sr;
104 	}
105 
106 	/**
107 	 * @param filterId SearchRequest Id.
108 	 * @return SearchRequest
109 	 */
110 	protected SearchRequest getSearchRequest(Long filterId) {
111 		try {
112 			return searchRequestManager.getSearchRequest(getRemoteUser(), filterId);
113 		} catch (DataAccessException e) {
114 			log.error(e, e);
115 		}
116 		return null;
117 	}
118 
119 	/**
120 	 * Returns search results if the user is logged in and search request passed in is not null
121 	 * 
122 	 * @param _searchRequest Search Request
123 	 * @return search results
124 	 */
125 	protected SearchResults getSearchResults(SearchRequest _searchRequest) {
126 		if (_searchRequest == null) {
127 			return null;
128 		}
129 		try {
130 			return searchProvider.search(_searchRequest, getRemoteUser(), PagerFilter.getUnlimitedFilter());
131 		} catch (SearchException e) {
132 			log.error("Could not get issues", e);
133 			return null;
134 		}
135 	}
136 
137 }