package org.vaadin.mideaas.frontend;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.DefaultInvoker;
import org.apache.maven.shared.invoker.InvocationOutputHandler;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.MavenInvocationException;
import org.vaadin.mideaas.model.User;
// TODO: is this class needed anywhere?
public class MavenUtil {
private static File mavenHome;
private static final InvocationOutputHandler emptyHandler = new InvocationOutputHandler() {
@Override
public void consumeLine(String arg0) {
// Nothing.
}
};
public static void setMavenHome(File mavenHome) {
MavenUtil.mavenHome = mavenHome;
}
public static File getMavenHome() {
return mavenHome;
}
public static void execute(File dir, String command, Properties props, boolean logToStdOut) throws MavenInvocationException {
execute(dir, Collections.singletonList(command), props, logToStdOut);
}
public static void execute(File dir, List<String> commands, Properties props, boolean logToStdOut) throws MavenInvocationException {
InvocationRequest request = new DefaultInvocationRequest();
request.setBaseDirectory(dir);
request.setGoals(commands);
if (props!=null) {
request.setProperties(props);
}
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(mavenHome);
if (!logToStdOut) {
request.setOutputHandler(emptyHandler);
}
invoker.execute(request);
}
public static String getClassPath(File projectDir) {
InvocationRequest request = new DefaultInvocationRequest();
request.setBaseDirectory(projectDir);
request.setGoals(Collections.singletonList("dependency:build-classpath"));
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(mavenHome);
ClassPathListener cpl = new ClassPathListener();
invoker.setOutputHandler(cpl);
try {
invoker.execute(request);
} catch (MavenInvocationException e) {
e.printStackTrace();
}
return cpl.classPath;
}
private static final class ClassPathListener implements
InvocationOutputHandler {
private boolean nextIsIt = false;
private String classPath;
@Override
public void consumeLine(String msg) {
if (classPath != null) {
return;
}
if (nextIsIt) {
classPath = msg;
} else if ("[INFO] Dependencies classpath:".equals(msg)) {
nextIsIt = true;
}
}
}
public static String targetDirFor(User u) {
//System.out.println( "userID: " + u.getUserId());
return "target-"+u.getUserId();
}
}