net.rim.ejde.internal.util.EnvVarUtils.java Source code

Java tutorial

Introduction

Here is the source code for net.rim.ejde.internal.util.EnvVarUtils.java

Source

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