PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/valiantys/jira/plugins/createissueandlink/service/SynchronizeIssuesServiceDefaultImpl.java

https://bitbucket.org/valiantys-dev/jcalp
Java | 284 lines | 164 code | 49 blank | 71 comment | 29 complexity | 72f747dbb31afec2e1255aec57dcef2e MD5 | raw file
  1. package com.valiantys.jira.plugins.createissueandlink.service;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.apache.log4j.Logger;
  7. import org.jfree.util.Log;
  8. import com.atlassian.event.EventManager;
  9. import com.atlassian.event.api.EventPublisher;
  10. import com.atlassian.jira.bc.issue.IssueService;
  11. import com.atlassian.jira.event.issue.IssueEvent;
  12. import com.atlassian.jira.event.type.EventType;
  13. import com.atlassian.jira.issue.Issue;
  14. import com.atlassian.jira.issue.IssueManager;
  15. import com.atlassian.jira.issue.comments.Comment;
  16. import com.atlassian.jira.issue.index.IndexException;
  17. import com.atlassian.jira.issue.index.IssueIndexManager;
  18. import com.atlassian.jira.issue.link.IssueLink;
  19. import com.atlassian.jira.issue.link.IssueLinkManager;
  20. import com.atlassian.jira.issue.link.IssueLinkType;
  21. import com.atlassian.jira.issue.link.IssueLinkTypeManager;
  22. import com.valiantys.jira.plugins.createissueandlink.LinkNewIssueOperationException;
  23. import com.valiantys.jira.plugins.createissueandlink.business.SynchronizationConfigBean;
  24. import com.valiantys.jira.plugins.createissueandlink.listener.SynchronizeIssuesListener;
  25. import com.valiantys.jira.plugins.createissueandlink.manager.LnioConfigurationManager;
  26. import com.valiantys.jira.plugins.createissueandlink.util.SynchronizationType;
  27. /**
  28. * Default implementation of the SynchronizeIssuesService
  29. *
  30. * @author Maxime Cojan
  31. *
  32. */
  33. public class SynchronizeIssuesServiceDefaultImpl implements SynchronizeIssuesService {
  34. /**
  35. * class Logger.
  36. */
  37. private static final Logger LOG = Logger.getLogger(SynchronizeIssuesListener.class);
  38. /**
  39. * Manager of the configuration mapping and syncrho.
  40. */
  41. private final LnioConfigurationManager lnioConfigManager;
  42. /**
  43. * Manager of the Link type.
  44. */
  45. private final IssueLinkTypeManager issueLinkTypeManager;
  46. /**
  47. * Manager of the issue Link.
  48. */
  49. private final IssueLinkManager issueLinkManager;
  50. /**
  51. * Manager of issues.
  52. */
  53. private final IssueManager issueManager;
  54. /**
  55. * Service for fields synchronization.
  56. */
  57. private final FieldsMappingService fieldsMappingService;
  58. /**
  59. * Service for comments synchronization.
  60. */
  61. private final CommentService commentService;
  62. /**
  63. * Manger of the index
  64. */
  65. private final IssueIndexManager indexManager;
  66. private final EventPublisher eventPublisher;
  67. /**
  68. * KEY ORIGIN for the map of available synchronization
  69. */
  70. private static final String ORIGIN_ID = "ORIGIN_ID";
  71. /**
  72. * KEY DESTINATION for the map of available synchronization
  73. */
  74. private static final String DEST_ID = "DEST_ID";
  75. /**
  76. * KEY Mapping for the map of available synchronization
  77. */
  78. private static final String MAPPING_ID = "MAPPING_ID";
  79. /**
  80. * constructor
  81. *
  82. * @param lnioConfigManager
  83. * @param issueLinkTypeManager
  84. * @param issueLinkManager
  85. * @param fieldsMappingService
  86. * @param issueManager
  87. * @param indexManager
  88. * @param commentService
  89. */
  90. public SynchronizeIssuesServiceDefaultImpl(final LnioConfigurationManager lnioConfigManager, final IssueLinkTypeManager issueLinkTypeManager, final IssueLinkManager issueLinkManager,
  91. final FieldsMappingService fieldsMappingService, final IssueManager issueManager, final IssueIndexManager indexManager, final CommentService commentService,
  92. final EventPublisher eventPublisher) {
  93. this.lnioConfigManager = lnioConfigManager;
  94. this.issueLinkTypeManager = issueLinkTypeManager;
  95. this.issueLinkManager = issueLinkManager;
  96. this.fieldsMappingService = fieldsMappingService;
  97. this.issueManager = issueManager;
  98. this.indexManager = indexManager;
  99. this.commentService = commentService;
  100. this.eventPublisher = eventPublisher;
  101. }
  102. /**
  103. * {@inheritDoc}
  104. */
  105. public void launchASynchronizationOnThisIssue(Issue origin, SynchronizationType synchronizationType, List<Map<String, Object>> listOfSynchro, IssueEvent event) {
  106. launchASynchronizationOnThisIssue(origin, synchronizationType, listOfSynchro, null, event);
  107. }
  108. /**
  109. * {@inheritDoc}
  110. */
  111. public void launchASynchronizationOnThisIssue(Issue origin, SynchronizationType synchronizationType, List<Map<String, Object>> listOfSynchro, Comment aComment, IssueEvent event) {
  112. LOG.debug("ORIGIN ISSUE KEY : " + origin.getKey());
  113. boolean hasbeenUpdated = false;
  114. for (Map<String, Object> map : listOfSynchro) {
  115. LOG.debug("The synchro is launch");
  116. Issue destination = issueManager.getIssueObject((Long) map.get(DEST_ID));
  117. Issue originMapping = issueManager.getIssueObject((Long) map.get(ORIGIN_ID));
  118. LOG.debug("MAPPING DESTINATION ISSUE KEY : " + destination.getKey());
  119. LOG.debug("MAPPING ORIGIN ISSUE KEY : " + originMapping.getKey());
  120. LOG.debug("MAPPING ID : " + map.get(MAPPING_ID));
  121. hasbeenUpdated = false;
  122. switch (synchronizationType) {
  123. case COMMENTS:
  124. LOG.debug("COMMENT : " + aComment);
  125. LOG.debug("ORIGIN : " + origin.getKey() + " - DESTINATION : " + destination.getKey());
  126. if (origin.getKey().equals(destination.getKey())) {
  127. // case reverse.
  128. commentService.addCommentSynchronization((Long) map.get(ORIGIN_ID), aComment);
  129. } else {
  130. commentService.addCommentSynchronization((Long) map.get(DEST_ID), aComment);
  131. }
  132. break;
  133. case FIELDS:
  134. if (origin.getKey().equals(destination.getKey())) {
  135. hasbeenUpdated = fieldsMappingService.doSynchronization((String) map.get(MAPPING_ID), (Long) map.get(ORIGIN_ID), (Long) map.get(DEST_ID), true);
  136. } else {
  137. hasbeenUpdated = fieldsMappingService.doSynchronization((String) map.get(MAPPING_ID), (Long) map.get(DEST_ID), (Long) map.get(ORIGIN_ID), false);
  138. }
  139. try {
  140. if (hasbeenUpdated) {
  141. indexManager.reIndex(destination);
  142. indexManager.reIndex(origin);
  143. }
  144. LOG.debug("Destination issue : " + destination.getKey() + " is reindexed...");
  145. } catch (IndexException e) {
  146. // TODO Auto-generated catch block
  147. e.printStackTrace();
  148. }
  149. break;
  150. }
  151. }
  152. }
  153. /**
  154. * {@inheritDoc}
  155. */
  156. public List<Map<String, Object>> getConfiguredSynchronizationsByParentIssue(Issue origin) throws LinkNewIssueOperationException {
  157. List<Map<String, Object>> synchronizationToDo = null;
  158. // Get origin project id
  159. Long projetId = origin.getProjectObject().getId();
  160. LOG.debug("projetId : " + projetId);
  161. if (lnioConfigManager.isProjectSynchronizable(projetId)) {
  162. // Get all outwardslinks
  163. List<IssueLink> issueLinks = issueLinkManager.getOutwardLinks(origin.getId());
  164. for (IssueLink issueLink : issueLinks) {
  165. Long issueIdDestination = issueLink.getDestinationId();
  166. LOG.debug("issueIdDestination : " + issueIdDestination);
  167. LOG.debug("issueLink Type Id : " + issueLink.getIssueLinkType().getId());
  168. SynchronizationConfigBean configSynchro = lnioConfigManager.getSynchronizationConfig(projetId, issueLink.getIssueLinkType().getId());
  169. if (configSynchro != null) {
  170. Map<String, Object> aSynchro = new HashMap<String, Object>();
  171. aSynchro.put(ORIGIN_ID, origin.getId());
  172. aSynchro.put(DEST_ID, issueIdDestination);
  173. aSynchro.put(MAPPING_ID, configSynchro.getFieldsMappingId());
  174. if (synchronizationToDo == null) {
  175. synchronizationToDo = new ArrayList<Map<String, Object>>();
  176. }
  177. synchronizationToDo.add(aSynchro);
  178. }
  179. }
  180. }
  181. return synchronizationToDo;
  182. }
  183. /**
  184. * {@inheritDoc}
  185. */
  186. public List<Map<String, Object>> getConfiguredSynchronizationsByChildIssue(Issue destination) throws LinkNewIssueOperationException {
  187. List<Map<String, Object>> synchronizationToDo = null;
  188. LOG.debug("destination Id : " + destination.getId());
  189. // Get all inwardslinks
  190. List<IssueLink> issueLinks = issueLinkManager.getInwardLinks(destination.getId());
  191. for (IssueLink issueLink : issueLinks) {
  192. Long issueIdOrigin = issueLink.getSourceId();
  193. Long linkTypeId = issueLink.getLinkTypeId();
  194. LOG.debug("issueId Origin : " + issueIdOrigin);
  195. Issue origin = issueManager.getIssueObject(issueIdOrigin);
  196. // Get origin project id
  197. Long projetId = origin.getProjectObject().getId();
  198. LOG.debug("projetId : " + projetId);
  199. if (lnioConfigManager.isProjectSynchronizable(projetId)) {
  200. LOG.debug("Synchro for project : " + lnioConfigManager.isProjectSynchronizable(projetId));
  201. SynchronizationConfigBean configSynchro = lnioConfigManager.getSynchronizationConfig(projetId, linkTypeId);
  202. if (configSynchro != null) {
  203. Map<String, Object> aSynchro = new HashMap<String, Object>();
  204. aSynchro.put(ORIGIN_ID, origin.getId());
  205. aSynchro.put(DEST_ID, destination.getId());
  206. aSynchro.put(MAPPING_ID, configSynchro.getFieldsMappingId());
  207. if (synchronizationToDo == null) {
  208. synchronizationToDo = new ArrayList<Map<String, Object>>();
  209. }
  210. synchronizationToDo.add(aSynchro);
  211. }
  212. }
  213. }
  214. return synchronizationToDo;
  215. }
  216. /**
  217. * {@inheritDoc}
  218. */
  219. public List<Map<String, Object>> getAllSynchronizationsToDoByIssue(Issue issue) throws LinkNewIssueOperationException {
  220. List<Map<String, Object>> synchronizationToDo = null;
  221. List<Map<String, Object>> outwardLinks = getConfiguredSynchronizationsByParentIssue(issue);
  222. List<Map<String, Object>> inwardLinks = getConfiguredSynchronizationsByChildIssue(issue);
  223. if (outwardLinks != null && outwardLinks.size() > 0) {
  224. synchronizationToDo = outwardLinks;
  225. }
  226. if (inwardLinks != null && inwardLinks.size() > 0) {
  227. if (synchronizationToDo != null && synchronizationToDo.size() > 0) {
  228. synchronizationToDo.addAll(inwardLinks);
  229. } else {
  230. synchronizationToDo = inwardLinks;
  231. }
  232. }
  233. return synchronizationToDo;
  234. }
  235. }