/* * Copyright (c) 2004, 2005 TADA AB - Taby Sweden * Distributed under the terms shown in the file COPYRIGHT * found in the root folder of this project or at * http://eng.tada.se/osprojects/COPYRIGHT.html */ package org.postgresql.pljava.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Thomas Hallgren */ public class Environment { private static final Pattern s_envPattern = Pattern.compile("^(\\w+)=(.*)$"); private static final boolean s_isWindows; private final TreeMap m_env; static { Pattern osPattern = Pattern.compile("^windows\\W", Pattern.CASE_INSENSITIVE); s_isWindows = osPattern.matcher(System.getProperty("os.name")).lookingAt(); } private static String getEnvCommand() { return s_isWindows ? "cmd /C set" : "sh -c env"; } public static boolean isWindows() { return s_isWindows; } public Environment() throws IOException { String line; TreeMap env = new TreeMap(); m_env = env; Process proc = Runtime.getRuntime().exec(getEnvCommand()); BufferedReader lr = new BufferedReader(new InputStreamReader(proc.getInputStream())); while((line = lr.readLine()) != null) { Matcher matcher = s_envPattern.matcher(line); if(matcher.matches()) { String key = matcher.group(1); String val = matcher.group(2); if(s_isWindows) env.put(key.toLowerCase(), new String[] { key, val } ); else env.put(key, val); } } } public String get(String key) { if(s_isWindows) { String[] entry = (String[])m_env.get(key.toLowerCase()); return (entry == null) ? null : entry[1]; } return (String)m_env.get(key); } public void put(String key, String val) { if(s_isWindows) { String lowKey = key.toLowerCase(); String[] entry = (String[])m_env.get(lowKey); if(entry == null) m_env.put(lowKey, new String[] { key, val }); else entry[1] = val; } else m_env.put(key, val); } public String[] asArray() { StringBuffer bld = new StringBuffer(); ArrayList envArr = new ArrayList(); Iterator itor = m_env.entrySet().iterator(); while(itor.hasNext()) { Map.Entry entry = (Map.Entry)itor.next(); if(s_isWindows) { String[] kv = (String[])entry.getValue(); bld.append(kv[0]); bld.append('='); bld.append(kv[1]); } else { bld.append(entry.getKey()); bld.append('='); bld.append(entry.getValue()); } envArr.add(bld.toString()); bld.setLength(0); } return (String[])envArr.toArray(new String[envArr.size()]); } public String toString() { StringBuffer bld = new StringBuffer(); String newLine = System.getProperty("line.separator"); Iterator itor = m_env.entrySet().iterator(); while(itor.hasNext()) { Map.Entry entry = (Map.Entry)itor.next(); if(s_isWindows) { String[] kv = (String[])entry.getValue(); bld.append(kv[0]); bld.append(" = "); bld.append(kv[1]); bld.append(newLine); } else { bld.append(entry.getKey()); bld.append(" = "); bld.append(entry.getValue()); bld.append(newLine); } } return bld.toString(); } }