PageRenderTime 48ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/plugins/bitbucket/GlobalRepositoryManager.java

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 212 lines | 176 code | 32 blank | 4 comment | 14 complexity | 283c4f0f29df18c45cd96023714d0be8 MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;
  6. import java.util.Set;
  7. import java.util.TreeSet;
  8. import com.atlassian.jira.plugins.bitbucket.activeobjects.v2.IssueMapping;
  9. import com.atlassian.jira.plugins.bitbucket.activeobjects.v2.ProjectMapping;
  10. import com.atlassian.jira.plugins.bitbucket.api.Changeset;
  11. import com.atlassian.jira.plugins.bitbucket.api.ProgressWriter;
  12. import com.atlassian.jira.plugins.bitbucket.api.RepositoryPersister;
  13. import com.atlassian.jira.plugins.bitbucket.api.SourceControlRepository;
  14. import com.atlassian.jira.plugins.bitbucket.api.SourceControlUser;
  15. import com.atlassian.jira.plugins.bitbucket.api.SynchronizationKey;
  16. import com.atlassian.jira.plugins.bitbucket.spi.RepositoryManager;
  17. import com.atlassian.jira.plugins.bitbucket.spi.SynchronisationOperation;
  18. import com.atlassian.jira.plugins.bitbucket.spi.UrlInfo;
  19. import com.atlassian.jira.plugins.bitbucket.streams.GlobalFilter;
  20. /**
  21. * Aggregated Repository Manager that handles all Repository Managers based on the repository url
  22. */
  23. public class GlobalRepositoryManager implements RepositoryManager
  24. {
  25. private final RepositoryManager[] repositoryManagers;
  26. private final RepositoryPersister repositoryPersister;
  27. private static final Comparator<? super Changeset> CHANGESET_COMPARATOR = new Comparator<Changeset>()
  28. {
  29. @Override
  30. public int compare(Changeset o1, Changeset o2)
  31. {
  32. return o1.getTimestamp().compareTo(o2.getTimestamp());
  33. }
  34. };
  35. public GlobalRepositoryManager(RepositoryPersister repositoryPersister, RepositoryManager... repositoryManagers)
  36. {
  37. this.repositoryPersister = repositoryPersister;
  38. this.repositoryManagers = repositoryManagers;
  39. }
  40. private RepositoryManager getManagerByRepoId(int id)
  41. {
  42. ProjectMapping repository = repositoryPersister.getRepository(id);
  43. if (repository == null)
  44. throw new IllegalArgumentException("No repository with id = '" + id + "' found");
  45. RepositoryManager repositoryManager = getManagerByRepositoryType(repository.getRepositoryType());
  46. if (repositoryManager == null)
  47. {
  48. throw new IllegalArgumentException("No repository manager found for given id = '" + id + "'");
  49. }
  50. return repositoryManager;
  51. }
  52. private RepositoryManager getManagerByRepository(SourceControlRepository repository)
  53. {
  54. return getManagerByRepositoryType(repository.getRepositoryType());
  55. }
  56. private RepositoryManager getManagerByRepositoryType(String repositoryType)
  57. {
  58. for (RepositoryManager repositoryManager : repositoryManagers)
  59. {
  60. if (repositoryManager.getRepositoryType().equals(repositoryType))
  61. {
  62. return repositoryManager;
  63. }
  64. }
  65. return null;
  66. }
  67. @Override
  68. public SourceControlRepository addRepository(String repositoryType, String projectKey, String url, String username, String password, String adminUsername, String adminPassword, String accessToken)
  69. {
  70. for (RepositoryManager repositoryManager : repositoryManagers)
  71. {
  72. if (repositoryManager.getRepositoryType().equals(repositoryType))
  73. {
  74. return repositoryManager.addRepository(repositoryType, projectKey, url, username, password, adminUsername, adminPassword, accessToken);
  75. }
  76. }
  77. throw new IllegalArgumentException("No repository manager found for given repository type [" + repositoryType + "]");
  78. }
  79. @Override
  80. public List<SourceControlRepository> getRepositories(String projectKey)
  81. {
  82. List<SourceControlRepository> allRepositories = new ArrayList<SourceControlRepository>();
  83. for (RepositoryManager repositoryManager : repositoryManagers)
  84. {
  85. allRepositories.addAll(repositoryManager.getRepositories(projectKey));
  86. }
  87. return allRepositories;
  88. }
  89. @Override
  90. public SourceControlRepository getRepository(int id)
  91. {
  92. return getManagerByRepoId(id).getRepository(id);
  93. }
  94. @Override
  95. public List<Changeset> getChangesets(final String issueKey)
  96. {
  97. List<Changeset> allChangesets = new ArrayList<Changeset>();
  98. for (RepositoryManager repositoryManager : repositoryManagers)
  99. {
  100. allChangesets.addAll(repositoryManager.getChangesets(issueKey));
  101. }
  102. Collections.sort(allChangesets, CHANGESET_COMPARATOR);
  103. return allChangesets;
  104. }
  105. @Override
  106. public void removeRepository(int id)
  107. {
  108. getManagerByRepoId(id).removeRepository(id);
  109. }
  110. @Override
  111. public void addChangeset(SourceControlRepository repository, String issueId, Changeset changeset)
  112. {
  113. getManagerByRepository(repository).addChangeset(repository, issueId, changeset);
  114. }
  115. @Override
  116. public SourceControlUser getUser(SourceControlRepository repository, String username)
  117. {
  118. return getManagerByRepository(repository).getUser(repository, username);
  119. }
  120. @Override
  121. public SynchronisationOperation getSynchronisationOperation(SynchronizationKey key, ProgressWriter progressProvider)
  122. {
  123. return getManagerByRepository(key.getRepository()).getSynchronisationOperation(key, progressProvider);
  124. }
  125. @Override
  126. public List<Changeset> parsePayload(SourceControlRepository repository, String payload)
  127. {
  128. return getManagerByRepository(repository).parsePayload(repository, payload);
  129. }
  130. @Override
  131. public String getHtmlForChangeset(SourceControlRepository repository, Changeset changeset)
  132. {
  133. RepositoryManager repositoryManager = getManagerByRepositoryType(repository.getRepositoryType());
  134. return repositoryManager.getHtmlForChangeset(repository, changeset);
  135. }
  136. @Override
  137. public String getRepositoryType()
  138. {
  139. return "unknown";
  140. }
  141. @Override
  142. public void setupPostcommitHook(SourceControlRepository repo)
  143. {
  144. getManagerByRepository(repo).setupPostcommitHook(repo);
  145. }
  146. @Override
  147. public void removePostcommitHook(SourceControlRepository repo)
  148. {
  149. getManagerByRepository(repo).removePostcommitHook(repo);
  150. }
  151. @Override
  152. public Set<Changeset> getLatestChangesets(int count, GlobalFilter globalFilter)
  153. {
  154. Set<Changeset> allChangesets = new TreeSet<Changeset>(Collections.reverseOrder(CHANGESET_COMPARATOR));
  155. for (RepositoryManager repositoryManager : repositoryManagers)
  156. {
  157. allChangesets.addAll(repositoryManager.getLatestChangesets(count, globalFilter));
  158. }
  159. return allChangesets;
  160. }
  161. @Override
  162. public UrlInfo getUrlInfo(String repositoryUrl)
  163. {
  164. // TODO - multithread this for better user experience
  165. for (RepositoryManager repositoryManager : repositoryManagers)
  166. {
  167. UrlInfo urlInfo = repositoryManager.getUrlInfo(repositoryUrl);
  168. if (urlInfo != null)
  169. {
  170. return urlInfo;
  171. }
  172. }
  173. return null;
  174. }
  175. @Override
  176. public Changeset reloadChangeset(IssueMapping issueMapping)
  177. {
  178. throw new UnsupportedOperationException("This implementation should never be called.");
  179. }
  180. }