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());
}
}