Return-Path: Delivered-To: apmail-commons-commits-archive@locus.apache.org Received: (qmail 13167 invoked from network); 6 Dec 2007 22:32:58 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 6 Dec 2007 22:32:58 -0000 Received: (qmail 47272 invoked by uid 500); 6 Dec 2007 22:32:45 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 47185 invoked by uid 500); 6 Dec 2007 22:32:45 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 47161 invoked by uid 99); 6 Dec 2007 22:32:45 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2007 14:32:45 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2007 22:32:33 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 755761A9832; Thu, 6 Dec 2007 14:32:35 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r601884 - in /commons/sandbox/exec/trunk/src: main/java/org/apache/commons/exec/environment/ main/java/org/apache/commons/exec/launcher/ test/java/org/apache/commons/exec/environment/ Date: Thu, 06 Dec 2007 22:32:34 -0000 To: commits@commons.apache.org From: sgoeschl@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071206223235.755761A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sgoeschl Date: Thu Dec 6 14:32:34 2007 New Revision: 601884 URL: http://svn.apache.org/viewvc?rev=601884&view=rev Log: SANDBOX-204 Cleaning up some more code Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java (original) +++ commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java Thu Dec 6 14:32:34 2007 @@ -26,34 +26,64 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; +import java.util.Iterator; import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.Executor; import org.apache.commons.exec.OS; import org.apache.commons.exec.PumpStreamHandler; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +/** + * Helper class to determine the environment variable + * for the OS. Depending on the JDK the environment + * variables can be either retrieved directly from the + * JVM or requires starting a process to get them running + * an OS command line. + */ public class DefaultProcessingEnvironment { - private static Log LOG = LogFactory.getLog(DefaultProcessingEnvironment.class); - - /** - * TODO move this and other final static / constants into a constants class ? - */ + /** the line seperator of the system */ private static final String LINE_SEPARATOR = System.getProperty("line.separator"); - - protected Map procEnvironment; - + + /** the environment variables of the process */ + protected Map procEnvironment; + /** * Find the list of environment variables for this process. * - * @return a vector containing the environment variables the vector elements - * are strings formatted like variable = value - * @throws IOException + * @return a map containing the environment variables + * @throws IOException obtaining the environment variables failed */ public synchronized Map getProcEnvironment() throws IOException { + + HashMap result = new HashMap(); + + if(procEnvironment == null) { + procEnvironment = this.createProcEnvironment(); + } + + // create a clone of the map just in case that + // anyone is going to modifiy it, e.g. removing + // or setting an evironment variable + + Iterator iter = procEnvironment.keySet().iterator(); + while(iter.hasNext()) { + Object key = iter.next(); + Object value = procEnvironment.get(key); + result.put(key, value); + } + + return result; + } + + /** + * Find the list of environment variables for this process. + * + * @return a amp containing the environment variables + * @throws IOException the operation failed + */ + protected Map createProcEnvironment() throws IOException { if (procEnvironment == null) { try { Method getenvs = System.class.getMethod( "getenv", null ); @@ -62,9 +92,9 @@ } catch ( NoSuchMethodException e ) { // ok, just not on JDK 1.5 } catch ( IllegalAccessException e ) { - LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" ); + // Unexpected error obtaining environment - using JDK 1.4 method } catch ( InvocationTargetException e ) { - LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" ); + // Unexpected error obtaining environment - using JDK 1.4 method } } @@ -100,8 +130,10 @@ } /** - * @return - * @throws IOException + * Start a process to list the environment variables. + * + * @return a reader containing the output of the process + * @throws IOException starting the process failed */ protected BufferedReader runProcEnvCommand() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -115,6 +147,12 @@ return new BufferedReader(new StringReader(toString(out))); } + /** + * Determine the OS specific command line to get a list of environment + * variables. + * + * @return the command line + */ protected CommandLine getProcEnvCommand() { String executable; String[] arguments = null; Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java (original) +++ commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java Thu Dec 6 14:32:34 2007 @@ -40,15 +40,16 @@ } /** - * Disable constructor + * Disable constructor. */ private EnvironmentUtil() { } /** - * get the variable list as an array + * Get the variable list as an array. * + * @param environment the environment to use * @return array of key=value assignment strings */ public static String[] toStrings(Map environment) { @@ -66,6 +67,28 @@ return result; } + /** + * Find the list of environment variables for this process. + * + * @return a vector containing the environment variables the vector elements + * are strings formatted like variable = value + * @throws IOException the operation failed + */ + public static synchronized Map getProcEnvironment() throws IOException { + return procEnvironment.getProcEnvironment(); + } + + /** + * Add a key/value pair to the given environment. + * + * @param environment the current environment + * @param keyAndValue the key/value pair + */ + public static void addVariableToEnvironment(Map environment, String keyAndValue) { + String[] parsedVarible = parseEnvironmentVariable(keyAndValue); + environment.put(parsedVarible[0], parsedVarible[1]); + } + private static String[] parseEnvironmentVariable(final String keyAndValue) { int index = keyAndValue.indexOf('='); if (index == -1) { @@ -77,24 +100,8 @@ String[] result = new String[2]; result[0] = keyAndValue.substring(0, index); result[1] = keyAndValue.substring(index + 1); - + return result; } - /** - * Find the list of environment variables for this process. - * - * @return a vector containing the environment variables the vector elements - * are strings formatted like variable = value - * @throws IOException - */ - public static synchronized Map getProcEnvironment() throws IOException { - return procEnvironment.getProcEnvironment(); - } - - public static void addVariableToEnvironment(Map environment, String keyAndValue) { - String[] parsedVarible = parseEnvironmentVariable(keyAndValue); - - environment.put(parsedVarible[0], parsedVarible[1]); - } } Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java (original) +++ commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java Thu Dec 6 14:32:34 2007 @@ -25,9 +25,19 @@ import org.apache.commons.exec.CommandLine; +/** + * Helper class to determine the environment variable + * for VMS. + */ public class OpenVmsProcessingEnvironment extends DefaultProcessingEnvironment { - public synchronized Map getProcEnvironment() throws IOException { + /** + * Find the list of environment variables for this process. + * + * @return a amp containing the environment variables + * @throws IOException the operation failed + */ + protected synchronized Map createProcEnvironment() throws IOException { if (procEnvironment == null) { procEnvironment = new HashMap(); @@ -40,6 +50,12 @@ return procEnvironment; } + /** + * Determine the OS specific command line to get a list of environment + * variables. + * + * @return the command line + */ protected CommandLine getProcEnvCommand() { CommandLine commandLine = new CommandLine("show"); commandLine.addArgument("logical"); @@ -54,12 +70,17 @@ * that a logical defined in multiple tables only gets added from the * highest order table. Logicals with multiple equivalence names are mapped * to a variable with multiple values separated by a comma (,). + * + * @param environment the current environment + * @param in the reader from the process to determine VMS env variables + * @return the updated environment + * @throws IOException operation failed */ private Map addVMSLogicals(final Map environment, final BufferedReader in) throws IOException { + String line; HashMap logicals = new HashMap(); String logName = null, logValue = null, newLogName; - String line = null; while ((line = in.readLine()) != null) { // parse the VMS logicals into required format ("VAR=VAL[,VAL2]") if (line.startsWith("\t=")) { @@ -94,5 +115,4 @@ } return environment; } - } Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java (original) +++ commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java Thu Dec 6 14:32:34 2007 @@ -34,6 +34,8 @@ * @param env * The environment for the new process. If null, the environment * of the current process is used. + * + * @return the newly created process * @throws IOException * if attempting to run a command in a specific directory */ @@ -52,6 +54,8 @@ * @param workingDir * The directory to start the command in. If null, the current * directory is used + * + * @return the newly created process * @throws IOException * if trying to change directory */ Modified: commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java (original) +++ commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java Thu Dec 6 14:32:34 2007 @@ -24,17 +24,17 @@ import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.environment.EnvironmentUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * A command launcher for JDK/JRE 1.3 (and higher). Uses the built-in * Runtime.exec() command */ public class Java13CommandLauncher extends CommandLauncherImpl { - private static Log log = LogFactory.getLog(Java13CommandLauncher.class); - public Java13CommandLauncher() { + /** + * Constructor + */ + public Java13CommandLauncher() { } /** @@ -52,7 +52,6 @@ */ public Process exec(final CommandLine cmd, final Map env, final File workingDir) throws IOException { - log.debug("Execute:Java13CommandLauncher: " + cmd); String[] envVars = null; if(env != null) { Modified: commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java?rev=601884&r1=601883&r2=601884&view=diff ============================================================================== --- commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java (original) +++ commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java Thu Dec 6 14:32:34 2007 @@ -48,11 +48,14 @@ */ public void testGetProcEnvironment() throws IOException { Map procEnvironment = EnvironmentUtil.getProcEnvironment(); + // we assume that there is at least one environment variable + // for this process assertTrue(procEnvironment.size() > 0); String[] envArgs = EnvironmentUtil.toStrings(procEnvironment); for(int i=0; i 0); + System.out.println(envArgs[i]); } } }