From abc698085a064d052f6ca0928c9ffa76f740fb4f Mon Sep 17 00:00:00 2001 From: Winston Li Date: Sun, 16 Nov 2014 17:57:53 +0000 Subject: [PATCH] Added handlers for resources and SnapshotPushPostback. --- .../SnapshotPushPostbackHandler.java | 33 +++++++++++++++++++ .../application/WLGitBridgeServer.java | 23 +++++++++++-- .../uk/ac/ic/wlgitbridge/bridge/RawFile.java | 11 +++++++ .../bridge/WriteLatexDataSource.java | 8 ++--- .../git/handler/hook/WriteLatexPutHook.java | 4 +-- .../hook/exception/ForcedPushException.java | 2 +- .../{model => }/InvalidFilesException.java | 2 +- .../{model => }/InvalidProjectException.java | 2 +- .../{model => }/OutOfDateException.java | 2 +- .../{model => }/SnapshotPostException.java | 2 +- .../{model => }/UnexpectedErrorException.java | 2 +- .../request/getforversion/SnapshotFile.java | 23 ++++++------- .../writelatex/filestore/RepositoryFile.java | 28 ++++++++++++++++ .../writelatex/filestore/blob/ByteBlob.java | 2 +- .../filestore/blob/RawFileBlob.java | 14 ++++++++ .../filestore/blob/SnapshotFileBlob.java | 14 -------- .../writelatex/filestore/node/BlobNode.java | 14 ++++---- .../writelatex/filestore/node/FileNode.java | 20 +++++++++-- .../filestore/node/WLDirectoryNode.java | 23 +++++++++++-- .../filestore/store/WLFileStore.java | 5 +++ .../writelatex/model/WLDataModel.java | 17 ++++++---- 21 files changed, 189 insertions(+), 62 deletions(-) create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RawFile.java rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{model => }/InvalidFilesException.java (86%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{model => }/InvalidProjectException.java (86%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{model => }/OutOfDateException.java (86%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{model => }/SnapshotPostException.java (83%) rename services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/{model => }/UnexpectedErrorException.java (86%) create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/RepositoryFile.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/RawFileBlob.java delete mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/SnapshotFileBlob.java 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 new file mode 100644 index 0000000000..9be9605b6d --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java @@ -0,0 +1,33 @@ +package uk.ac.ic.wlgitbridge.application; + +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Created by Winston on 16/11/14. + */ +public class SnapshotPushPostbackHandler extends AbstractHandler { + + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { +// System.out.println("handling"); +// System.out.println(request.getMethod()); +// response.setContentType("text/html;charset=utf-8"); +// response.setStatus(HttpServletResponse.SC_OK); + baseRequest.setHandled(false); +// System.out.println("method: " + request.getMethod()); +// System.out.println("pathInfo: " + request.getPathInfo()); +// System.out.println("contextPath: " + request.getContextPath()); +// System.out.println("pathtranslated: " + request.getPathTranslated()); +// System.out.println("queryString: " + request.getQueryString()); +// System.out.println("remoteUser: " + request.getRemoteUser()); +// System.out.println("requestURI: " + request.getRequestURI()); +// response.getWriter().println("

Hello World

"); + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java index 0972a61c9f..3c7560eac2 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java @@ -1,12 +1,15 @@ package uk.ac.ic.wlgitbridge.application; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.log.Log; import uk.ac.ic.wlgitbridge.application.jetty.NullLogger; -import uk.ac.ic.wlgitbridge.git.servlet.WLGitServlet; import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException; +import uk.ac.ic.wlgitbridge.git.servlet.WLGitServlet; import uk.ac.ic.wlgitbridge.writelatex.model.WLDataModel; import javax.servlet.ServletException; @@ -61,6 +64,16 @@ public class WLGitBridgeServer { } private void configureJettyServer() throws ServletException, InvalidRootDirectoryPathException { + HandlerCollection handlers = new HandlerCollection(); + handlers.setHandlers(new Handler[] { + initResourceHandler(), + new SnapshotPushPostbackHandler(), + initGitHandler() + }); + jettyServer.setHandler(handlers); + } + + private Handler initGitHandler() throws ServletException, InvalidRootDirectoryPathException { final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); servletContextHandler.setContextPath("/"); servletContextHandler.addServlet( @@ -68,7 +81,13 @@ public class WLGitBridgeServer { new WLGitServlet(servletContextHandler, new WLDataModel(rootGitDirectoryPath), rootGitDirectoryPath)), "/*" ); - jettyServer.setHandler(servletContextHandler); + return servletContextHandler; + } + + private Handler initResourceHandler() { + ResourceHandler resourceHandler = new ResourceHandler(); + resourceHandler.setResourceBase(rootGitDirectoryPath); + return resourceHandler; } } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RawFile.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RawFile.java new file mode 100644 index 0000000000..7d34c90aa6 --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/RawFile.java @@ -0,0 +1,11 @@ +package uk.ac.ic.wlgitbridge.bridge; + +/** + * Created by Winston on 16/11/14. + */ +public interface RawFile { + + public String getPath(); + public byte[] getContents(); + +} 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 b803e9c7d4..3a53fb42b9 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.model.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; import java.util.List; @@ -11,8 +11,8 @@ import java.util.List; */ public interface WriteLatexDataSource { - public boolean repositoryExists(String name) throws FailedConnectionException; - public List getWritableRepositories(String name) throws FailedConnectionException, InvalidProjectException; - public void putDirectoryContentsToProjectWithName(String name, RawDirectoryContents directoryContents) throws SnapshotPostException; + public boolean repositoryExists(String projectName) throws FailedConnectionException; + public List getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException; + public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents) throws SnapshotPostException; } 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 6fee4d0919..0639a363e9 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 @@ -8,8 +8,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.model.OutOfDateException; -import uk.ac.ic.wlgitbridge.writelatex.model.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.OutOfDateException; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; import java.io.IOException; import java.util.Collection; 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 f3a6e384bb..e78e1531b7 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,6 +1,6 @@ package uk.ac.ic.wlgitbridge.git.handler.hook.exception; -import uk.ac.ic.wlgitbridge.writelatex.model.SnapshotPostException; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; import java.util.Arrays; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidFilesException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidFilesException.java similarity index 86% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidFilesException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidFilesException.java index 9a40f086f4..77bc3694c7 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidFilesException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidFilesException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex.model; +package uk.ac.ic.wlgitbridge.writelatex; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidProjectException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java similarity index 86% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidProjectException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java index 9c5482ad5a..5763cd1948 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/InvalidProjectException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/InvalidProjectException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex.model; +package uk.ac.ic.wlgitbridge.writelatex; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/OutOfDateException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java similarity index 86% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/OutOfDateException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java index b171c06415..a4944d4497 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/OutOfDateException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/OutOfDateException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex.model; +package uk.ac.ic.wlgitbridge.writelatex; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/SnapshotPostException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java similarity index 83% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/SnapshotPostException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java index 1edaf1a041..3b716e0ad6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/SnapshotPostException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotPostException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex.model; +package uk.ac.ic.wlgitbridge.writelatex; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/UnexpectedErrorException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java similarity index 86% rename from services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/UnexpectedErrorException.java rename to services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java index 0bad759ce3..9775001f60 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/UnexpectedErrorException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/UnexpectedErrorException.java @@ -1,4 +1,4 @@ -package uk.ac.ic.wlgitbridge.writelatex.model; +package uk.ac.ic.wlgitbridge.writelatex; import java.util.List; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotFile.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotFile.java index d1bffeaaed..7afae5143a 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotFile.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/api/request/getforversion/SnapshotFile.java @@ -2,19 +2,14 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion; import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import uk.ac.ic.wlgitbridge.bridge.RawFile; import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.concurrent.ExecutionException; - /** * Created by Winston on 06/11/14. */ -public class SnapshotFile implements JSONSource { +public class SnapshotFile implements JSONSource, RawFile { protected byte[] contents; private String path; @@ -24,18 +19,20 @@ public class SnapshotFile implements JSONSource { } @Override - public void fromJSON(JsonElement json) throws FailedConnectionException { - JsonArray jsonArray = json.getAsJsonArray(); - getContentsFromJSON(jsonArray); - getPathFromJSON(jsonArray); + public String getPath() { + return path; } + @Override public byte[] getContents() { return contents; } - public String getPath() { - return path; + @Override + public void fromJSON(JsonElement json) throws FailedConnectionException { + JsonArray jsonArray = json.getAsJsonArray(); + getContentsFromJSON(jsonArray); + getPathFromJSON(jsonArray); } protected void getContentsFromJSON(JsonArray jsonArray) throws FailedConnectionException { diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/RepositoryFile.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/RepositoryFile.java new file mode 100644 index 0000000000..c5b73c5aed --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/RepositoryFile.java @@ -0,0 +1,28 @@ +package uk.ac.ic.wlgitbridge.writelatex.filestore; + +import uk.ac.ic.wlgitbridge.bridge.RawFile; + +import java.util.Map.Entry; + +/** + * Created by Winston on 16/11/14. + */ +public class RepositoryFile implements RawFile { + + private final Entry fileContents; + + public RepositoryFile(Entry fileContents) { + this.fileContents = fileContents; + } + + @Override + public String getPath() { + return fileContents.getKey(); + } + + @Override + public byte[] getContents() { + return fileContents.getValue(); + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java index 7b0f6cb514..b590b7c826 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java @@ -3,7 +3,7 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.blob; /** * Created by Winston on 14/11/14. */ -public abstract class ByteBlob extends Blob { +public class ByteBlob extends Blob { private final byte[] contents; diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/RawFileBlob.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/RawFileBlob.java new file mode 100644 index 0000000000..97f970e2b0 --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/RawFileBlob.java @@ -0,0 +1,14 @@ +package uk.ac.ic.wlgitbridge.writelatex.filestore.blob; + +import uk.ac.ic.wlgitbridge.bridge.RawFile; + +/** + * Created by Winston on 14/11/14. + */ +public class RawFileBlob extends ByteBlob { + + public RawFileBlob(RawFile rawFile) { + super(rawFile.getContents()); + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/SnapshotFileBlob.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/SnapshotFileBlob.java deleted file mode 100644 index 6ecd13e4ca..0000000000 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/SnapshotFileBlob.java +++ /dev/null @@ -1,14 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.filestore.blob; - -import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotFile; - -/** - * Created by Winston on 14/11/14. - */ -public class SnapshotFileBlob extends ByteBlob { - - public SnapshotFileBlob(SnapshotFile snapshotFile) { - super(snapshotFile.getContents()); - } - -} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java index 58964a66e9..15561871dd 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java @@ -1,9 +1,9 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.node; -import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; -import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotFile; +import uk.ac.ic.wlgitbridge.bridge.RawFile; import uk.ac.ic.wlgitbridge.writelatex.filestore.blob.Blob; -import uk.ac.ic.wlgitbridge.writelatex.filestore.blob.SnapshotFileBlob; +import uk.ac.ic.wlgitbridge.writelatex.filestore.blob.ByteBlob; +import uk.ac.ic.wlgitbridge.writelatex.filestore.blob.RawFileBlob; import java.util.Map; @@ -12,11 +12,11 @@ import java.util.Map; */ public class BlobNode extends FileNode { - private SnapshotFileBlob blob; + private ByteBlob blob; - public BlobNode(SnapshotFile snapshotFile, Map context) throws FailedConnectionException { - super(snapshotFile, context); - blob = new SnapshotFileBlob(snapshotFile); + public BlobNode(RawFile rawFile, Map context) { + super(rawFile, context); + blob = new RawFileBlob(rawFile); } @Override diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/FileNode.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/FileNode.java index 2e9890796d..4d8bf71f8c 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/FileNode.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/FileNode.java @@ -1,7 +1,7 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.node; +import uk.ac.ic.wlgitbridge.bridge.RawFile; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; -import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotFile; import uk.ac.ic.wlgitbridge.writelatex.filestore.blob.Blob; import java.io.File; @@ -18,8 +18,12 @@ public abstract class FileNode { private final String filePath; private final boolean unchanged; - public FileNode(SnapshotFile snapshotFile, Map context) throws FailedConnectionException { - filePath = snapshotFile.getPath(); + public FileNode(RawFile file, Map context) { + this(file.getPath(), context); + } + + public FileNode(String filePath, Map context) { + this.filePath = filePath; FileNode currentFileNode = context.get(filePath); unchanged = currentFileNode != null && equals(currentFileNode); } @@ -45,4 +49,14 @@ public abstract class FileNode { protected abstract Blob getBlob(); + @Override + public boolean equals(Object obj) { + return obj instanceof FileNode && filePath.equals(((FileNode) obj).filePath); + } + + @Override + public String toString() { + return String.valueOf(unchanged); + } + } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java index 453ef27ec8..cd7085ffed 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java @@ -1,8 +1,10 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.node; +import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotAttachment; import uk.ac.ic.wlgitbridge.writelatex.api.request.getforversion.SnapshotFile; +import uk.ac.ic.wlgitbridge.writelatex.filestore.RepositoryFile; import uk.ac.ic.wlgitbridge.writelatex.filestore.store.FileIndexStore; import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot; @@ -10,6 +12,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; /** * Created by Winston on 08/11/14. @@ -20,8 +23,12 @@ public class WLDirectoryNode { private FileIndexStore fileIndexStore; public WLDirectoryNode() { - fileNodeTable = new HashMap(); - fileIndexStore = new FileIndexStore(); + this(new HashMap(), new FileIndexStore()); + } + + public WLDirectoryNode(Map fileNodeTable, FileIndexStore fileIndexStore) { + this.fileNodeTable = fileNodeTable; + this.fileIndexStore = fileIndexStore; } public List updateFromSnapshot(Snapshot snapshot) throws FailedConnectionException { @@ -36,12 +43,22 @@ public class WLDirectoryNode { AttachmentNode attachmentNode = new AttachmentNode(att, fileNodeTable, fileIndexStore); updatedFileNodeTable.put(attachmentNode.getFilePath(), attachmentNode); } - fileNodeTable = updatedFileNodeTable; LinkedList fileNodes = new LinkedList(updatedFileNodeTable.values()); + fileNodeTable = updatedFileNodeTable; fileIndexStore = new FileIndexStore(fileNodes); return fileNodes; } + public WLDirectoryNode createFromRawDirectoryContents(RawDirectoryContents rawDirectoryContents) { + Map candidateFileNodeTable = new HashMap(); + for (Entry fileContents : rawDirectoryContents.getFileContentsTable().entrySet()) { + BlobNode blobNode = new BlobNode(new RepositoryFile(fileContents), fileNodeTable); + candidateFileNodeTable.put(blobNode.getFilePath(), blobNode); + } + return new WLDirectoryNode(candidateFileNodeTable, + new FileIndexStore(new LinkedList(candidateFileNodeTable.values()))); + } + @Override public String toString() { return fileNodeTable.toString(); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java index 67f600027d..d7ab4c7bf8 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java @@ -1,5 +1,6 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.store; +import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents; import uk.ac.ic.wlgitbridge.bridge.WritableRepositoryContents; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; @@ -50,6 +51,10 @@ public class WLFileStore { return writableRepositories; } + public WLDirectoryNode createCandidateDirectoryNodeForProjectWithContents(WLProject project, RawDirectoryContents directoryContents) { + return getDirectoryNodeForProjectName(project.getName()).createFromRawDirectoryContents(directoryContents); + } + private WLDirectoryNode getDirectoryNodeForProjectName(String projectName) { WLDirectoryNode directoryNode = fileStore.get(projectName); if (directoryNode == null) { 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 8793329667..02c28e0eda 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 @@ -3,9 +3,11 @@ package uk.ac.ic.wlgitbridge.writelatex.model; import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents; import uk.ac.ic.wlgitbridge.bridge.WritableRepositoryContents; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotPostException; 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.filestore.node.WLDirectoryNode; import uk.ac.ic.wlgitbridge.writelatex.filestore.store.WLFileStore; import java.util.Arrays; @@ -27,8 +29,8 @@ public class WLDataModel implements WriteLatexDataSource { } @Override - public boolean repositoryExists(String name) throws FailedConnectionException { - SnapshotGetDocRequest snapshotGetDocRequest = new SnapshotGetDocRequest(name); + public boolean repositoryExists(String projectName) throws FailedConnectionException { + SnapshotGetDocRequest snapshotGetDocRequest = new SnapshotGetDocRequest(projectName); snapshotGetDocRequest.request(); try { snapshotGetDocRequest.getResult().getVersionID(); @@ -39,14 +41,15 @@ public class WLDataModel implements WriteLatexDataSource { } @Override - public List getWritableRepositories(String name) throws FailedConnectionException, InvalidProjectException { - return updateProjectWithName(name); + public List getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException { + return updateProjectWithName(projectName); } @Override - public void putDirectoryContentsToProjectWithName(String name, RawDirectoryContents directoryContents) throws SnapshotPostException { - System.out.println("Pushing project with name: " + name); - System.out.println(directoryContents.getFileContentsTable()); + public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents) throws SnapshotPostException { + WLDirectoryNode dn = fileStore.createCandidateDirectoryNodeForProjectWithContents(getProjectWithName(projectName), directoryContents); + System.out.println("Pushing project with name: " + projectName); + System.out.println(dn); throw new SnapshotPostException() { @Override