SnapshotPushPostbackContents.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package uk.ac.ic.wlgitbridge.application;
  2. import com.google.gson.Gson;
  3. import com.google.gson.JsonElement;
  4. import com.google.gson.JsonObject;
  5. import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource;
  6. import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException;
  7. import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
  8. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException;
  9. /**
  10. * Created by Winston on 17/11/14.
  11. */
  12. public class SnapshotPushPostbackContents implements JSONSource {
  13. private static final String CODE_SUCCESS = "upToDate";
  14. private final WriteLatexDataSource writeLatexDataSource;
  15. private final String projectName;
  16. private final SnapshotPostExceptionBuilder snapshotPostExceptionBuilder;
  17. private int versionID;
  18. private SnapshotPostException exception;
  19. public SnapshotPushPostbackContents(WriteLatexDataSource writeLatexDataSource, String projectName, String contents) {
  20. this.projectName = projectName;
  21. this.writeLatexDataSource = writeLatexDataSource;
  22. snapshotPostExceptionBuilder = new SnapshotPostExceptionBuilder();
  23. fromJSON(new Gson().fromJson(contents, JsonElement.class));
  24. }
  25. @Override
  26. public void fromJSON(JsonElement json) {
  27. JsonObject responseObject = json.getAsJsonObject();
  28. String code = responseObject.get("code").getAsString();
  29. setResult(responseObject, code);
  30. }
  31. public void sendPostback() throws UnexpectedPostbackException {
  32. if (exception == null) {
  33. writeLatexDataSource.postbackReceivedSuccessfully(projectName, versionID);
  34. } else {
  35. writeLatexDataSource.postbackReceivedWithException(projectName, exception);
  36. }
  37. }
  38. private void setResult(JsonObject responseObject, String code) {
  39. if (code.equals(CODE_SUCCESS)) {
  40. setVersionID(responseObject);
  41. } else {
  42. setException(responseObject, code);
  43. }
  44. }
  45. private void setVersionID(JsonObject responseObject) {
  46. versionID = responseObject.get("latestVerId").getAsInt();
  47. }
  48. private void setException(JsonObject responseObject, String code) {
  49. try {
  50. exception = snapshotPostExceptionBuilder.build(code, responseObject);
  51. } catch (UnexpectedPostbackException e) {
  52. throw new RuntimeException(e);
  53. }
  54. }
  55. }