Просмотр исходного кода

Refactored so that the correct exceptions are thrown, especially when there is an git repo.

Winston Li 12 лет назад
Родитель
Сommit
b5513618d0
29 измененных файлов с 189 добавлено и 136 удалено
  1. 1 0
      services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RepositorySource.java
  2. 3 4
      services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WLBridgedProject.java
  3. 10 8
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java
  4. 7 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java
  5. 0 15
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java
  6. 4 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotDBAPI.java
  7. 2 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/JSONSource.java
  8. 17 11
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Request.java
  9. 2 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Result.java
  10. 7 0
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/exception/FailedConnectionException.java
  11. 2 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocRequest.java
  12. 16 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocResult.java
  13. 7 0
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java
  14. 5 13
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotData.java
  15. 2 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionRequest.java
  16. 3 7
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionResult.java
  17. 33 23
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLAttachment.java
  18. 10 7
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLFile.java
  19. 2 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersRequest.java
  20. 2 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersResult.java
  21. 0 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotInfo.java
  22. 0 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/WLUser.java
  23. 7 0
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileNode.java
  24. 19 0
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileStore.java
  25. 2 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/Snapshot.java
  26. 16 6
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java
  27. 6 8
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java
  28. 0 3
      services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/api/request/base/RequestTests.java
  29. 4 6
      services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/model/WLProjectTests.java

+ 1 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RepositorySource.java

@@ -3,6 +3,7 @@ package uk.ac.ic.wlgitbridge.bridge;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.io.File;
 

+ 3 - 4
services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WLBridgedProject.java

@@ -1,12 +1,11 @@
 package uk.ac.ic.wlgitbridge.bridge;
 
-import org.eclipse.jgit.api.AddCommand;
-import org.eclipse.jgit.api.CommitCommand;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 import uk.ac.ic.wlgitbridge.writelatex.api.SnapshotDBAPI;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
 
 import java.io.File;
@@ -30,7 +29,7 @@ public class WLBridgedProject {
         this.snapshotDBAPI = snapshotDBAPI;
     }
 
