PageRenderTime 58ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 122 lines | 90 code | 22 blank | 10 comment | 6 complexity | c7a010baccbb5adc24667a35b004683e MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket.spi.github;
  2. import com.atlassian.jira.plugins.bitbucket.api.Changeset;
  3. import com.atlassian.jira.plugins.bitbucket.api.ChangesetFile;
  4. import com.atlassian.jira.plugins.bitbucket.api.SourceControlException;
  5. import com.atlassian.jira.plugins.bitbucket.spi.CustomStringUtils;
  6. import com.atlassian.jira.plugins.bitbucket.spi.DefaultBitbucketChangeset;
  7. import com.atlassian.jira.plugins.bitbucket.spi.DefaultBitbucketChangesetFile;
  8. import com.atlassian.jira.util.json.JSONArray;
  9. import com.atlassian.jira.util.json.JSONException;
  10. import com.atlassian.jira.util.json.JSONObject;
  11. import javax.xml.bind.DatatypeConverter;
  12. import java.util.ArrayList;
  13. import java.util.Calendar;
  14. import java.util.Date;
  15. import java.util.List;
  16. /**
  17. * Factory for {@link com.atlassian.jira.plugins.bitbucket.api.Changeset} implementations
  18. */
  19. public class GithubChangesetFactory
  20. {
  21. /**
  22. * Parse the json object as a bitbucket changeset
  23. *
  24. * @param json the json object describing the change
  25. * @return the parsed {@link com.atlassian.jira.plugins.bitbucket.api.Changeset}
  26. */
  27. public static Changeset parse(int repositoryId, String branch, JSONObject json)
  28. {
  29. try
  30. {
  31. JSONObject commitJson = json.getJSONObject("commit");
  32. String name = "";
  33. Date date = Calendar.getInstance().getTime();
  34. if (commitJson.has("author") && !commitJson.isNull("author"))
  35. {
  36. JSONObject commitAuthor = commitJson.getJSONObject("author");
  37. name = commitAuthor.has("name") ? commitAuthor.getString("name") : "";
  38. date = parseDate(commitAuthor.getString("date"));
  39. }
  40. String login = "";
  41. if (json.has("author") && !json.isNull("author"))
  42. {
  43. JSONObject author = json.getJSONObject("author");
  44. login = author.has("login") ? author.getString("login") : "";
  45. }
  46. List<ChangesetFile> changesetFiles = fileList(json.getJSONArray("files"), false);
  47. return new DefaultBitbucketChangeset(
  48. repositoryId,
  49. json.getString("sha"),
  50. name,
  51. login,
  52. date,
  53. "", // todo: raw-node. what is it in github?
  54. branch,
  55. commitJson.getString("message"),
  56. parentList(json.getJSONArray("parents")),
  57. changesetFiles,
  58. changesetFiles.size()
  59. );
  60. }
  61. catch (JSONException e)
  62. {
  63. throw new SourceControlException("invalid json object", e);
  64. }
  65. }
  66. public static Date parseDate(String dateStr) {
  67. // Atom (ISO 8601) example: 2011-11-09T06:24:13-08:00
  68. try {
  69. Calendar calendar = DatatypeConverter.parseDateTime(dateStr);
  70. return calendar.getTime();
  71. } catch (IllegalArgumentException e) {
  72. throw new SourceControlException("Could not parse date string from JSON.", e);
  73. }
  74. }
  75. private static List<String> parentList(JSONArray parents) throws JSONException
  76. {
  77. List<String> list = new ArrayList<String>();
  78. for (int i = 0; i < parents.length(); i++)
  79. list.add(((JSONObject) parents.get(i)).getString("sha"));
  80. return list;
  81. }
  82. private static List<ChangesetFile> fileList(JSONArray files, boolean fromPostcommitHook) throws JSONException
  83. {
  84. List<ChangesetFile> list = new ArrayList<ChangesetFile>();
  85. for (int i = 0; i < files.length(); i++)
  86. {
  87. JSONObject file = files.getJSONObject(i);
  88. String filename = file.getString("filename");
  89. String status = file.getString("status");
  90. int additions = file.getInt("additions");
  91. int deletions = file.getInt("deletions");
  92. list.add(new DefaultBitbucketChangesetFile(CustomStringUtils.getChangesetFileAction(status),
  93. filename, additions, deletions));
  94. }
  95. return list;
  96. }
  97. private GithubChangesetFactory()
  98. {
  99. }
  100. }