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

/src/main/java/com/atlassian/jira/plugins/bitbucket/webwork/BitbucketPostCommit.java

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 141 lines | 113 code | 20 blank | 8 comment | 8 complexity | 845970145bf3f362159d2a22b6871897 MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket.webwork;
  2. import java.util.List;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import com.atlassian.jira.plugins.bitbucket.Synchronizer;
  8. import com.atlassian.jira.plugins.bitbucket.api.Changeset;
  9. import com.atlassian.jira.plugins.bitbucket.api.SourceControlRepository;
  10. import com.atlassian.jira.plugins.bitbucket.rest.RootResource;
  11. import com.atlassian.jira.plugins.bitbucket.spi.RepositoryManager;
  12. import com.atlassian.jira.util.json.JSONException;
  13. import com.atlassian.jira.util.json.JSONObject;
  14. import com.atlassian.jira.web.action.JiraWebActionSupport;
  15. /**
  16. * Webwork action used to recieve the callback hook from bitbucket
  17. * Deprecated, use {@link RootResource} instead
  18. */
  19. @Deprecated
  20. public class BitbucketPostCommit extends JiraWebActionSupport
  21. {
  22. private final Logger logger = LoggerFactory.getLogger(BitbucketPostCommit.class);
  23. private final Synchronizer synchronizer;
  24. // Validation Error Messages
  25. private String validations = "";
  26. // Project Key
  27. private String projectKey = "";
  28. private String repositoryUrl;
  29. private String repositoryId;
  30. // BitBucket JSON Payload
  31. private String payload = "";
  32. private final RepositoryManager globalRepositoryManager;
  33. public BitbucketPostCommit(@Qualifier("globalRepositoryManager") RepositoryManager globalRepositoryManager,
  34. Synchronizer synchronizer)
  35. {
  36. this.globalRepositoryManager = globalRepositoryManager;
  37. this.synchronizer = synchronizer;
  38. }
  39. @Override
  40. protected void doValidation()
  41. {
  42. if (StringUtils.isEmpty(projectKey) && StringUtils.isEmpty(repositoryId) )
  43. {
  44. validations += "Either 'projectKey' or 'repositoryId' parameter is required. <br/>";
  45. }
  46. if (payload.equals(""))
  47. {
  48. validations += "Missing Required 'payload' parameter. <br/>";
  49. }
  50. }
  51. @Override
  52. protected String doExecute() throws Exception
  53. {
  54. try
  55. {
  56. log.debug("Received call to sync repo ["+repositoryId+"] with payload ["+payload+"]");
  57. int repoId = Integer.parseInt(repositoryId);
  58. SourceControlRepository repo = globalRepositoryManager.getRepository(repoId);
  59. List<Changeset> changesets = globalRepositoryManager.parsePayload(repo, payload);
  60. synchronizer.synchronize(repo, changesets);
  61. return "postcommit";
  62. } catch (NumberFormatException e)
  63. {
  64. return backwardCompabitibleDoExecute();
  65. }
  66. }
  67. private String backwardCompabitibleDoExecute() throws JSONException
  68. {
  69. if (validations.equals(""))
  70. {
  71. logger.debug("recieved callback post for project [ {} ]", projectKey);
  72. if (repositoryUrl==null)
  73. {
  74. // this is most likely post from bitbucket.org
  75. JSONObject jsonPayload = new JSONObject(payload);
  76. String owner = jsonPayload.getJSONObject("repository").getString("owner");
  77. String slug = jsonPayload.getJSONObject("repository").getString("slug");
  78. repositoryUrl = "https://bitbucket.org/"+owner+"/"+slug;
  79. }
  80. SourceControlRepository repo = findRepository();
  81. if (repo!=null)
  82. {
  83. List<Changeset> changesets = globalRepositoryManager.parsePayload(repo, payload);
  84. synchronizer.synchronize(repo, changesets);
  85. }
  86. }
  87. return "postcommit";
  88. }
  89. private SourceControlRepository findRepository()
  90. {
  91. List<SourceControlRepository> repositories = globalRepositoryManager.getRepositories(projectKey);
  92. for (SourceControlRepository repo : repositories)
  93. {
  94. if (repositoryUrl.equals(repo.getRepositoryUri().getRepositoryUrl()))
  95. {
  96. return repo;
  97. }
  98. }
  99. return null;
  100. }
  101. public String getValidations()
  102. {
  103. return this.validations;
  104. }
  105. public void setProjectKey(String value)
  106. {
  107. this.projectKey = value;
  108. }
  109. public String getProjectKey()
  110. {
  111. return projectKey;
  112. }
  113. public void setPayload(String value)
  114. {
  115. this.payload = value;
  116. }
  117. public String getPayload()
  118. {
  119. return payload;
  120. }
  121. }