-    public void buildRepository() throws RepositoryNotFoundException, ServiceNotEnabledException {
+    public void buildRepository() throws RepositoryNotFoundException, ServiceNotEnabledException, FailedConnectionException {
         if (repository.getObjectDatabase().exists()) {
             updateRepositoryFromSnapshots(repository);
         } else {
@@ -53,7 +52,7 @@ public class WLBridgedProject {
         }
     }
 
-    private void buildRepositoryFromScratch(Repository repository) throws RepositoryNotFoundException, ServiceNotEnabledException {
+    private void buildRepositoryFromScratch(Repository repository) throws RepositoryNotFoundException, ServiceNotEnabledException, FailedConnectionException {
         if (!snapshotDBAPI.repositoryExists(name)) {
             throw new RepositoryNotFoundException(name);
         }

+ 10 - 8
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java

@@ -1,6 +1,8 @@
 package uk.ac.ic.wlgitbridge.writelatex;
 
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotData;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionRequest;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionResult;
@@ -25,13 +27,13 @@ public class SnapshotFetcher {
         versions = new TreeSet<Integer>();
     }
 
-    public List<Snapshot> fetchNewSnapshots() throws Throwable {
+    public List<Snapshot> fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException {
         List<Snapshot> newSnapshots = new LinkedList<Snapshot>();
         while (getNew(newSnapshots));
         return newSnapshots;
     }
 
-    private boolean getNew(List<Snapshot> newSnapshots) throws Throwable {
+    private boolean getNew(List<Snapshot> newSnapshots) throws FailedConnectionException, InvalidProjectException {
         SnapshotGetDocRequest getDoc = new SnapshotGetDocRequest(projectName);
         SnapshotGetSavedVersRequest getSavedVers = new SnapshotGetSavedVersRequest(projectName);
 
@@ -59,13 +61,13 @@ public class SnapshotFetcher {
         ids.add(versionID);
     }
 
-    private int putLatestDoc(SnapshotGetDocRequest getDoc, Set<Integer> fetchedIDs, Map<Integer, SnapshotInfo> fetchedSnapshotInfos) throws Throwable {
+    private int putLatestDoc(SnapshotGetDocRequest getDoc, Set<Integer> fetchedIDs, Map<Integer, SnapshotInfo> fetchedSnapshotInfos) throws FailedConnectionException, InvalidProjectException {
         int latestVersionID = getDoc.getResult().getVersionID();
         putFetchedResult(new SnapshotInfo(latestVersionID), fetchedIDs, fetchedSnapshotInfos);
         return latestVersionID;
     }
 
-    private void putSavedVers(SnapshotGetSavedVersRequest getSavedVers, Set<Integer> fetchedIDs, Map<Integer, SnapshotInfo> fetchedSnapshotInfos) throws Throwable {
+    private void putSavedVers(SnapshotGetSavedVersRequest getSavedVers, Set<Integer> fetchedIDs, Map<Integer, SnapshotInfo> fetchedSnapshotInfos) throws FailedConnectionException {
         for (SnapshotInfo snapshotInfo : getSavedVers.getResult().getSavedVers()) {
             putFetchedResult(snapshotInfo, fetchedIDs, fetchedSnapshotInfos);
         }
@@ -81,7 +83,7 @@ public class SnapshotFetcher {
         return idsToUpdate;
     }
 
-    private boolean updateIDs(List<Integer> idsToUpdate, Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots) throws Throwable {
+    private boolean updateIDs(List<Integer> idsToUpdate, Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots) throws FailedConnectionException {
         if (idsToUpdate.isEmpty()) {
             return false;
         }
@@ -90,7 +92,7 @@ public class SnapshotFetcher {
         return true;
     }
 
-    private void fetchVersions(List<Integer> idsToUpdate, Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots) throws Throwable {
+    private void fetchVersions(List<Integer> idsToUpdate, Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots) throws FailedConnectionException {
         List<SnapshotGetForVersionRequest> requests = createFiredRequests(idsToUpdate);
         processResults(fetchedSnapshotInfos, newSnapshots, requests);
     }
@@ -105,13 +107,13 @@ public class SnapshotFetcher {
         return requests;
     }
 
-    private void processResults(Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots, List<SnapshotGetForVersionRequest> requests) throws Throwable {
+    private void processResults(Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots, List<SnapshotGetForVersionRequest> requests) throws FailedConnectionException {
         for (SnapshotGetForVersionRequest request : requests) {
             processResult(fetchedSnapshotInfos, newSnapshots, request);
         }
     }
 
-    private void processResult(Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots, SnapshotGetForVersionRequest request) throws Throwable {
+    private void processResult(Map<Integer, SnapshotInfo> fetchedSnapshotInfos, List<Snapshot> newSnapshots, SnapshotGetForVersionRequest request) throws FailedConnectionException {
         SnapshotGetForVersionResult result = request.getResult();
         SnapshotData data = result.getSnapshotData();
         Snapshot snapshot = new Snapshot(fetchedSnapshotInfos.get(request.getVersionID()), data);

+ 7 - 2
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java

@@ -7,6 +7,7 @@ import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 import uk.ac.ic.wlgitbridge.bridge.RepositorySource;
 import uk.ac.ic.wlgitbridge.bridge.WLBridgedProject;
 import uk.ac.ic.wlgitbridge.writelatex.api.SnapshotDBAPI;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,9 +31,13 @@ public class SnapshotRepositoryBuilder implements RepositorySource {
         try {
             repository = new FileRepositoryBuilder().setWorkTree(repositoryDirectory).build();
         } catch (IOException e) {
-            throw new RepositoryNotFoundException(name);
+            e.printStackTrace();
+        }
+        try {
+            new WLBridgedProject(repository, name, repositoryDirectory, snapshotDBAPI).buildRepository();
+        } catch (FailedConnectionException e) {
+            e.printStackTrace();
         }
-        new WLBridgedProject(repository, name, repositoryDirectory, snapshotDBAPI).buildRepository();
         return repository;
     }
 

+ 0 - 15
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java

@@ -1,15 +0,0 @@
-package uk.ac.ic.wlgitbridge.writelatex.api;
-
-import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
-
-import java.util.List;
-
-/**
- * Created by Winston on 03/11/14.
- */
-public interface SnapshotAPI {
-
-    public List<Snapshot> getSnapshots();
-    public void putSnapshots(List<Snapshot> snapshots);
-
-}

+ 4 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotDBAPI.java

@@ -1,6 +1,7 @@
 package uk.ac.ic.wlgitbridge.writelatex.api;
 
-import org.eclipse.jgit.lib.Repository;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
 import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
 
 import java.util.List;
@@ -10,7 +11,7 @@ import java.util.List;
  */
 public interface SnapshotDBAPI {
 
-    public boolean repositoryExists(String name);
-    public List<Snapshot> getSnapshotsToAddToProject(String name) throws Throwable;
+    public boolean repositoryExists(String name) throws FailedConnectionException;
+    public List<Snapshot> getSnapshotsToAddToProject(String name) throws FailedConnectionException, InvalidProjectException;
 
 }

+ 2 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/JSONSource.java

@@ -1,14 +1,13 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.base;
 
 import com.google.gson.JsonElement;
-
-import java.io.IOException;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
  */
 public interface JSONSource {
 
-    public abstract void fromJSON(JsonElement json);
+    public abstract void fromJSON(JsonElement json) throws FailedConnectionException;
 
 }

+ 17 - 11
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Request.java

@@ -6,8 +6,10 @@ import com.ning.http.client.AsyncCompletionHandler;
 import com.ning.http.client.AsyncHttpClient;
 import com.ning.http.client.Realm;
 import com.ning.http.client.Response;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.io.IOException;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
 /**
@@ -18,17 +20,15 @@ public abstract class Request<T extends Result> {
     private final String url;
 
     private Future<T> future;
-    private Throwable throwable;
-
-    private boolean finished;
+    private boolean error;
 
     public Request(String url) {
         this.url = url;
-        finished = false;
+        error = false;
     }
 
     protected abstract Realm buildRequestRealm();
-    protected abstract T parseResponse(JsonElement json);
+    protected abstract T parseResponse(JsonElement json) throws FailedConnectionException;
 
     public void request() {
         AsyncHttpClient client = new AsyncHttpClient();
@@ -42,20 +42,26 @@ public abstract class Request<T extends Result> {
 
                 @Override
                 public void onThrowable(Throwable t) {
-                    throwable = t;
+                    error = true;
                 }
 
             });
         } catch (IOException e) {
-            throwable = e;
+            error = true;
         }
     }
 
-    public T getResult() throws Throwable {
-        if (throwable != null) {
-            throw throwable;
+    public T getResult() throws FailedConnectionException {
+        if (error) {
+            throw new FailedConnectionException();
+        }
+        try {
+            return future.get();
+        } catch (InterruptedException e) {
+            throw new FailedConnectionException();
+        } catch (ExecutionException e) {
+            throw new FailedConnectionException();
         }
-        return future.get();
     }
 
 }

+ 2 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Result.java

@@ -1,6 +1,7 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.base;
 
 import com.google.gson.JsonElement;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
@@ -10,7 +11,7 @@ public abstract class Result implements JSONSource {
     private JsonElement json;
     private final Request request;
 
-    public Result(Request request, JsonElement json) {
+    public Result(Request request, JsonElement json) throws FailedConnectionException {
         this.request = request;
         this.json = json;
         fromJSON(json);

+ 7 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/exception/FailedConnectionException.java

@@ -0,0 +1,7 @@
+package uk.ac.ic.wlgitbridge.writelatex.api.request.exception;
+
+/**
+ * Created by Winston on 08/11/14.
+ */
+public class FailedConnectionException extends Exception {
+}

+ 2 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocRequest.java

@@ -2,6 +2,7 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc;
 
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.SnapshotAPIRequest;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
@@ -15,7 +16,7 @@ public class SnapshotGetDocRequest extends SnapshotAPIRequest<SnapshotGetDocResu
     }
 
     @Override
-    protected SnapshotGetDocResult parseResponse(JsonElement json) {
+    protected SnapshotGetDocResult parseResponse(JsonElement json) throws FailedConnectionException {
         return new SnapshotGetDocResult(this, json);
     }
 

+ 16 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocResult.java

@@ -1,8 +1,11 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc;
 
 import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Request;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Result;
+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,16 +14,26 @@ public class SnapshotGetDocResult extends Result {
 
     private int versionID;
 
-    public SnapshotGetDocResult(Request request, JsonElement json) {
+    private InvalidProjectException invalidProjectException;
+
+    public SnapshotGetDocResult(Request request, JsonElement json) throws FailedConnectionException {
         super(request, json);
     }
 
     @Override
     public void fromJSON(JsonElement json) {
-        versionID = json.getAsJsonObject().get("latestVerId").getAsInt();
+        JsonObject jsonObject = json.getAsJsonObject();
+        if (jsonObject.has("status") && jsonObject.get("status").getAsInt() == 404) {
+            invalidProjectException = new InvalidProjectException();
+        } else {
+            versionID = json.getAsJsonObject().get("latestVerId").getAsInt();
+        }
     }
 
-    public int getVersionID() {
+    public int getVersionID() throws InvalidProjectException {
+        if (invalidProjectException != null) {
+            throw invalidProjectException;
+        }
         return versionID;
     }
 

+ 7 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java

@@ -0,0 +1,7 @@
+package uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception;
+
+/**
+ * Created by Winston on 08/11/14.
+ */
+public class InvalidProjectException extends Exception {
+}

+ 5 - 13
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotData.java

@@ -3,6 +3,7 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.io.IOException;
 import java.util.LinkedList;
@@ -20,39 +21,30 @@ public class SnapshotData implements JSONSource {
     private List<WLFile> srcs;
     private List<WLFile> atts;
 
-    public SnapshotData(JsonElement json) {
+    public SnapshotData(JsonElement json) throws FailedConnectionException {
         srcs = new LinkedList<WLFile>();
         atts = new LinkedList<WLFile>();
         fromJSON(json);
     }
 
     @Override
-    public void fromJSON(JsonElement json) {
+    public void fromJSON(JsonElement json) throws FailedConnectionException {
         populateSrcs(json.getAsJsonObject().get(JSON_KEY_SRCS).getAsJsonArray());
         populateAtts(json.getAsJsonObject().get(JSON_KEY_ATTS).getAsJsonArray());
     }
 
-    private void populateSrcs(JsonArray jsonArray) {
+    private void populateSrcs(JsonArray jsonArray) throws FailedConnectionException {
         for (JsonElement json : jsonArray) {
             srcs.add(new WLFile(json));
         }
     }
 
-    private void populateAtts(JsonArray jsonArray) {
+    private void populateAtts(JsonArray jsonArray) throws FailedConnectionException {
         for (JsonElement json : jsonArray) {
             atts.add(new WLAttachment(json));
         }
     }
 
-    public void writeAll(String repoDir) throws InterruptedException, ExecutionException, IOException {
-        for (WLFile src : srcs) {
-            src.writeToDisk(repoDir);
-        }
-        for (WLFile att : atts) {
-            att.writeToDisk(repoDir);
-        }
-    }
-
     public List<WLFile> getSrcs() {
         return srcs;
     }

+ 2 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionRequest.java

@@ -2,6 +2,7 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion;
 
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.SnapshotAPIRequest;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
@@ -18,7 +19,7 @@ public class SnapshotGetForVersionRequest extends SnapshotAPIRequest<SnapshotGet
     }
 
     @Override
-    protected SnapshotGetForVersionResult parseResponse(JsonElement json) {
+    protected SnapshotGetForVersionResult parseResponse(JsonElement json) throws FailedConnectionException {
         return new SnapshotGetForVersionResult(this, json);
     }
 

+ 3 - 7
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionResult.java

@@ -1,13 +1,9 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion;
 
-import com.google.gson.Gson;
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Request;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Result;
-
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
@@ -16,12 +12,12 @@ public class SnapshotGetForVersionResult extends Result {
 
     private SnapshotData snapshotData;
 
-    public SnapshotGetForVersionResult(Request request, JsonElement json) {
+    public SnapshotGetForVersionResult(Request request, JsonElement json) throws FailedConnectionException {
         super(request, json);
     }
 
     @Override
-    public void fromJSON(JsonElement json) {
+    public void fromJSON(JsonElement json) throws FailedConnectionException {
         snapshotData = new SnapshotData(json);
     }
 

+ 33 - 23
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLAttachment.java

@@ -2,7 +2,11 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
-import com.ning.http.client.*;
+import com.ning.http.client.AsyncCompletionHandler;
+import com.ning.http.client.AsyncHttpClient;
+import com.ning.http.client.HttpResponseBodyPart;
+import com.ning.http.client.Response;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -16,42 +20,48 @@ public class WLAttachment extends WLFile {
 
     private Future<byte[]> future;
 
-    public WLAttachment(JsonElement json) {
+    public WLAttachment(JsonElement json) throws FailedConnectionException {
         super(json);
     }
 
     @Override
-    public byte[] getContents() throws ExecutionException, InterruptedException {
-        return future.get();
+    public byte[] getContents() throws FailedConnectionException {
+        try {
+            return future.get();
+        } catch (InterruptedException e) {
+            throw new FailedConnectionException();
+        } catch (ExecutionException e) {
+            throw new FailedConnectionException();
+        }
     }
 
     @Override
-    protected void getContentsFromJSON(JsonArray jsonArray) {
-        try {
-            fetchContents(jsonArray.get(0).getAsString());
-        } catch (IOException e) {
-            throw new RuntimeException();
-        }
+    protected void getContentsFromJSON(JsonArray jsonArray) throws FailedConnectionException {
+        fetchContents(jsonArray.get(0).getAsString());
     }
 
-    private void fetchContents(String url) throws IOException {
+    private void fetchContents(String url) throws FailedConnectionException {
         AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
-        future = asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler<byte[]>() {
+        try {
+            future = asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler<byte[]>() {
 
-            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
 
-            @Override
-            public STATE onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception {
-                bytes.write(bodyPart.getBodyPartBytes());
-                return STATE.CONTINUE;
-            }
+                @Override
+                public STATE onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception {
+                    bytes.write(bodyPart.getBodyPartBytes());
+                    return STATE.CONTINUE;
+                }
 
-            @Override
-            public byte[] onCompleted(Response response) throws Exception {
-                return bytes.toByteArray();
-            }
+                @Override
+                public byte[] onCompleted(Response response) throws Exception {
+                    return bytes.toByteArray();
+                }
 
-        });
+            });
+        } catch (IOException e) {
+            throw new FailedConnectionException();
+        }
     }
 
 }

+ 10 - 7
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLFile.java

@@ -2,10 +2,13 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.concurrent.ExecutionException;
 
 /**
@@ -16,18 +19,18 @@ public class WLFile implements JSONSource {
     protected byte[] contents;
     private String path;
 
-    public WLFile(JsonElement json) {
+    public WLFile(JsonElement json) throws FailedConnectionException {
         fromJSON(json);
     }
 
     @Override
-    public void fromJSON(JsonElement json) {
+    public void fromJSON(JsonElement json) throws FailedConnectionException {
         JsonArray jsonArray = json.getAsJsonArray();
         getContentsFromJSON(jsonArray);
         getPathFromJSON(jsonArray);
     }
 
-    public byte[] getContents() throws ExecutionException, InterruptedException {
+    public byte[] getContents() throws FailedConnectionException {
         return contents;
     }
 
@@ -35,7 +38,7 @@ public class WLFile implements JSONSource {
         return path;
     }
 
-    protected void getContentsFromJSON(JsonArray jsonArray) {
+    protected void getContentsFromJSON(JsonArray jsonArray) throws FailedConnectionException {
         contents = jsonArray.get(0).getAsString().getBytes();
     }
 
@@ -43,7 +46,7 @@ public class WLFile implements JSONSource {
         path = jsonArray.get(1).getAsString();
     }
 
-    public void writeToDisk(String repoDir) throws IOException, ExecutionException, InterruptedException {
+    public void writeToDisk(String repoDir) throws FailedConnectionException, IOException {
         File file = new File(repoDir, path);
         file.getParentFile().mkdirs();
         file.createNewFile();

+ 2 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersRequest.java

@@ -2,6 +2,7 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers;
 
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.SnapshotAPIRequest;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 /**
  * Created by Winston on 06/11/14.
@@ -15,7 +16,7 @@ public class SnapshotGetSavedVersRequest extends SnapshotAPIRequest<SnapshotGetS
     }
 
     @Override
-    protected SnapshotGetSavedVersResult parseResponse(JsonElement json) {
+    protected SnapshotGetSavedVersResult parseResponse(JsonElement json) throws FailedConnectionException {
         return new SnapshotGetSavedVersResult(this, json);
     }
 

+ 2 - 2
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersResult.java

@@ -1,10 +1,10 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers;
 
 import com.google.gson.Gson;
-import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Request;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.base.Result;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -16,7 +16,7 @@ public class SnapshotGetSavedVersResult extends Result {
 
     private List<SnapshotInfo> savedVers;
 
-    public SnapshotGetSavedVersResult(Request request, JsonElement json) {
+    public SnapshotGetSavedVersResult(Request request, JsonElement json) throws FailedConnectionException {
         super(request, json);
     }
 

+ 0 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotInfo.java

@@ -1,8 +1,5 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers;
 
-import com.google.gson.JsonElement;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
-
 /**
  * Created by Winston on 06/11/14.
  */

+ 0 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/WLUser.java

@@ -1,8 +1,5 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers;
 
-import com.google.gson.JsonElement;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
-
 /**
  * Created by Winston on 06/11/14.
  */

+ 7 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileNode.java

@@ -0,0 +1,7 @@
+package uk.ac.ic.wlgitbridge.writelatex.db;
+
+/**
+ * Created by Winston on 08/11/14.
+ */
+public class WLFileNode {
+}

+ 19 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileStore.java

@@ -0,0 +1,19 @@
+package uk.ac.ic.wlgitbridge.writelatex.db;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by Winston on 08/11/14.
+ */
+public class WLFileStore {
+
+    private final Map<String, WLFileNode> fileStore;
+
+    public WLFileStore() {
+        fileStore = new HashMap<String, WLFileNode>();
+    }
+
+
+
+}

+ 2 - 2
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/Snapshot.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.writelatex.model;
 
-import com.google.gson.JsonElement;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotData;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.WLFile;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotInfo;
@@ -34,7 +34,7 @@ public class Snapshot {
         atts = data.getAtts();
     }
 
-    public void writeToDisk(String basePath) throws InterruptedException, ExecutionException, IOException {
+    public void writeToDisk(String basePath) throws IOException, FailedConnectionException {
         for (WLFile file : srcs) {
             file.writeToDisk(basePath);
         }

+ 16 - 6
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java

@@ -1,6 +1,10 @@
 package uk.ac.ic.wlgitbridge.writelatex.model;
 
 import uk.ac.ic.wlgitbridge.writelatex.api.SnapshotDBAPI;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
+import uk.ac.ic.wlgitbridge.writelatex.db.WLFileStore;
 
 import java.util.HashMap;
 import java.util.List;
@@ -12,25 +16,31 @@ import java.util.Map;
 public class WLDataModel implements SnapshotDBAPI {
 
     private final Map<String, WLProject> projects;
+    private final WLFileStore fileStore;
 
     public WLDataModel() {
         projects = new HashMap<String, WLProject>();
+        fileStore = new WLFileStore();
     }
 
     @Override
-    public boolean repositoryExists(String name) {
-        if (!projects.containsKey(name)) {
-            projects.put(name, new WLProject(name));
+    public boolean repositoryExists(String name) throws FailedConnectionException {
+        SnapshotGetDocRequest snapshotGetDocRequest = new SnapshotGetDocRequest(name);
+        snapshotGetDocRequest.request();
+        try {
+            snapshotGetDocRequest.getResult().getVersionID();
+        } catch (InvalidProjectException e) {
+            return false;
         }
-        return projects.containsKey(name);
+        return true;
     }
 
     @Override
-    public List<Snapshot> getSnapshotsToAddToProject(String name) throws Throwable {
+    public List<Snapshot> getSnapshotsToAddToProject(String name) throws FailedConnectionException, InvalidProjectException {
         return updateProjectWithName(name);
     }
 
-    private List<Snapshot> updateProjectWithName(String name) throws Throwable {
+    private List<Snapshot> updateProjectWithName(String name) throws FailedConnectionException, InvalidProjectException {
         if (!projects.containsKey(name)) {
             projects.put(name, new WLProject(name));
         }

+ 6 - 8
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java

@@ -1,14 +1,12 @@
 package uk.ac.ic.wlgitbridge.writelatex.model;
 
 import uk.ac.ic.wlgitbridge.writelatex.SnapshotFetcher;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotData;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionRequest;
-import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionResult;
-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.api.request.exception.FailedConnectionException;
+import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Created by Winston on 06/11/14.
@@ -25,7 +23,7 @@ public class WLProject {
         snapshotFetcher = new SnapshotFetcher(name, snapshots);
     }
 
-    public List<Snapshot> fetchNewSnapshots() throws Throwable {
+    public List<Snapshot> fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException {
         return snapshotFetcher.fetchNewSnapshots();
     }
 

+ 0 - 3
services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/api/request/base/RequestTests.java

@@ -6,9 +6,6 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotGetForVersionRequest;
 import uk.ac.ic.wlgitbridge.writelatex.api.request.getsavedvers.SnapshotGetSavedVersRequest;
 
-import java.io.IOException;
-import java.util.concurrent.ExecutionException;
-
 /**
  * Created by Winston on 06/11/14.
  */

+ 4 - 6
services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/model/WLProjectTests.java

@@ -1,6 +1,8 @@
 package uk.ac.ic.wlgitbridge.test.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;
 import uk.ac.ic.wlgitbridge.writelatex.model.WLProject;
 
 import java.io.IOException;
@@ -16,14 +18,10 @@ public class WLProjectTests {
         WLProject project = new WLProject("1826rqgsdb");
         try {
             project.fetchNewSnapshots();
-        } catch (InterruptedException e) {
+        } catch (FailedConnectionException e) {
             e.printStackTrace();
-        } catch (ExecutionException e) {
+        } catch (InvalidProjectException e) {
             e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } catch (Throwable throwable) {
-            throwable.printStackTrace();
         }
     }