WLProject.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package uk.ac.ic.wlgitbridge.writelatex.model;
  2. import com.google.gson.JsonElement;
  3. import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Request;
  4. import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
  5. import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocResult;
  6. import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotData;
  7. import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionRequest;
  8. import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionResult;
  9. import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotGetSavedVersRequest;
  10. import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotInfo;
  11. import java.io.IOException;
  12. import java.util.*;
  13. import java.util.concurrent.ExecutionException;
  14. /**
  15. * Created by Winston on 06/11/14.
  16. */
  17. public class WLProject {
  18. private final String name;
  19. private final Map<Integer, Snapshot> snapshots;
  20. private final SortedSet<Integer> versions;
  21. private List<Snapshot> snapshotsToAdd;
  22. public WLProject(String name) {
  23. this.name = name;
  24. snapshots = new HashMap<Integer, Snapshot>();
  25. versions = new TreeSet<Integer>();
  26. }
  27. public void update() throws Throwable {
  28. getNew();
  29. }
  30. private boolean getNew() throws Throwable {
  31. SnapshotGetDocRequest getDoc = new SnapshotGetDocRequest(name);
  32. SnapshotGetSavedVersRequest getSavedVers = new SnapshotGetSavedVersRequest(name);
  33. getDoc.request();
  34. getSavedVers.request();
  35. Set<Integer> fetchedIDs = new HashSet<Integer>();
  36. Map<Integer, SnapshotInfo> fetchedSnapshotInfos = new HashMap<Integer, SnapshotInfo>();
  37. int latestVersionID = getDoc.getResult().getVersionID();
  38. fetchedSnapshotInfos.put(latestVersionID, new SnapshotInfo(latestVersionID));
  39. fetchedIDs.add(latestVersionID);
  40. for (SnapshotInfo snapshotInfo : getSavedVers.getResult().getSavedVers()) {
  41. int versionId = snapshotInfo.getVersionId();
  42. fetchedSnapshotInfos.put(versionId, snapshotInfo);
  43. fetchedIDs.add(versionId);
  44. }
  45. boolean result = false;
  46. List<Integer> idsToUpdate = new LinkedList<Integer>();
  47. boolean hasNew = false;
  48. for (Integer id : fetchedIDs) {
  49. boolean contains = versions.contains(id);
  50. result = result || contains;
  51. if (!contains) {
  52. idsToUpdate.add(id);
  53. }
  54. }
  55. versions.addAll(fetchedIDs);
  56. versions.add(latestVersionID);
  57. updateIDs(idsToUpdate, fetchedSnapshotInfos);
  58. return result;
  59. }
  60. private void updateIDs(List<Integer> idsToUpdate, Map<Integer, SnapshotInfo> fetchedSnapshotInfos) throws Throwable {
  61. System.out.println(idsToUpdate);
  62. List<SnapshotGetForVersionRequest> requests = new LinkedList<SnapshotGetForVersionRequest>();
  63. for (int id : idsToUpdate) {
  64. SnapshotGetForVersionRequest request = new SnapshotGetForVersionRequest(name, id);
  65. requests.add(request);
  66. request.request();
  67. }
  68. for (SnapshotGetForVersionRequest request : requests) {
  69. SnapshotGetForVersionResult result = request.getResult();
  70. SnapshotData data = result.getSnapshotData();
  71. Snapshot snapshot = new Snapshot(fetchedSnapshotInfos.get(request.getVersionID()), data);
  72. snapshots.put(request.getVersionID(), snapshot);
  73. }
  74. snapshotsToAdd = new LinkedList<Snapshot>();
  75. for (int id : idsToUpdate) {
  76. snapshotsToAdd.add(snapshots.get(id));
  77. }
  78. }
  79. public List<Snapshot> getSnapshotsToAdd() {
  80. return snapshotsToAdd;
  81. }
  82. }