001
014
015 package com.liferay.portal.kernel.process;
016
017 import com.liferay.portal.kernel.io.PathHolder;
018 import com.liferay.portal.kernel.util.ArrayUtil;
019 import com.liferay.portal.kernel.util.StringUtil;
020
021 import java.io.File;
022 import java.io.Serializable;
023
024 import java.util.Collections;
025 import java.util.List;
026
027
030 public class ProcessConfig implements Serializable {
031
032 public List<String> getArguments() {
033 return _arguments;
034 }
035
036 public String getBootstrapClassPath() {
037 return StringUtil.merge(
038 getBootstrapClassPathElements(), File.pathSeparator);
039 }
040
041 public String[] getBootstrapClassPathElements() {
042 return ArrayUtil.toStringArray(_bootstrapClassPathHolders);
043 }
044
045 public String getJavaExecutable() {
046 return _javaExecutable;
047 }
048
049 public ClassLoader getReactClassLoader() {
050 return _reactClassLoader;
051 }
052
053 public String getRuntimeClassPath() {
054 return StringUtil.merge(
055 getRuntimeClassPathElements(), File.pathSeparator);
056 }
057
058 public String[] getRuntimeClassPathElements() {
059 return ArrayUtil.toStringArray(_runtimeClassPathHolders);
060 }
061
062 public static class Builder {
063
064 public ProcessConfig build() {
065 return new ProcessConfig(this);
066 }
067
068 public Builder setArguments(List<String> arguments) {
069 _arguments = arguments;
070
071 return this;
072 }
073
074 public Builder setBootstrapClassPath(String bootstrapClassPath) {
075 _bootstrapClassPath = bootstrapClassPath;
076
077 return this;
078 }
079
080 public Builder setJavaExecutable(String javaExecutable) {
081 _javaExecutable = javaExecutable;
082
083 return this;
084 }
085
086 public Builder setReactClassLoader(ClassLoader reactClassLoader) {
087 _reactClassLoader = reactClassLoader;
088
089 return this;
090 }
091
092 public Builder setRuntimeClassPath(String runtimeClassPath) {
093 _runtimeClassPath = runtimeClassPath;
094
095 return this;
096 }
097
098 private List<String> _arguments = Collections.emptyList();
099 private String _bootstrapClassPath = System.getProperty(
100 "java.class.path");
101 private String _javaExecutable = "java";
102 private ClassLoader _reactClassLoader =
103 ProcessConfig.class.getClassLoader();
104 private String _runtimeClassPath = _bootstrapClassPath;
105
106 }
107
108 private ProcessConfig(Builder builder) {
109 _arguments = builder._arguments;
110
111 _bootstrapClassPathHolders = toPathHolders(builder._bootstrapClassPath);
112
113 _javaExecutable = builder._javaExecutable;
114 _reactClassLoader = builder._reactClassLoader;
115
116 _runtimeClassPathHolders = toPathHolders(builder._runtimeClassPath);
117 }
118
119 private PathHolder[] toPathHolders(String classPath) {
120 String[] classPathElements = StringUtil.split(
121 classPath, File.pathSeparatorChar);
122
123 PathHolder[] classPathHolders =
124 new PathHolder[classPathElements.length];
125
126 for (int i = 0; i < classPathElements.length; i++) {
127 classPathHolders[i] = new PathHolder(classPathElements[i]);
128 }
129
130 return classPathHolders;
131 }
132
133 private static final long serialVersionUID = 1L;
134
135 private final List<String> _arguments;
136 private final PathHolder[] _bootstrapClassPathHolders;
137 private final String _javaExecutable;
138 private final transient ClassLoader _reactClassLoader;
139 private final PathHolder[] _runtimeClassPathHolders;
140
141 }