Class and package refactoring with unit tests.

This commit is contained in:
Winston Li
2014-11-02 18:41:18 +00:00
parent c2fea2ee06
commit 2d8580f02b
22 changed files with 815 additions and 202 deletions
+3 -109
View File
@@ -1,120 +1,14 @@
package uk.ac.ic;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jgit.api.AddCommand;
import org.eclipse.jgit.api.CommitCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.http.server.GitServlet;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.transport.ReceivePack;
import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.UploadPack;
import org.eclipse.jgit.transport.resolver.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import uk.ac.ic.application.WLGitBridgeApplication;
/**
* Created by Winston on 01/11/14.
*/
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");
server.setHandler(servletContextHandler);
GitServlet servlet = new GitServlet();
servlet.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
@Override
public Repository open(HttpServletRequest httpServletRequest, String s) throws RepositoryNotFoundException, ServiceNotAuthorizedException, ServiceNotEnabledException, ServiceMayNotContinueException {
System.out.println(s);
File workspace = new File("/Users/Roxy/git-test/hello");
workspace.mkdirs();
Repository r = null;
try {
r = new FileRepositoryBuilder().setWorkTree(workspace).build();
} catch (IOException e) {
e.printStackTrace();
}
// if the repository doesn't exist, create it
if (!r.getObjectDatabase().exists()) {
try {
r.create();
} catch (IOException e) {
e.printStackTrace();
}
try {
// import initial content
Git git = new Git(r);
AddCommand cmd = git.add();
cmd.addFilepattern(".");
cmd.call();
CommitCommand co = git.commit();
co.setAuthor("Winston","wl3912@ic.ac.uk");
co.setMessage("Initial import of the existing contents");
co.call();
} catch (GitAPIException e) {
e.printStackTrace();
}
}
return r;
}
});
servlet.setReceivePackFactory(new ReceivePackFactory<HttpServletRequest>() {
@Override
public ReceivePack create(HttpServletRequest httpServletRequest, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
return new ReceivePack(repository);
}
});
servlet.setUploadPackFactory(new UploadPackFactory<HttpServletRequest>() {
@Override
public UploadPack create(HttpServletRequest httpServletRequest, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
return new UploadPack(repository);
}
});
servlet.init(new ServletConfig() {
@Override
public String getServletName() {
return "";
}
@Override
public ServletContext getServletContext() {
return servletContextHandler.getServletContext();
}
@Override
public String getInitParameter(String s) {
return "default_init_parameter";
}
@Override
public Enumeration<String> getInitParameterNames() {
return null;
}
});
servletContextHandler.addServlet(new ServletHolder(servlet), "/*");
server.start();
server.join();
public static void main(String[] args) {
new WLGitBridgeApplication(args).run();
}
}
@@ -1,10 +0,0 @@
package uk.ac.ic;
/**
* Created by Winston on 02/11/14.
*/
public class WGBServer {
}
@@ -0,0 +1,26 @@
package uk.ac.ic.application;
import javax.servlet.ServletException;
/**
* Created by Winston on 02/11/14.
*/
public class WLGitBridgeApplication {
public WLGitBridgeApplication(String[] args) {
parseArguments(args);
}
public void run() {
try {
new WLGitBridgeServer(8080).start();
} catch (ServletException e) {
e.printStackTrace();
}
}
private void parseArguments(String[] args) {
}
}
@@ -0,0 +1,48 @@
package uk.ac.ic.application;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import uk.ac.ic.git.WLGitServlet;
import javax.servlet.ServletException;
import java.net.BindException;
/**
* Created by Winston on 02/11/14.
*/
public class WLGitBridgeServer {
private final Server jettyServer;
private final int port;
public WLGitBridgeServer(final int port) throws ServletException {
this.port = port;
jettyServer = new Server(port);
configureJettyServer();
}
public void start() {
try {
jettyServer.start();
} catch (BindException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
try {
jettyServer.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void configureJettyServer() throws ServletException {
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(new ServletHolder(new WLGitServlet(servletContextHandler)), "/*");
jettyServer.setHandler(servletContextHandler);
}
}
@@ -0,0 +1,20 @@
package uk.ac.ic.git;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jgit.http.server.GitServlet;
import javax.servlet.ServletException;
/**
* Created by Winston on 02/11/14.
*/
public class WLGitServlet extends GitServlet {
public WLGitServlet(ServletContextHandler servletContextHandler) throws ServletException {
setRepositoryResolver(new WLRepositoryResolver());
setReceivePackFactory(new WLReceivePackFactory());
setUploadPackFactory(new WLUploadPackFactory());
init(new WLGitServletConfig(servletContextHandler));
}
}
@@ -0,0 +1,42 @@
package uk.ac.ic.git;
import org.eclipse.jetty.servlet.ServletContextHandler;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import java.util.Enumeration;
/**
* Created by Winston on 02/11/14.
*/
public class WLGitServletConfig implements ServletConfig {
private static final String SERVLET_NAME = "git-servlet";
private ServletContext servletContext;
public WLGitServletConfig(ServletContextHandler servletContextHandler) {
servletContext = servletContextHandler.getServletContext();
}
@Override
public String getServletName() {
return SERVLET_NAME;
}
@Override
public ServletContext getServletContext() {
return servletContext;
}
@Override
public String getInitParameter(String s) {
return null;
}
@Override
public Enumeration<String> getInitParameterNames() {
return null;
}
}
@@ -0,0 +1,21 @@
package uk.ac.ic.git;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ReceivePack;
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import javax.servlet.http.HttpServletRequest;
/**
* Created by Winston on 02/11/14.
*/
public class WLReceivePackFactory implements ReceivePackFactory<HttpServletRequest> {
@Override
public ReceivePack create(HttpServletRequest httpServletRequest, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
return new ReceivePack(repository);
}
}
@@ -0,0 +1,64 @@
package uk.ac.ic.git;
import org.eclipse.jgit.api.AddCommand;
import org.eclipse.jgit.api.CommitCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.resolver.RepositoryResolver;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
/**
* Created by Winston on 02/11/14.
*/
public class WLRepositoryResolver implements RepositoryResolver<HttpServletRequest> {
@Override
public Repository open(HttpServletRequest httpServletRequest, String s) throws RepositoryNotFoundException, ServiceNotAuthorizedException, ServiceNotEnabledException, ServiceMayNotContinueException {
System.out.println(s);
File workspace = new File("/Users/Roxy/git-test/hello");
workspace.mkdirs();
Repository r = null;
try {
r = new FileRepositoryBuilder().setWorkTree(workspace).build();
} catch (IOException e) {
e.printStackTrace();
}
// if the repository doesn't exist, create it
if (!r.getObjectDatabase().exists()) {
try {
r.create();
} catch (IOException e) {
e.printStackTrace();
}
try {
// import initial content
Git git = new Git(r);
AddCommand cmd = git.add();
cmd.addFilepattern(".");
cmd.call();
CommitCommand co = git.commit();
co.setAuthor("Winston", "wl3912@ic.ac.uk");
co.setMessage("Initial import of the existing contents");
co.call();
} catch (GitAPIException e) {
e.printStackTrace();
}
}
return r;
}
}
@@ -0,0 +1,19 @@
package uk.ac.ic.git;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.UploadPack;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
import javax.servlet.http.HttpServletRequest;
/**
* Created by Winston on 02/11/14.
*/
public class WLUploadPackFactory implements UploadPackFactory<HttpServletRequest> {
@Override
public UploadPack create(HttpServletRequest httpServletRequest, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
return new UploadPack(repository);
}
}