Java tutorial
/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.util; import java.io.File; import net.rim.ejde.internal.core.IConstants; import net.rim.ide.core.Util; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.JavaCore; /** * A utility class to support RIA environmental variables. * * @author Raj Gunaratnam, Cris Malinescu * @since 05 January, 09 */ public class EnvVarUtils { static private final Logger log = Logger.getLogger(EnvVarUtils.class); /** * This method works as a wrapper method for net.rim.ide.Util.replaceEnvVars(...) method. For an example if any environmental * variable is undefined then this method will add a File.separator as prefix of the return value otherwise it will return the * proper substituted path String. * * @param path * - String * @return result - String */ public static String replaceRIAEnvVars(String path) { String result = null; result = Util.replaceEnvVars(path); // The following block provides the fix for DPI222003 if (result.startsWith(IConstants.DOLLAR_MARK)) { int index1 = result.indexOf('('); int index2 = result.indexOf(')'); IPath rpath; String var; // This block provides support for eclipse ClassPath Variables if (index1 > 0 && index2 > index1 && (rpath = JavaCore .getClasspathVariable(var = result.substring(index1 + 1, index2))) != null) { result = rpath.toOSString() + result.substring(index2 + 1); Util.setEnvVar(var, rpath.toOSString()); } else { log.debug(result + " contains undefined environmental variable"); // org.eclipse.jdt.core.JavaCore.newLibraryEntry(...) requires // an absolute path otherwise it will assert with the following // message: Path for IClasspathEntry must be absolute. // Please note any path starts with $ is not absolute. result = File.separator + result; } } return result; }// end of method public static String resolveLegacyEnvVars(String path) { return Util.replaceEnvVars(path); } static public String resolveEclipseEnvVars(String path) { return resolveEclipseClasspathVar(path); } static public String resolveEclipseClasspathVar(String path) { if (path.startsWith(IConstants.DOLLAR_MARK)) { int index1 = path.indexOf('('); int index2 = path.indexOf(')'); if (index1 > 0 && index2 > index1) { String var = path.substring(index1 + 1, index2); IPath rpath = JavaCore.getClasspathVariable(var); if (null != rpath) { path = rpath.toOSString() + path.substring(index2 + 1); Util.setEnvVar(var, rpath.toOSString()); } } } return path; } static public String resolveSystemVar(String var) { String sysVar = System.getenv(var); if (StringUtils.isEmpty(sysVar)) return var; return sysVar; } static public String resolveVarToString(String var) { var = resolveEclipseEnvVars(var); if (var.startsWith(IConstants.DOLLAR_MARK)) { var = resolveLegacyEnvVars(var); } if (var.startsWith(IConstants.DOLLAR_MARK)) { var = resolveSystemVar(var); } return var; } static public IPath resolveVarToPath(String var) { return new Path(var.substring(var.indexOf('/'))); } }// end of class