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(
112 builder._bootstrapClassPath);
113
114 _javaExecutable = builder._javaExecutable;
115 _reactClassLoader = builder._reactClassLoader;
116
117 _runtimeClassPathHolders = _toPathHolders(builder._runtimeClassPath);
118 }
119
120 private PathHolder[] _toPathHolders(String classPath) {
121 String[] classPathElements = StringUtil.split(
122 classPath, File.pathSeparatorChar);
123
124 PathHolder[] classPathHolders =
125 new PathHolder[classPathElements.length];
126
127 for (int i = 0; i < classPathElements.length; i++) {
128 classPathHolders[i] = new PathHolder(classPathElements[i]);
129 }
130
131 return classPathHolders;
132 }
133
134 private static final long serialVersionUID = 1L;
135
136 private final List<String> _arguments;
137 private final PathHolder[] _bootstrapClassPathHolders;
138 private final String _javaExecutable;
139 private final transient ClassLoader _reactClassLoader;
140 private final PathHolder[] _runtimeClassPathHolders;
141
142 }