You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by GitBox <gi...@apache.org> on 2019/01/15 17:15:37 UTC
[karaf-cave] Diff for: [GitHub] jbonofre merged pull request #21:
[KARAF-5978] Add Maven repository browsing
diff --git a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/Activator.java b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/Activator.java
index 8d73d64..11c64ac 100644
--- a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/Activator.java
+++ b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/Activator.java
@@ -65,7 +65,7 @@ protected void doStart() throws Exception {
}
this.resolver = MavenResolvers.createMavenResolver(config, pid);
this.alias = alias;
- this.servlet = new CaveMavenServlet(this.resolver, poolSize, realm, downloadRole, uploadRole);
+ this.servlet = new CaveMavenServlet(this.resolver, null, null, poolSize, realm, downloadRole, uploadRole);
this.httpService.registerServlet(this.alias, this.servlet, config, null);
CaveMavenRepositoryListenerImpl repositoryListener = new CaveMavenRepositoryListenerImpl(httpService,
@@ -78,7 +78,6 @@ protected void doStop() {
if (httpService != null) {
try {
httpService.unregister(alias);
- httpService.unregister("/cave/maven/repositories/test");
} catch (Throwable t) {
logger.debug("Exception caught while stopping", t);
} finally {
diff --git a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenRepositoryListenerImpl.java b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenRepositoryListenerImpl.java
index d7af7e3..b8a8edf 100644
--- a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenRepositoryListenerImpl.java
+++ b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenRepositoryListenerImpl.java
@@ -48,7 +48,7 @@ public void addRepository(String name, String location) throws Exception {
config.put("localRepository", location);
config.put("repositories", "file:" + location + "@id=" + name + "@snapshots");
MavenResolver resolver = MavenResolvers.createMavenResolver(config, null);
- CaveMavenServlet servlet = new CaveMavenServlet(resolver, poolSize, realm, downloadRole, uploadRole);
+ CaveMavenServlet servlet = new CaveMavenServlet(resolver, name, location, poolSize, realm, downloadRole, uploadRole);
httpService.registerServlet("/cave/maven/repositories/" + name, servlet, null, null);
}
diff --git a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenServlet.java b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenServlet.java
index 7e56614..71cee8f 100644
--- a/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenServlet.java
+++ b/server/maven/src/main/java/org/apache/karaf/cave/server/maven/CaveMavenServlet.java
@@ -16,11 +16,16 @@
*/
package org.apache.karaf.cave.server.maven;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
@@ -109,12 +114,17 @@
final MavenResolver resolver;
- public CaveMavenServlet(MavenResolver resolver, int threadMaximumPoolSize, String realm, String downloadRole, String uploadRole) {
+ final String name;
+ final String location;
+
+ public CaveMavenServlet(MavenResolver resolver, String name, String location, int threadMaximumPoolSize, String realm, String downloadRole, String uploadRole) {
this.resolver = resolver;
this.threadMaximumPoolSize = threadMaximumPoolSize;
this.realm = realm;
this.downloadRole = downloadRole;
this.uploadRole = uploadRole;
+ this.name = name;
+ this.location = location;
}
//
@@ -324,7 +334,37 @@ public void operationComplete(ArtifactDownloadFuture future) {
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
} else {
- resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ // browsing
+ try {
+ File requested = new File(location, path);
+ if (requested.exists()) {
+ if (requested.isDirectory()) {
+ Writer writer = new OutputStreamWriter(resp.getOutputStream());
+ writer.write("<html>");
+ writer.write("<head><title>Cave Repository " + name + ": " + path + "</title></head>");
+ writer.write("<body>");
+ writer.write("<header><h1>" + path + "</h1></header>");
+ writer.write("<hr/>");
+ writer.write("<main><pre id=\"contents\">");
+ if (!path.isEmpty()) {
+ writer.write("<a href=\"" + req.getRequestURI() + "../\">..</a><br/>");
+ }
+ for (File child : requested.listFiles()) {
+ writer.write("<a href=\"" + req.getRequestURI() + child.getName() + "/\" title=\"" + child.getName() + "\">" + child.getName() + "</a><br/>");
+ }
+ writer.write("</pre><hr/></main>");
+ writer.write("</body></html>");
+ writer.flush();
+ } else {
+ StreamUtils.copy(new FileInputStream(requested), resp.getOutputStream());
+ }
+ } else {
+ resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ }
+ } catch (Exception e) {
+ LOGGER.warn("", e);
+ resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
}
future.release();
try {
diff --git a/server/maven/src/test/java/org/apache/karaf/cave/server/maven/MavenProxyServletTest.java b/server/maven/src/test/java/org/apache/karaf/cave/server/maven/MavenProxyServletTest.java
index d58a9b2..93e648e 100644
--- a/server/maven/src/test/java/org/apache/karaf/cave/server/maven/MavenProxyServletTest.java
+++ b/server/maven/src/test/java/org/apache/karaf/cave/server/maven/MavenProxyServletTest.java
@@ -143,13 +143,13 @@ public void testRepoRegex() {
@Test(expected = InvalidMavenArtifactRequest.class)
public void testConvertNullPath() throws InvalidMavenArtifactRequest {
- CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), null, null, 5, null, null, null);
servlet.convertArtifactPathToCoord(null);
}
@Test
public void testConvertNormalPath() throws InvalidMavenArtifactRequest {
- CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), null, null, 5, null, null, null);
assertEquals("groupId:artifactId:extension:version",servlet.convertArtifactPathToCoord("groupId/artifactId/version/artifactId-version.extension").toString());
assertEquals("group.id:artifactId:extension:version",servlet.convertArtifactPathToCoord("group/id/artifactId/version/artifactId-version.extension").toString());
@@ -166,7 +166,7 @@ public void testConvertNormalPath() throws InvalidMavenArtifactRequest {
@Test
public void testConvertNormalPathWithClassifier() throws InvalidMavenArtifactRequest {
- CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(createResolver(), null, null, 5, null, null, null);
assertEquals("groupId:artifactId:extension:classifier:version",servlet.convertArtifactPathToCoord("groupId/artifactId/version/artifactId-version-classifier.extension").toString());
assertEquals("group.id:artifactId:extension:classifier:version",servlet.convertArtifactPathToCoord("group/id/artifactId/version/artifactId-version-classifier.extension").toString());
@@ -190,7 +190,7 @@ public void testStartServlet() throws Exception {
System.setProperty("karaf.data", new File("target").getCanonicalPath());
try {
MavenResolver resolver = createResolver();
- CaveMavenServlet servlet = new CaveMavenServlet(resolver, 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(resolver, null, null, 5, null, null, null);
servlet.init();
} finally {
if (old != null) {
@@ -370,7 +370,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques
int localPort = ((NetworkConnector) server.getConnectors()[0]).getLocalPort();
// TODO: local repo should point to target/tmp
MavenResolver resolver = createResolver("target/tmp", "http://relevant.not/repo1@id=repo1,http://relevant.not/repo2@id=repo2", "http", "localhost", localPort, "fuse", "fuse", null);
- CaveMavenServlet servlet = new CaveMavenServlet(resolver, 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(resolver, null, null, 5, null, null, null);
AsyncContext context = EasyMock.createMock(AsyncContext.class);
@@ -463,7 +463,7 @@ private void testDownload(Handler serverHandler) throws Exception {
int localPort = ((NetworkConnector) server.getConnectors()[0]).getLocalPort();
// TODO: local repo should point to target/tmp
MavenResolver resolver = createResolver("target/tmp", "http://relevant.not/maven2@id=central", "http", "localhost", localPort, "fuse", "fuse", null);
- CaveMavenServlet servlet = new CaveMavenServlet(resolver, 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(resolver, null, null, 5, null, null, null);
AsyncContext context = EasyMock.createMock(AsyncContext.class);
@@ -667,7 +667,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques
try {
int localPort = ((NetworkConnector) server.getConnectors()[0]).getLocalPort();
MavenResolver resolver = createResolver("target/tmp", "http://relevant.not/maven2@id=central", "http", "localhost", localPort, "fuse", "fuse", null);
- CaveMavenServlet servlet = new CaveMavenServlet(resolver, 5, null, null, null);
+ CaveMavenServlet servlet = new CaveMavenServlet(resolver, null, null,5, null, null, null);
HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class);
EasyMock.expect(request.getPathInfo()).andReturn(path);
With regards,
Apache Git Services