/* * 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