From da5b66185809e7ba2b0bbbe3182d9b34a75f23aa Mon Sep 17 00:00:00 2001 From: Winston Li Date: Mon, 17 Nov 2014 10:41:36 +0000 Subject: [PATCH] Added exception if the push request returned instantly with an error. --- .../SnapshotPushPostbackContents.java | 5 +++-- .../SnapshotPushPostbackHandler.java | 2 +- .../bridge/WriteLatexDataSource.java | 2 +- .../git/handler/hook/WriteLatexPutHook.java | 5 ++--- .../hook/exception/ForcedPushException.java | 2 +- .../wlgitbridge/writelatex/WriteLatexAPI.java | 13 +++++++++++-- .../exception/InvalidProjectException.java | 2 +- .../api/request/push/PostbackContents.java | 3 ++- .../api/request/push/PostbackManager.java | 2 +- .../api/request/push/SnapshotPushRequest.java | 3 +-- .../request/push/SnapshotPushRequestResult.java | 17 ++++++++++++++++- .../push/exception}/InvalidFilesException.java | 7 ++++--- .../exception}/InvalidProjectException.java | 7 ++++--- .../push/exception}/OutOfDateException.java | 11 ++++++++--- .../push/exception}/SnapshotPostException.java | 2 +- .../SnapshotPostExceptionBuilder.java | 6 +----- .../exception}/UnexpectedErrorException.java | 7 ++++--- .../writelatex/model/WLDataModel.java | 2 +- 18 files changed, 63 insertions(+), 35 deletions(-) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{ => api/request/push/exception}/InvalidFilesException.java (70%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{ => api/request/push/exception}/InvalidProjectException.java (71%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{ => api/request/push/exception}/OutOfDateException.java (67%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{ => api/request/push/exception}/SnapshotPostException.java (88%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/{application => writelatex/api/request/push/exception}/SnapshotPostExceptionBuilder.java (81%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{ => api/request/push/exception}/UnexpectedErrorException.java (73%) diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackContents.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackContents.java index f4fe6ea177..1d6ea0b2da 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackContents.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackContents.java @@ -4,9 +4,10 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostExceptionBuilder; /** * Created by Winston on 17/11/14. @@ -37,7 +38,7 @@ public class SnapshotPushPostbackContents implements JSONSource { setResult(responseObject, code); } - public void sendPostback() throws UnexpectedPostbackException { + public void processPostback() throws UnexpectedPostbackException { if (exception == null) { writeLatexDataSource.postbackReceivedSuccessfully(projectName, versionID); } else { diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java index e7bde81f08..b347762c7c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java @@ -33,7 +33,7 @@ public class SnapshotPushPostbackHandler extends AbstractHandler { String projectName = request.getRequestURI().split("/")[1]; SnapshotPushPostbackContents postbackContents = new SnapshotPushPostbackContents(writeLatexDataSource, projectName, contents); try { - postbackContents.sendPostback(); + postbackContents.processPostback(); } catch (UnexpectedPostbackException e) { throw new ServletException(); } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java index b49dd7f35d..64b89eed36 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java @@ -2,7 +2,7 @@ package uk.ac.ic.wlgitbridge.bridge; 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.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; import java.io.IOException; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java index d84b491532..3fba351735 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java @@ -9,8 +9,8 @@ import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; import uk.ac.ic.wlgitbridge.git.handler.hook.exception.ForcedPushException; import uk.ac.ic.wlgitbridge.git.util.RepositoryObjectTreeWalker; -import uk.ac.ic.wlgitbridge.writelatex.OutOfDateException; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.OutOfDateException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import java.io.IOException; @@ -51,7 +51,6 @@ public class WriteLatexPutHook implements PreReceiveHook { receiveCommand.setResult(Result.REJECTED_OTHER_REASON, message); } } - System.out.println("success"); } private void handleReceiveCommand(Repository repository, ReceiveCommand receiveCommand) throws IOException, SnapshotPostException, FailedConnectionException { diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/exception/ForcedPushException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/exception/ForcedPushException.java index 10612b0b88..d8bd0318b6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/exception/ForcedPushException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/exception/ForcedPushException.java @@ -1,7 +1,7 @@ package uk.ac.ic.wlgitbridge.git.handler.hook.exception; import com.google.gson.JsonElement; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import java.util.Arrays; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java index d68a56ac71..7e12487b0c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java @@ -9,7 +9,10 @@ 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.push.PostbackManager; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequest; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequestResult; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.OutOfDateException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.model.WLDataModel; import java.io.IOException; @@ -48,8 +51,14 @@ public class WriteLatexAPI implements WriteLatexDataSource { @Override public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException { CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents, hostname); - new SnapshotPushRequest(candidate).request(); - candidate.approveWithVersionID(postbackManager.getVersionID(projectName)); + SnapshotPushRequest snapshotPushRequest = new SnapshotPushRequest(candidate); + snapshotPushRequest.request(); + SnapshotPushRequestResult result = snapshotPushRequest.getResult(); + if (result.wasSuccessful()) { + candidate.approveWithVersionID(postbackManager.getVersionID(projectName)); + } else { + throw new OutOfDateException(); + } } /* Called by postback thread. */ diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java index 27f46e44a5..237586f26a 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java @@ -2,7 +2,7 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackContents.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackContents.java index ce321b73ca..adcc7f4b2c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackContents.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackContents.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.push; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; /** * Created by Winston on 17/11/14. @@ -13,6 +13,7 @@ public class PostbackContents { public PostbackContents() { received = false; + exception = null; } public synchronized int waitForPostback() throws SnapshotPostException { diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackManager.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackManager.java index b7c88cc92e..ff4ca9c4fa 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackManager.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackManager.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.push; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import java.util.HashMap; import java.util.Map; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequest.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequest.java index 871a588ec8..967b46ba58 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequest.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequest.java @@ -32,8 +32,7 @@ public class SnapshotPushRequest extends SnapshotAPIRequest getDescriptionLines() { - return null; + return Arrays.asList("invalid files, change ext or something"); } @Override diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidProjectException.java similarity index 71% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidProjectException.java index f84623645c..f3e01e51dd 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidProjectException.java @@ -1,7 +1,8 @@ -package uk.ac.ic.wlgitbridge.writelatex; +package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception; import com.google.gson.JsonElement; +import java.util.Arrays; import java.util.List; /** @@ -15,12 +16,12 @@ public class InvalidProjectException extends SnapshotPostException { @Override public String getMessage() { - return null; + return "invalid project"; } @Override public List getDescriptionLines() { - return null; + return Arrays.asList("your project is too big"); } @Override diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/OutOfDateException.java similarity index 67% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/OutOfDateException.java index ff50f85119..2c26bce328 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/OutOfDateException.java @@ -1,8 +1,9 @@ -package uk.ac.ic.wlgitbridge.writelatex; +package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.util.Arrays; import java.util.List; /** @@ -14,14 +15,18 @@ public class OutOfDateException extends SnapshotPostException { super(json); } + public OutOfDateException() { + + } + @Override public String getMessage() { - return null; + return "out of date"; } @Override public List getDescriptionLines() { - return null; + return Arrays.asList("out of date (shouldn't print this)"); } @Override diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostException.java similarity index 88% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostException.java index f1b958fc8f..b5634f2cf1 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex; +package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception; import com.google.gson.JsonElement; import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPostExceptionBuilder.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostExceptionBuilder.java similarity index 81% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPostExceptionBuilder.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostExceptionBuilder.java index da67d8111b..8409c7faad 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPostExceptionBuilder.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostExceptionBuilder.java @@ -1,10 +1,6 @@ -package uk.ac.ic.wlgitbridge.application; +package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception; import com.google.gson.JsonObject; -import uk.ac.ic.wlgitbridge.writelatex.InvalidFilesException; -import uk.ac.ic.wlgitbridge.writelatex.OutOfDateException; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; -import uk.ac.ic.wlgitbridge.writelatex.UnexpectedErrorException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/UnexpectedErrorException.java similarity index 73% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/UnexpectedErrorException.java index 5dbe007f17..fb39e524a6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/UnexpectedErrorException.java @@ -1,8 +1,9 @@ -package uk.ac.ic.wlgitbridge.writelatex; +package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.util.Arrays; import java.util.List; /** @@ -16,12 +17,12 @@ public class UnexpectedErrorException extends SnapshotPostException { @Override public String getMessage() { - return null; + return "unexpected error"; } @Override public List getDescriptionLines() { - return null; + return Arrays.asList("writelatex error"); } @Override 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 49c50b8373..7c3114d844 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 @@ -4,7 +4,7 @@ import uk.ac.ic.wlgitbridge.bridge.CandidateSnapshot; import uk.ac.ic.wlgitbridge.bridge.CandidateSnapshotCallback; import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents; import uk.ac.ic.wlgitbridge.bridge.WritableRepositoryContents; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.WLDirectoryNodeSnapshot; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;