package scribtest; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Map.Entry; @Deprecated public class JavaProcessBuilder { private String jvm; private Collection<String> classpath = new ArrayList<>(); private String javaAgent; private String javaAgentArgs; private String program; private Collection<String> programArgs = new ArrayList<>(); private Map<String, String> systemProps = new HashMap<>(); public JavaProcessBuilder(String jvm, String program) { this.jvm = jvm; this.program = program; } public JavaProcessBuilder(String program) { this("java", program); } public String getJvm() { return jvm; } public void setJvm(String jvm) { this.jvm = jvm; } public void setProgram(String program) { this.program = program; } public String getProgram() { return program; } public void appendClasspath(String param) { classpath.add(param); } public void appendProgramArgument(String arg) { programArgs.add(arg); } public void setJavaAgent(String param) { this.javaAgent = param; } public String getJavaAgent() { return javaAgent; } public void setJavaAgentArgs(String javaAgentArgs) { this.javaAgentArgs = javaAgentArgs; } public String getJavaAgentArgs() { return javaAgentArgs; } public void setSystemProperty(String key) { setSystemProperty(key, null); } public void setSystemProperty(String key, String value) { systemProps.put(key, value); } public void unsetSystemProperty(String key) { systemProps.remove(key); } private String buildClasspath() { return ExecUtil.join(File.pathSeparator, classpath); } private String buildJavaAgent() { StringBuilder builder = new StringBuilder("-javaagent:"); builder.append(javaAgent); if (javaAgentArgs != null) { builder.append('='); builder.append(javaAgentArgs); } return builder.toString(); } public String[] build() { Collection<String> result = new ArrayList<>(); result.add(jvm); if (classpath.size() > 0) { result.add("-cp"); result.add(buildClasspath()); } if (javaAgent != null) { result.add(buildJavaAgent()); } buildSystemProperties(result); result.add(program); result.addAll(programArgs); return result.toArray(new String[0]); } private void buildSystemProperties(Collection<String> result) { for (Entry<String, String> entry : systemProps.entrySet()) { StringBuilder builder = new StringBuilder(); builder.append("-D"); builder.append(entry.getKey()); if (entry.getValue() != null) { builder.append("="); builder.append(entry.getValue()); } result.add(builder.toString()); } } public void setSystemProperties(Properties props) { systemProps.clear(); for (String key : props.stringPropertyNames()) { systemProps.put(key, props.getProperty(key)); } } @Override public String toString() { return ExecUtil.join(" ", build()); } }