PageRenderTime 25ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/plugins/bitbucket/spi/bitbucket/impl/BitbucketRepositoryManager.java

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 97 lines | 84 code | 12 blank | 1 comment | 2 complexity | cfe832e972d6f09f8330b6cff494be43 MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket.spi.bitbucket.impl;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import org.apache.commons.lang.StringUtils;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Qualifier;
  10. import com.atlassian.jira.plugins.bitbucket.IssueLinker;
  11. import com.atlassian.jira.plugins.bitbucket.api.Changeset;
  12. import com.atlassian.jira.plugins.bitbucket.api.Encryptor;
  13. import com.atlassian.jira.plugins.bitbucket.api.RepositoryPersister;
  14. import com.atlassian.jira.plugins.bitbucket.api.SourceControlException;
  15. import com.atlassian.jira.plugins.bitbucket.api.SourceControlRepository;
  16. import com.atlassian.jira.plugins.bitbucket.spi.Communicator;
  17. import com.atlassian.jira.plugins.bitbucket.spi.DvcsRepositoryManager;
  18. import com.atlassian.jira.plugins.bitbucket.spi.RepositoryUri;
  19. import com.atlassian.jira.util.json.JSONArray;
  20. import com.atlassian.jira.util.json.JSONException;
  21. import com.atlassian.jira.util.json.JSONObject;
  22. import com.atlassian.sal.api.ApplicationProperties;
  23. import com.atlassian.templaterenderer.TemplateRenderer;
  24. public class BitbucketRepositoryManager extends DvcsRepositoryManager
  25. {
  26. public static final String BITBUCKET = "bitbucket";
  27. private final Logger log = LoggerFactory.getLogger(BitbucketRepositoryManager.class);
  28. public BitbucketRepositoryManager(RepositoryPersister repositoryPersister,
  29. @Qualifier("bitbucketCommunicator") Communicator communicator, Encryptor encryptor, ApplicationProperties applicationProperties,
  30. IssueLinker issueLinker, TemplateRenderer templateRenderer)
  31. {
  32. super(communicator, repositoryPersister, encryptor, applicationProperties, issueLinker, templateRenderer);
  33. }
  34. @Override
  35. public String getRepositoryType()
  36. {
  37. return BITBUCKET;
  38. }
  39. @Override
  40. public RepositoryUri getRepositoryUri(String urlString)
  41. {
  42. try
  43. {
  44. URL url = new URL(urlString);
  45. String protocol = url.getProtocol();
  46. String hostname = url.getHost();
  47. String path = url.getPath();
  48. String[] split = StringUtils.split(path, "/");
  49. if (split.length<2)
  50. {
  51. throw new SourceControlException("Expected url is https://domainname.com/username/repository");
  52. }
  53. String owner = split[0];
  54. String slug = split[1];
  55. return new BitbucketRepositoryUri(protocol, hostname, owner, slug);
  56. }
  57. catch (MalformedURLException e)
  58. {
  59. throw new SourceControlException("Invalid url ["+urlString+"]");
  60. }
  61. }
  62. @Override
  63. public List<Changeset> parsePayload(SourceControlRepository repository, String payload)
  64. {
  65. log.debug("parsing payload: '{}' for repository [{}]", payload, repository);
  66. List<Changeset> changesets = new ArrayList<Changeset>();
  67. try
  68. {
  69. JSONObject jsonPayload = new JSONObject(payload);
  70. JSONArray commits = jsonPayload.getJSONArray("commits");
  71. for (int i = 0; i < commits.length(); ++i)
  72. {
  73. // from post commit service we don't have all the data that we need. we have to make another request
  74. JSONObject commitJson = commits.getJSONObject(i);
  75. String nodeId = commitJson.getString("node");
  76. Changeset changeset = getCommunicator().getChangeset(repository, nodeId);
  77. changesets.add(changeset);
  78. }
  79. } catch (JSONException e)
  80. {
  81. throw new SourceControlException("Error parsing payload: " + payload, e);
  82. }
  83. return changesets;
  84. }
  85. }