PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/plugins/bitbucket/spi/ToChangesetTransformer.java

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 135 lines | 110 code | 25 blank | 0 comment | 6 complexity | 2cb0de35cee224633ea7821b24deb66d MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket.spi;
  2. import com.atlassian.jira.plugins.bitbucket.activeobjects.v2.IssueMapping;
  3. import com.atlassian.jira.plugins.bitbucket.api.Changeset;
  4. import com.atlassian.jira.plugins.bitbucket.api.ChangesetFile;
  5. import com.atlassian.jira.util.json.JSONArray;
  6. import com.atlassian.jira.util.json.JSONException;
  7. import com.atlassian.jira.util.json.JSONObject;
  8. import com.google.common.base.Function;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class ToChangesetTransformer implements Function<IssueMapping, Changeset>
  15. {
  16. public static final Logger log = LoggerFactory.getLogger(ToChangesetTransformer.class);
  17. private final RepositoryManager repositoryManager;
  18. public ToChangesetTransformer(RepositoryManager repositoryManager)
  19. {
  20. this.repositoryManager = repositoryManager;
  21. }
  22. @Override
  23. public Changeset apply(IssueMapping issueMapping)
  24. {
  25. if (!isLatestVersion(issueMapping))
  26. {
  27. return repositoryManager.reloadChangeset(issueMapping);
  28. }
  29. FileData fileData = parseFilesData(issueMapping.getFilesData());
  30. List<String> parents = parseParentsData(issueMapping.getParentsData());
  31. return new DefaultBitbucketChangeset(issueMapping.getRepositoryId(),
  32. issueMapping.getNode(),
  33. issueMapping.getRawAuthor(),
  34. issueMapping.getAuthor(),
  35. issueMapping.getDate(),
  36. issueMapping.getRawNode(),
  37. issueMapping.getBranch(),
  38. issueMapping.getMessage(),
  39. parents,
  40. fileData.getFiles(),
  41. fileData.getFileCount());
  42. }
  43. private boolean isLatestVersion(IssueMapping from)
  44. {
  45. return from.getVersion() != null && from.getVersion() >= IssueMapping.LATEST_VERSION;
  46. }
  47. private List<String> parseParentsData(String parentsData)
  48. {
  49. List<String> parents = new ArrayList<String>();
  50. if (StringUtils.isBlank(parentsData))
  51. {
  52. return parents;
  53. }
  54. try
  55. {
  56. JSONArray parentsJson = new JSONArray(parentsData);
  57. for (int i = 0; i < parentsJson.length(); i++)
  58. {
  59. parents.add(parentsJson.getString(i));
  60. }
  61. } catch (JSONException e)
  62. {
  63. log.error("Failed parsing parents from ParentsJson data.");
  64. }
  65. return parents;
  66. }
  67. private FileData parseFilesData(String filesData)
  68. {
  69. List<ChangesetFile> files = new ArrayList<ChangesetFile>();
  70. int fileCount = 0;
  71. try
  72. {
  73. JSONObject filesDataJson = new JSONObject(filesData);
  74. fileCount = filesDataJson.getInt("count");
  75. JSONArray filesJson = filesDataJson.getJSONArray("files");
  76. for (int i = 0; i < filesJson.length(); i++)
  77. {
  78. JSONObject file = filesJson.getJSONObject(i);
  79. String filename = file.getString("filename");
  80. String status = file.getString("status");
  81. int additions = file.getInt("additions");
  82. int deletions = file.getInt("deletions");
  83. files.add(new DefaultBitbucketChangesetFile(CustomStringUtils.getChangesetFileAction(status),
  84. filename, additions, deletions));
  85. }
  86. } catch (JSONException e)
  87. {
  88. log.error("Failed parsing files from FileJson data.");
  89. }
  90. return new FileData(files, fileCount);
  91. }
  92. private static class FileData
  93. {
  94. private List<ChangesetFile> files;
  95. private int fileCount;
  96. FileData(List<ChangesetFile> files, int fileCount)
  97. {
  98. this.files = files;
  99. this.fileCount = fileCount;
  100. }
  101. public List<ChangesetFile> getFiles()
  102. {
  103. return files;
  104. }
  105. public int getFileCount()
  106. {
  107. return fileCount;
  108. }
  109. }
  110. }