1 package org.codehaus.plexus.interpolation.os; 2 3 /* 4 * The MIT License 5 * 6 * Copyright (c) 2004, The Codehaus 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy of 9 * this software and associated documentation files (the "Software"), to deal in 10 * the Software without restriction, including without limitation the rights to 11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 * of the Software, and to permit persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in all 16 * copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 27 import java.io.IOException; 28 import java.util.Locale; 29 import java.util.Map; 30 import java.util.Properties; 31 32 /** 33 * <b>NOTE:</b> This class was copied from plexus-utils, to allow this library 34 * to stand completely self-contained. 35 * 36 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl </a> 37 */ 38 public final class OperatingSystemUtils { 39 40 private static EnvVarSource envVarSource = new DefaultEnvVarSource(); 41 42 private OperatingSystemUtils() {} 43 44 public static Properties getSystemEnvVars() throws IOException { 45 return getSystemEnvVars(true); 46 } 47 48 /** 49 * Return the shell environment variables. If <code>caseSensitive == true</code>, then envar 50 * keys will all be upper-case. 51 * 52 * @param caseSensitive Whether environment variable keys should be treated case-sensitively. 53 * @return Properties object of (possibly modified) envar keys mapped to their values. 54 * @throws IOException in case of an error. 55 */ 56 public static Properties getSystemEnvVars(boolean caseSensitive) throws IOException { 57 Properties envVars = new Properties(); 58 Map<String, String> envs = envVarSource.getEnvMap(); 59 for (String key : envs.keySet()) { 60 String value = envs.get(key); 61 if (!caseSensitive) { 62 key = key.toUpperCase(Locale.ENGLISH); 63 } 64 envVars.put(key, value); 65 } 66 return envVars; 67 } 68 69 /** 70 * Set the source object to load the environment variables from. 71 * Default implementation should suffice. This is mostly for testing. 72 * @param source the EnvVarSource instance that loads the environment variables. 73 * 74 * @since 3.1.2 75 */ 76 public static void setEnvVarSource(EnvVarSource source) { 77 envVarSource = source; 78 } 79 80 /** 81 * Defines the functionality to load a Map of environment variables. 82 * 83 * @since 3.1.2 84 */ 85 public interface EnvVarSource { 86 public Map<String, String> getEnvMap(); 87 } 88 89 /** 90 * Default implementation to load environment variables. 91 * 92 * @since 3.1.2 93 */ 94 public static class DefaultEnvVarSource implements EnvVarSource { 95 96 public Map<String, String> getEnvMap() { 97 return System.getenv(); 98 } 99 } 100 }