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
32
33
34
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
55
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
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
108
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
121
122
123
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 }