001 /* 002 * SonarQube, open source software quality management tool. 003 * Copyright (C) 2008-2014 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * SonarQube is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * SonarQube is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public License 017 * along with this program; if not, write to the Free Software Foundation, 018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 019 */ 020 package org.sonar.process.monitor; 021 022 import org.apache.commons.lang.StringUtils; 023 024 import javax.annotation.Nullable; 025 026 import java.io.File; 027 import java.util.ArrayList; 028 import java.util.Collections; 029 import java.util.HashMap; 030 import java.util.LinkedHashMap; 031 import java.util.List; 032 import java.util.Map; 033 import java.util.Properties; 034 035 public class JavaCommand { 036 037 // unique key among the group of commands to launch 038 private final String key; 039 040 private File workDir; 041 042 // for example -Xmx1G 043 private final List<String> javaOptions = new ArrayList<String>(); 044 045 // entry point 046 private String className; 047 048 // relative path to JAR files 049 private final List<String> classpath = new ArrayList<String>(); 050 051 // program arguments (parameters of main(String[]) 052 private final Map<String, String> arguments = new LinkedHashMap<String, String>(); 053 054 private final Map<String, String> envVariables = new HashMap<String, String>(System.getenv()); 055 056 private File tempDir = null; 057 058 public JavaCommand(String key) { 059 this.key = key; 060 } 061 062 public String getKey() { 063 return key; 064 } 065 066 public File getWorkDir() { 067 return workDir; 068 } 069 070 public JavaCommand setWorkDir(File workDir) { 071 this.workDir = workDir; 072 return this; 073 } 074 075 public File getTempDir() { 076 return tempDir; 077 } 078 079 public JavaCommand setTempDir(File tempDir) { 080 this.tempDir = tempDir; 081 return this; 082 } 083 084 public List<String> getJavaOptions() { 085 return javaOptions; 086 } 087 088 public JavaCommand addJavaOption(String s) { 089 if (StringUtils.isNotBlank(s)) { 090 javaOptions.add(s); 091 } 092 return this; 093 } 094 095 public JavaCommand addJavaOptions(String s) { 096 for (String opt : s.split(" ")) { 097 addJavaOption(opt); 098 } 099 return this; 100 } 101 102 public String getClassName() { 103 return className; 104 } 105 106 public JavaCommand setClassName(String className) { 107 this.className = className; 108 return this; 109 } 110 111 public List<String> getClasspath() { 112 return classpath; 113 } 114 115 public JavaCommand addClasspath(String s) { 116 classpath.add(s); 117 return this; 118 } 119 120 public Map<String, String> getArguments() { 121 return arguments; 122 } 123 124 public JavaCommand setArgument(String key, @Nullable String value) { 125 if (value == null) { 126 arguments.remove(key); 127 } else { 128 arguments.put(key, value); 129 } 130 return this; 131 } 132 133 public JavaCommand setArguments(Properties args) { 134 for (Map.Entry<Object, Object> entry : args.entrySet()) { 135 setArgument(entry.getKey().toString(), entry.getValue() != null ? entry.getValue().toString() : null); 136 } 137 return this; 138 } 139 140 public Map<String, String> getEnvVariables() { 141 return envVariables; 142 } 143 144 public JavaCommand setEnvVariable(String key, @Nullable String value) { 145 if (value == null) { 146 envVariables.remove(key); 147 } else { 148 envVariables.put(key, value); 149 } 150 return this; 151 } 152 153 @Override 154 public String toString() { 155 final StringBuilder sb = new StringBuilder("JavaCommand{"); 156 sb.append("workDir=").append(workDir); 157 sb.append(", javaOptions=").append(javaOptions); 158 sb.append(", className='").append(className).append('\''); 159 sb.append(", classpath=").append(classpath); 160 sb.append(", arguments=").append(arguments); 161 sb.append(", envVariables=").append(envVariables); 162 sb.append('}'); 163 return sb.toString(); 164 } 165 }