PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

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

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