WriteLatexAPI.java 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package uk.ac.ic.wlgitbridge.writelatex;
  2. import uk.ac.ic.wlgitbridge.bridge.CandidateSnapshot;
  3. import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents;
  4. import uk.ac.ic.wlgitbridge.bridge.WritableRepositoryContents;
  5. import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource;
  6. import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
  7. import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
  8. import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
  9. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.PostbackManager;
  10. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequest;
  11. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequestResult;
  12. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException;
  13. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.OutOfDateException;
  14. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
  15. import uk.ac.ic.wlgitbridge.writelatex.model.WLDataModel;
  16. import java.io.IOException;
  17. import java.util.List;
  18. /**
  19. * Created by Winston on 16/11/14.
  20. */
  21. public class WriteLatexAPI implements WriteLatexDataSource {
  22. private final WLDataModel dataModel;
  23. private final PostbackManager postbackManager;
  24. public WriteLatexAPI(WLDataModel dataModel) {
  25. this.dataModel = dataModel;
  26. postbackManager = new PostbackManager();
  27. }
  28. @Override
  29. public boolean repositoryExists(String projectName) throws FailedConnectionException {
  30. SnapshotGetDocRequest snapshotGetDocRequest = new SnapshotGetDocRequest(projectName);
  31. snapshotGetDocRequest.request();
  32. try {
  33. snapshotGetDocRequest.getResult().getVersionID();
  34. } catch (InvalidProjectException e) {
  35. return false;
  36. }
  37. return true;
  38. }
  39. @Override
  40. public List<WritableRepositoryContents> getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException {
  41. System.out.println("Fetching project: " + projectName);
  42. return dataModel.updateProjectWithName(projectName);
  43. }
  44. @Override
  45. public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException {
  46. System.out.println("Pushing project: " + projectName);
  47. CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents, hostname);
  48. SnapshotPushRequest snapshotPushRequest = new SnapshotPushRequest(candidate);
  49. snapshotPushRequest.request();
  50. SnapshotPushRequestResult result = snapshotPushRequest.getResult();
  51. if (result.wasSuccessful()) {
  52. candidate.approveWithVersionID(postbackManager.getVersionID(projectName));
  53. } else {
  54. throw new OutOfDateException();
  55. }
  56. }
  57. /* Called by postback thread. */
  58. @Override
  59. public void postbackReceivedSuccessfully(String projectName, int versionID) throws UnexpectedPostbackException {
  60. postbackManager.postVersionIDForProject(projectName, versionID);
  61. }
  62. @Override
  63. public void postbackReceivedWithException(String projectName, SnapshotPostException exception) throws UnexpectedPostbackException {
  64. postbackManager.postExceptionForProject(projectName, exception);
  65. }
  66. }