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 javax.annotation.Nullable; 023 024 import java.io.File; 025 import java.util.ArrayList; 026 import java.util.Collections; 027 import java.util.HashMap; 028 import java.util.LinkedHashMap; 029 import java.util.List; 030 import java.util.Map; 031 import java.util.Properties; 032 033 public class JavaCommand { 034 035 // unique key among the group of commands to launch 036 private final String key; 037 038 private File workDir; 039 040 // for example -Xmx1G 041 private final List<String> javaOptions = new ArrayList<String>(); 042 043 // entry point 044 private String className; 045 046 // relative path to JAR files 047 private final List<String> classpath = new ArrayList<String>(); 048 049 // program arguments (parameters of main(String[]) 050 private final Map<String, String> arguments = new LinkedHashMap<String, String>(); 051 052 private final Map<String, String> envVariables = new HashMap<String, String>(System.getenv()); 053 054 private File tempDir = null; 055 056 public JavaCommand(String key) { 057 this.key = key; 058 } 059 060 public String getKey() { 061 return key; 062 } 063 064 public File getWorkDir() { 065 return workDir; 066 } 067 068 public JavaCommand setWorkDir(File workDir) { 069 this.workDir = workDir; 070 return this; 071 } 072 073 public File getTempDir() { 074 return tempDir; 075 } 076 077 public JavaCommand setTempDir(File tempDir) { 078 this.tempDir = tempDir; 079 return this; 080 } 081 082 public List<String> getJavaOptions() { 083 return javaOptions; 084 } 085 086 public JavaCommand addJavaOption(String s) { 087 javaOptions.add(s); 088 return this; 089 } 090 091 public JavaCommand addJavaOptions(String s) { 092 Collections.addAll(javaOptions, s.split(" ")); 093 return this; 094 } 095 096 public String getClassName() { 097 return className; 098 } 099 100 public JavaCommand setClassName(String className) { 101 this.className = className; 102 return this; 103 } 104 105 public List<String> getClasspath() { 106 return classpath; 107 } 108 109 public JavaCommand addClasspath(String s) { 110 classpath.add(s); 111 return this; 112 } 113 114 public Map<String, String> getArguments() { 115 return arguments; 116 } 117 118 public JavaCommand setArgument(String key, @Nullable String value) { 119 if (value == null) { 120 arguments.remove(key); 121 } else { 122 arguments.put(key, value); 123 } 124 return this; 125 } 126 127 public JavaCommand setArguments(Properties args) { 128 for (Map.Entry<Object, Object> entry : args.entrySet()) { 129 setArgument(entry.getKey().toString(), entry.getValue() != null ? entry.getValue().toString() : null); 130 } 131 return this; 132 } 133 134 public Map<String, String> getEnvVariables() { 135 return envVariables; 136 } 137 138 public JavaCommand setEnvVariable(String key, @Nullable String value) { 139 if (value == null) { 140 envVariables.remove(key); 141 } else { 142 envVariables.put(key, value); 143 } 144 return this; 145 } 146 147 @Override 148 public String toString() { 149 final StringBuilder sb = new StringBuilder("JavaCommand{"); 150 sb.append("workDir=").append(workDir); 151 sb.append(", javaOptions=").append(javaOptions); 152 sb.append(", className='").append(className).append('\''); 153 sb.append(", classpath=").append(classpath); 154 sb.append(", arguments=").append(arguments); 155 sb.append(", envVariables=").append(envVariables); 156 sb.append('}'); 157 return sb.toString(); 158 } 159 }