Jelajahi Sumber

Added exception if the push request returned instantly with an error.

Winston Li 12 tahun lalu
induk
melakukan
da5b661858
18 mengubah file dengan 63 tambahan dan 35 penghapusan
  1. 3 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackContents.java
  2. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java
  3. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java
  4. 2 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java
  5. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/exception/ForcedPushException.java
  6. 11 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java
  7. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getdoc/exception/InvalidProjectException.java
  8. 2 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackContents.java
  9. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/PostbackManager.java
  10. 1 2
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequest.java
  11. 16 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequestResult.java
  12. 4 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidFilesException.java
  13. 4 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidProjectException.java
  14. 8 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/OutOfDateException.java
  15. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostException.java
  16. 1 5
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/SnapshotPostExceptionBuilder.java
  17. 4 3
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/UnexpectedErrorException.java
  18. 1 1
      services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java

+ 3 - 2
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 {

+ 1 - 1
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();
             }

+ 1 - 1
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;

+ 2 - 3
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 {

+ 1 - 1
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;

+ 11 - 2
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. */

+ 1 - 1
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;
 

+ 2 - 1
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 {

+ 1 - 1
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;

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

@@ -32,8 +32,7 @@ public class SnapshotPushRequest extends SnapshotAPIRequest<SnapshotPushRequestR
 
     @Override
     protected SnapshotPushRequestResult parseResponse(JsonElement json) throws FailedConnectionException {
-        System.out.println(json);
-        return null;
+        return new SnapshotPushRequestResult(this, json);
     }
 
 }

+ 16 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/SnapshotPushRequestResult.java

@@ -1,6 +1,7 @@
 package uk.ac.ic.wlgitbridge.writelatex.api.request.push;
 
 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;
@@ -10,13 +11,27 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionExc
  */
 public class SnapshotPushRequestResult extends Result {
 
+    private boolean success;
+
     public SnapshotPushRequestResult(Request request, JsonElement json) throws FailedConnectionException {
         super(request, json);
     }
 
+    public boolean wasSuccessful() {
+        return success;
+    }
+
     @Override
     public void fromJSON(JsonElement json) {
-
+        JsonObject responseObject = json.getAsJsonObject();
+        String code = responseObject.get("code").getAsString();
+        if (code.equals("accepted")) {
+            success = true;
+        } else if (code.equals("outOfDate")) {
+            success = false;
+        } else {
+            throw new RuntimeException();
+        }
     }
 
 }

+ 4 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidFilesException.java → services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/push/exception/InvalidFilesException.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 InvalidFilesException extends SnapshotPostException {
 
     @Override
     public String getMessage() {
-        return null;
+        return "invalid files";
     }
 
     @Override
     public List<String> getDescriptionLines() {
-        return null;
+        return Arrays.asList("invalid files, change ext or something");
     }
 
     @Override

+ 4 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java → 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<String> getDescriptionLines() {
-        return null;
+        return Arrays.asList("your project is too big");
     }
 
     @Override

+ 8 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java → 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<String> getDescriptionLines() {
-        return null;
+        return Arrays.asList("out of date (shouldn't print this)");
     }
 
     @Override

+ 1 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java → 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;

+ 1 - 5
services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPostExceptionBuilder.java → 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;
 

+ 4 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java → 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<String> getDescriptionLines() {
-        return null;
+        return Arrays.asList("writelatex error");
     }
 
     @Override

+ 1 - 1
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;