diff --git a/pom.xml b/pom.xml
index 3e9af9f..0df2058 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,43 +90,5 @@
gson
2.11.0
-
-
- org.eclipse.sisu
- org.eclipse.sisu.plexus
- 0.9.0.M3
-
-
-
-
-
- org.apache.maven
- maven-embedder
- 3.9.9
-
-
-
-
- org.apache.maven
- maven-slf4j-provider
- 3.9.9
-
-
-
-
- org.apache.maven
- maven-core
- 3.9.9
-
-
-
-
- org.apache.maven
- maven-compat
- 3.9.9
-
-
-
-
diff --git a/src/main/java/de/devloop/mavor/servlet/Download.java b/src/main/java/de/devloop/mavor/servlet/Download.java
index ff531d6..430d215 100644
--- a/src/main/java/de/devloop/mavor/servlet/Download.java
+++ b/src/main/java/de/devloop/mavor/servlet/Download.java
@@ -1,11 +1,16 @@
package de.devloop.mavor.servlet;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
-import java.io.PrintStream;
-
-import org.apache.maven.cli.MavenCli;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.stream.Collectors;
import de.devloop.mavor.AuthenticatedServlet;
+import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
@@ -16,29 +21,99 @@ public class Download extends AuthenticatedServlet {
private static final String PARAMETER_SITE = "site";
private static final String PARAMETER_GROUP_ID = "groupId";
- private static final String PARAMETER_ARTEFACT_ID = "artefactId";
+ private static final String PARAMETER_ARTIFACT_ID = "artifactId";
private static final String PARAMETER_VERSION = "version";
+ private static final String PARAMETER_POM = "pom";
+ private static final String PARAMETER_TYPE = "type";
+ private static final String MAVEN_CMD = "/usr/bin/mvn";
private static final String TEMP_DIR = "/home/damage/Temp/mavor";
@Override
protected void doAuthenticatedGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- String site = req.getParameter(PARAMETER_SITE);
- String groupId = req.getParameter(PARAMETER_GROUP_ID);
- String artifactId = req.getParameter(PARAMETER_ARTEFACT_ID);
- String version = req.getParameter(PARAMETER_VERSION);
+ // implement a lot of checks:
+ // NPE, required parameters not given
- String artifact = String.format("%s:%s:%s", groupId, artifactId, version);
+ String type = req.getParameter(PARAMETER_TYPE);
+ if (type.equals("artifact")) {
+ String site = req.getParameter(PARAMETER_SITE);
+ String groupId = req.getParameter(PARAMETER_GROUP_ID);
+ String artifactId = req.getParameter(PARAMETER_ARTIFACT_ID);
+ String version = req.getParameter(PARAMETER_VERSION);
+ generatePomXmlByArtifact(site, groupId, artifactId, version);
+ } else if (type.equals("pom")) {
+ writePomXml(req.getParameter(PARAMETER_POM));
+ } else {
+ throw new ServletException("Unknown download type: " + type);
+ }
- PrintStream out = new PrintStream(resp.getOutputStream());
+ ExecutionResult executionResult;
+ try {
+ executionResult = executeMaven();
+ } catch (InterruptedException e) {
+ throw new ServletException("Running maven failed", e);
+ }
- MavenCli cli = new MavenCli();
- System.setProperty("maven.multiModuleProjectDirectory", "/home/damage/Temp");
- // TODO: does not work -> generate pom.xml in temp dir and use dependency:copy-dependencies?
- System.setProperty("maven.repo.remote", site);
- cli.doMain(new String[]{"dependency:copy", "-Dartifact=" + artifact, "-DoutputDirectory=/home/damage/Temp"}, "/home/damage/Temp", out, out);
+ req.setAttribute("stdout", executionResult.stdout);
+ req.setAttribute("stderr", executionResult.stderr);
+ req.setAttribute("exitcode", executionResult.exitCode);
- //RequestDispatcher view = req.getRequestDispatcher("/download.jsp");
- //view.forward(req, resp);
+ RequestDispatcher view = req.getRequestDispatcher("/download.jsp");
+ view.forward(req, resp);
}
-}
+
+ private ExecutionResult executeMaven() throws IOException, InterruptedException {
+ Process mvnProcess = Runtime.getRuntime().exec(MAVEN_CMD + " dependency:copy-dependencies -DoutputDirectory=" + TEMP_DIR, null, new File(TEMP_DIR));
+ String stdout = new String(mvnProcess.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
+ String stderr = new String(mvnProcess.getErrorStream().readAllBytes(), StandardCharsets.UTF_8);
+
+ ExecutionResult executionResult = new ExecutionResult();
+
+ executionResult.exitCode = mvnProcess.waitFor();
+ executionResult.stdout = stdout;
+ executionResult.stderr = stderr;
+ return executionResult;
+ }
+
+ private void generatePomXmlByArtifact(String site, String groupId, String artifactId, String version) throws IOException {
+ String pomXml = getResourceFileAsString("pomstub.xml");
+ pomXml = pomXml.replace("{site-id}", "foo");
+ pomXml = pomXml.replace("{site-url}", site);
+ pomXml = pomXml.replace("{group-id}", groupId);
+ pomXml = pomXml.replace("{artifact-id}", artifactId);
+ pomXml = pomXml.replace("{version}", version);
+ writePomXml(pomXml);
+ }
+
+ private void writePomXml(String pomXml) throws IOException {
+ File pomXmlFile = new File(TEMP_DIR + "/pom.xml");
+ pomXmlFile.delete();
+ FileWriter fileWriter = new FileWriter(pomXmlFile);
+ fileWriter.write(pomXml);
+ fileWriter.close();
+ }
+
+ /**
+ * Reads given resource file as a string.
+ *
+ * @param fileName path to the resource file
+ * @return the file's contents
+ * @throws IOException if read fails for any reason
+ */
+ static String getResourceFileAsString(String fileName) throws IOException {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ try (InputStream is = classLoader.getResourceAsStream(fileName)) {
+ if (is == null) return null;
+ try (InputStreamReader isr = new InputStreamReader(is);
+ BufferedReader reader = new BufferedReader(isr)) {
+ return reader.lines().collect(Collectors.joining(System.lineSeparator()));
+ }
+ }
+ }
+
+ private class ExecutionResult {
+ public int exitCode;
+ public String stdout;
+ public String stderr;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/pomstub.xml b/src/main/resources/pomstub.xml
new file mode 100644
index 0000000..1729ef7
--- /dev/null
+++ b/src/main/resources/pomstub.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ de.devloop
+ mavor-download
+ 0.0.7
+
+
+
+ {site-id}
+ {site-url}
+
+
+
+
+
+ {group-id}
+ {artifact-id}
+ {version}
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/download.jsp b/src/main/webapp/download.jsp
index b1607c6..de13a59 100644
--- a/src/main/webapp/download.jsp
+++ b/src/main/webapp/download.jsp
@@ -2,7 +2,8 @@
<%@ page isELIgnored="false" %>
- Downloading ${foo}
- logout
+ Output:
+ ${stdout}
+ logout | back
diff --git a/src/main/webapp/main.jsp b/src/main/webapp/main.jsp
index 5bc3d79..76040b2 100644
--- a/src/main/webapp/main.jsp
+++ b/src/main/webapp/main.jsp
@@ -4,10 +4,16 @@
Hello ${username}
+
logout