diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java index df9ca55f93..cea169f8be 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java @@ -9,13 +9,17 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForV import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotGetSavedVersRequest; import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotInfo; import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot; +import uk.ac.ic.wlgitbridge.writelatex.model.db.PersistentStoreAPI; +import uk.ac.ic.wlgitbridge.writelatex.model.db.PersistentStoreSource; import java.util.*; /** * Created by Winston on 07/11/14. */ -public class SnapshotFetcher { +public class SnapshotFetcher implements PersistentStoreSource { + + private PersistentStoreAPI persistentStore; private final String projectName; private final Map snapshots; @@ -30,11 +34,17 @@ public class SnapshotFetcher { public SortedSet fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException { SortedSet newSnapshots = new TreeSet(); while (getNew(newSnapshots)); + for (Snapshot snapshot : newSnapshots) { + persistentStore.addSnapshot(projectName, snapshot.getVersionID()); + } System.out.println("Snapshots fetched: " + newSnapshots); return newSnapshots; } public Snapshot getLatestSnapshot() { + if (versions.isEmpty()) { + return null; + } return snapshots.get(versions.last()); } @@ -42,6 +52,15 @@ public class SnapshotFetcher { versions.add(versionID); } + @Override + public void initFromPersistentStore(PersistentStoreAPI persistentStore) { + this.persistentStore = persistentStore; + for (Integer savedVersionID : persistentStore.getVersionIDsForProjectName(projectName)) { + snapshots.put(savedVersionID, new Snapshot(savedVersionID)); + versions.add(savedVersionID); + } + } + private boolean getNew(SortedSet newSnapshots) throws FailedConnectionException, InvalidProjectException { SnapshotGetDocRequest getDoc = new SnapshotGetDocRequest(projectName); SnapshotGetSavedVersRequest getSavedVers = new SnapshotGetSavedVersRequest(projectName); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java index 8ec978659a..9e67c64fbc 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java @@ -34,7 +34,7 @@ public class WLProject implements PersistentStoreSource { public SortedSet fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException { SortedSet newSnapshots = snapshotFetcher.fetchNewSnapshots(); - latestSnapshotID = snapshotFetcher.getLatestSnapshot().getVersionID(); + updateLatestSnapshot(); return newSnapshots; } @@ -46,6 +46,15 @@ public class WLProject implements PersistentStoreSource { return latestSnapshotID; } + private void updateLatestSnapshot() { + Snapshot latest = snapshotFetcher.getLatestSnapshot(); + if (latest == null) { + latestSnapshotID = -1; + } else { + latestSnapshotID = latest.getVersionID(); + } + } + public void putLatestSnapshot(int versionID) { snapshots.put(versionID, new Snapshot(versionID)); snapshotFetcher.putLatestVersion(versionID); @@ -54,6 +63,8 @@ public class WLProject implements PersistentStoreSource { @Override public void initFromPersistentStore(PersistentStoreAPI persistentStore) { - + snapshotFetcher.initFromPersistentStore(persistentStore); + updateLatestSnapshot(); } + } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java index 1c380c71fd..b0f0019d4c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java @@ -30,7 +30,7 @@ public class WLProjectStore implements PersistentStoreSource { if (projects.containsKey(name)) { project = projects.get(name); } else { - project = new WLProject(name); + project = new WLProject(name, persistentStore); projects.put(name, project); persistentStore.addProject(name); } diff --git a/services/git-bridge/test/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectTests.java b/services/git-bridge/test/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectTests.java index bf6093d69c..724e645073 100644 --- a/services/git-bridge/test/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectTests.java +++ b/services/git-bridge/test/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectTests.java @@ -1,8 +1,6 @@ package uk.ac.ic.wlgitbridge.writelatex.model; import org.junit.Test; -import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; -import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; /** * Created by Winston on 06/11/14. @@ -11,14 +9,7 @@ public class WLProjectTests { @Test public void nothingToTest() { - WLProject project = new WLProject("1826rqgsdb"); - try { - project.fetchNewSnapshots(); - } catch (FailedConnectionException e) { - e.printStackTrace(); - } catch (InvalidProjectException e) { - e.printStackTrace(); - } + } }