package org.jmlspecs.openjml.eclipse;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.jmlspecs.openjml.Strings;
import org.osgi.framework.Bundle;
/** Defines how a plugin-defined classpath variable is defined and initialized.
* The name of this class is used in plugin.xml.
* @author dcok
*
*/
public class ClasspathVariableInitializer extends org.eclipse.jdt.core.ClasspathVariableInitializer {
/** Name of the built-in environment variable defined to hold the location of
* the plug-in in current use. This works for both debug operation and
* conventional installations. This name must agree with the name used in
* plugin.xml.
*/
public static final String OPENJML_VAR = "OPENJML_PLUGIN";
/** Name of the built-in environment variable defined to hold the location of
* the runtime library. This works for both debug operation and
* conventional installations. This name must agree with the name used in
* plugin.xml.
*/
public static final String OPENJML_RUNTIME_LIBRARY = "OPENJML_RUNTIME_LIBRARY";
/** Defines and initializes the OpenJML environment variable. This method
* is required by Eclipse.
*/
@Override
public void initialize(String variable) {
try {
Bundle bundle = Platform.getBundle(Env.PLUGIN_ID);
if (bundle == null) {
Log.errorKey("openjml.ui.failed.to.define.classpath.variable", null); //$NON-NLS-1$
return;
}
URL url = bundle.getEntry("/"); // root of plugin //$NON-NLS-1$
URL local = FileLocator.toFileURL(url);
String fullPath = new File(local.getPath()).getCanonicalPath();
if (fullPath == null) {
Log.errorKey("openjml.ui.failed.to.define.classpath.variable", null); //$NON-NLS-1$
return;
}
JavaCore.setClasspathVariable(OPENJML_VAR, new Path(fullPath), null);
url = bundle.getEntry(Strings.runtimeJarName); // root of plugin
local = FileLocator.toFileURL(url);
fullPath = new File(local.getPath()).getCanonicalPath();
if (fullPath == null) {
Log.errorKey("openjml.ui.failed.to.define.classpath.variable", null); //$NON-NLS-1$
return;
}
JavaCore.setClasspathVariable(OPENJML_RUNTIME_LIBRARY, new Path(fullPath), null);
} catch (JavaModelException e) {
Log.errorKey("openjml.ui.failed.to.set.classpath.variable",e); //$NON-NLS-1$
} catch (IOException e) {
Log.errorKey("openjml.ui.failed.to.define.classpath.variable", e); //$NON-NLS-1$
}
}
}