From b5513618d0c9aac2f406300673f745eaeb5af27d Mon Sep 17 00:00:00 2001 From: Winston Li Date: Sat, 8 Nov 2014 12:54:06 +0000 Subject: [PATCH] Refactored so that the correct exceptions are thrown, especially when there is an git repo. --- .../wlgitbridge/bridge/RepositorySource.java | 1 + .../wlgitbridge/bridge/WLBridgedProject.java | 7 +-- .../writelatex/SnapshotFetcher.java | 18 +++--- .../writelatex/SnapshotRepositoryBuilder.java | 9 ++- .../writelatex/api/SnapshotAPI.java | 15 ----- .../writelatex/api/SnapshotDBAPI.java | 7 ++- .../api/request/base/JSONSource.java | 5 +- .../writelatex/api/request/base/Request.java | 28 +++++---- .../writelatex/api/request/base/Result.java | 3 +- .../exception/FailedConnectionException.java | 7 +++ .../request/getdoc/SnapshotGetDocRequest.java | 3 +- .../request/getdoc/SnapshotGetDocResult.java | 19 +++++- .../exception/InvalidProjectException.java | 7 +++ .../request/getforversion/SnapshotData.java | 18 ++---- .../SnapshotGetForVersionRequest.java | 3 +- .../SnapshotGetForVersionResult.java | 10 +--- .../request/getforversion/WLAttachment.java | 58 +++++++++++-------- .../api/request/getforversion/WLFile.java | 17 +++--- .../SnapshotGetSavedVersRequest.java | 3 +- .../SnapshotGetSavedVersResult.java | 4 +- .../request/getsavedvers/SnapshotInfo.java | 3 - .../api/request/getsavedvers/WLUser.java | 3 - .../wlgitbridge/writelatex/db/WLFileNode.java | 7 +++ .../writelatex/db/WLFileStore.java | 19 ++++++ .../writelatex/model/Snapshot.java | 4 +- .../writelatex/model/WLDataModel.java | 22 +++++-- .../writelatex/model/WLProject.java | 14 ++--- .../api/request/base/RequestTests.java | 3 - .../test/writelatex/model/WLProjectTests.java | 10 ++-- 29 files changed, 190 insertions(+), 137 deletions(-) delete mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/exception/FailedConnectionException.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileNode.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileStore.java diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RepositorySource.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RepositorySource.java index b058339bf8..df62ed32d8 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RepositorySource.java +++ b/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; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WLBridgedProject.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WLBridgedProject.java index 5005b85ce0..4b94a4a68c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WLBridgedProject.java +++ b/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); } 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 bfb28b4031..e5bd10b700 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 @@ -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(); } - public List fetchNewSnapshots() throws Throwable { + public List fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException { List newSnapshots = new LinkedList(); while (getNew(newSnapshots)); return newSnapshots; } - private boolean getNew(List newSnapshots) throws Throwable { + private boolean getNew(List 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 fetchedIDs, Map fetchedSnapshotInfos) throws Throwable { + private int putLatestDoc(SnapshotGetDocRequest getDoc, Set fetchedIDs, Map fetchedSnapshotInfos) throws FailedConnectionException, InvalidProjectException { int latestVersionID = getDoc.getResult().getVersionID(); putFetchedResult(new SnapshotInfo(latestVersionID), fetchedIDs, fetchedSnapshotInfos); return latestVersionID; } - private void putSavedVers(SnapshotGetSavedVersRequest getSavedVers, Set fetchedIDs, Map fetchedSnapshotInfos) throws Throwable { + private void putSavedVers(SnapshotGetSavedVersRequest getSavedVers, Set fetchedIDs, Map 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 idsToUpdate, Map fetchedSnapshotInfos, List newSnapshots) throws Throwable { + private boolean updateIDs(List idsToUpdate, Map fetchedSnapshotInfos, List newSnapshots) throws FailedConnectionException { if (idsToUpdate.isEmpty()) { return false; } @@ -90,7 +92,7 @@ public class SnapshotFetcher { return true; } - private void fetchVersions(List idsToUpdate, Map fetchedSnapshotInfos, List newSnapshots) throws Throwable { + private void fetchVersions(List idsToUpdate, Map fetchedSnapshotInfos, List newSnapshots) throws FailedConnectionException { List requests = createFiredRequests(idsToUpdate); processResults(fetchedSnapshotInfos, newSnapshots, requests); } @@ -105,13 +107,13 @@ public class SnapshotFetcher { return requests; } - private void processResults(Map fetchedSnapshotInfos, List newSnapshots, List requests) throws Throwable { + private void processResults(Map fetchedSnapshotInfos, List newSnapshots, List requests) throws FailedConnectionException { for (SnapshotGetForVersionRequest request : requests) { processResult(fetchedSnapshotInfos, newSnapshots, request); } } - private void processResult(Map fetchedSnapshotInfos, List newSnapshots, SnapshotGetForVersionRequest request) throws Throwable { + private void processResult(Map fetchedSnapshotInfos, List newSnapshots, SnapshotGetForVersionRequest request) throws FailedConnectionException { SnapshotGetForVersionResult result = request.getResult(); SnapshotData data = result.getSnapshotData(); Snapshot snapshot = new Snapshot(fetchedSnapshotInfos.get(request.getVersionID()), data); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java index 6eb90f5582..6fc266d12d 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java +++ b/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; } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java deleted file mode 100644 index 3597d19735..0000000000 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotAPI.java +++ /dev/null @@ -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 getSnapshots(); - public void putSnapshots(List snapshots); - -} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotDBAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotDBAPI.java index f508728752..cecfb8e6c3 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/SnapshotDBAPI.java +++ b/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 getSnapshotsToAddToProject(String name) throws Throwable; + public boolean repositoryExists(String name) throws FailedConnectionException; + public List getSnapshotsToAddToProject(String name) throws FailedConnectionException, InvalidProjectException; } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/JSONSource.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/JSONSource.java index 1f91bc70ed..b0db38613d 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/JSONSource.java +++ b/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; } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Request.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Request.java index 3ab034a0ac..5ec0e3c268 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Request.java +++ b/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 { private final String url; private Future 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 { @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(); } } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Result.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Result.java index 0226e373b3..c766b15424 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/base/Result.java +++ b/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); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/exception/FailedConnectionException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/exception/FailedConnectionException.java new file mode 100644 index 0000000000..baf3685181 --- /dev/null +++ b/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 { +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocRequest.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocRequest.java index 8b742399c1..6290a86488 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/SnapshotGetDocRequest.java +++ b/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 srcs; private List atts; - public SnapshotData(JsonElement json) { + public SnapshotData(JsonElement json) throws FailedConnectionException { srcs = new LinkedList(); atts = new LinkedList(); 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 getSrcs() { return srcs; } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionRequest.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionRequest.java index 9ac7eb0ea8..8c66127fd6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotGetForVersionRequest.java +++ b/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 future; - public WLAttachment(JsonElement json) { + public WLAttachment(JsonElement json) throws FailedConnectionException { super(json); } @Override - public byte[] getContents() throws ExecutionException, InterruptedException { - return future.get(); - } - - @Override - protected void getContentsFromJSON(JsonArray jsonArray) { + public byte[] getContents() throws FailedConnectionException { try { - fetchContents(jsonArray.get(0).getAsString()); - } catch (IOException e) { - throw new RuntimeException(); + return future.get(); + } catch (InterruptedException e) { + throw new FailedConnectionException(); + } catch (ExecutionException e) { + throw new FailedConnectionException(); } } - private void fetchContents(String url) throws IOException { + @Override + protected void getContentsFromJSON(JsonArray jsonArray) throws FailedConnectionException { + fetchContents(jsonArray.get(0).getAsString()); + } + + private void fetchContents(String url) throws FailedConnectionException { AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); - future = asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler() { + try { + future = asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler() { - 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(); + } } } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLFile.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLFile.java index 038a19cfcc..80bbcb5766 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/WLFile.java +++ b/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(); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersRequest.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersRequest.java index f5df493493..54ca4463f6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotGetSavedVersRequest.java +++ b/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 savedVers; - public SnapshotGetSavedVersResult(Request request, JsonElement json) { + public SnapshotGetSavedVersResult(Request request, JsonElement json) throws FailedConnectionException { super(request, json); } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotInfo.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotInfo.java index fe3d739942..13703f8ade 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/SnapshotInfo.java +++ b/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. */ diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/WLUser.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/WLUser.java index 77f30e796e..f84f2f4edc 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getsavedvers/WLUser.java +++ b/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. */ diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileNode.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileNode.java new file mode 100644 index 0000000000..1ffbbb2c46 --- /dev/null +++ b/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 { +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileStore.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/db/WLFileStore.java new file mode 100644 index 0000000000..60a1887fcb --- /dev/null +++ b/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 fileStore; + + public WLFileStore() { + fileStore = new HashMap(); + } + + + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/Snapshot.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/Snapshot.java index ca870ed3cc..00217e9c31 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/Snapshot.java +++ b/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); } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java index 1e4bc8036a..7a6d499297 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java +++ b/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 projects; + private final WLFileStore fileStore; public WLDataModel() { projects = new HashMap(); + 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 getSnapshotsToAddToProject(String name) throws Throwable { + public List getSnapshotsToAddToProject(String name) throws FailedConnectionException, InvalidProjectException { return updateProjectWithName(name); } - private List updateProjectWithName(String name) throws Throwable { + private List updateProjectWithName(String name) throws FailedConnectionException, InvalidProjectException { if (!projects.containsKey(name)) { projects.put(name, new WLProject(name)); } 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 038fb82b4d..9649a3cd73 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 @@ -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 fetchNewSnapshots() throws Throwable { + public List fetchNewSnapshots() throws FailedConnectionException, InvalidProjectException { return snapshotFetcher.fetchNewSnapshots(); } diff --git a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/api/request/base/RequestTests.java b/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/api/request/base/RequestTests.java index d08f8677c5..4f850c5cfe 100644 --- a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/api/request/base/RequestTests.java +++ b/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. */ diff --git a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/model/WLProjectTests.java b/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/model/WLProjectTests.java index 228eb0b4d8..8ccc713724 100644 --- a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/writelatex/model/WLProjectTests.java +++ b/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(); } }