blob: e1e6263b1aa7edf43d2ad76ef982d97e0efc6254 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.launching;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.launching.AbstractVMInstallType;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.LibraryLocation;
import org.eclipse.jdt.launching.environments.ExecutionEnvironmentDescription;
import org.eclipse.osgi.util.NLS;
/**
* Utility class for Standard VM type. Used to generate/retrieve information for
* VMs defined by EE property file.
*
* @since 3.4
*/
public class EEVMType extends AbstractVMInstallType {
/**
* VM Type id
*/
public static final String ID_EE_VM_TYPE = "org.eclipse.jdt.launching.EEVMType"; //$NON-NLS-1$
/**
* Substitution in EE file - replaced with directory of EE file,
* to support absolute path names where needed.
*/
public static final String VAR_EE_HOME = "${ee.home}"; //$NON-NLS-1$
private static final String[] REQUIRED_PROPERTIES = new String[]{
ExecutionEnvironmentDescription.EXECUTABLE,
ExecutionEnvironmentDescription.BOOT_CLASS_PATH,
ExecutionEnvironmentDescription.LANGUAGE_LEVEL,
ExecutionEnvironmentDescription.JAVA_HOME};
/**
* Returns the default javadoc location specified in the properties or <code>null</code>
* if none.
*
* @param properties properties map
* @return javadoc location specified in the properties or <code>null</code> if none
*/
public static URL getJavadocLocation(Map<String, String> properties) {
String javadoc = getProperty(ExecutionEnvironmentDescription.JAVADOC_LOC, properties);
if (javadoc != null && javadoc.length() > 0){
try{
URL url = new URL(javadoc);
if ("file".equalsIgnoreCase(url.getProtocol())){ //$NON-NLS-1$
File file = new File(url.getFile());
url = file.getCanonicalFile().toURI().toURL();
}
return url;
} catch (MalformedURLException e){
LaunchingPlugin.log(e);
return null;
} catch (IOException e){
LaunchingPlugin.log(e);
return null;
}
}
String version = getProperty(ExecutionEnvironmentDescription.LANGUAGE_LEVEL, properties);
if (version != null) {
return StandardVMType.getDefaultJavadocLocation(version);
}
return null;
}
/**
* Returns the default index location specified in the properties or <code>null</code>
* if none.
*
* @param properties properties map
* @return index location specified in the properties or <code>null</code> if none
* @since 3.7.0
*/
public static URL getIndexLocation(Map<String, String> properties) {
String index = getProperty(ExecutionEnvironmentDescription.INDEX_LOC, properties);
if (index != null && index.length() > 0){
try{
URL url = new URL(index);
if ("file".equalsIgnoreCase(url.getProtocol())){ //$NON-NLS-1$
File file = new File(url.getFile());
url = file.getCanonicalFile().toURI().toURL();
}
return url;
} catch (MalformedURLException e){
LaunchingPlugin.log(e);
return null;
} catch (IOException e){
LaunchingPlugin.log(e);
return null;
}
}
return null;
}
/**
* Returns a status indicating if the given definition file is valid.
*
* @param description definition file
* @return status indicating if the given definition file is valid
*/
public static IStatus validateDefinitionFile(ExecutionEnvironmentDescription description) {
// validate required properties
for (int i = 0; i < REQUIRED_PROPERTIES.length; i++) {
String key = REQUIRED_PROPERTIES[i];
String property = description.getProperty(key);
if (property == null) {
return new Status(IStatus.ERROR, LaunchingPlugin.getUniqueIdentifier(), NLS.bind(LaunchingMessages.EEVMType_1, new String[]{key} ));
}
}
return Status.OK_STATUS;
}
/**
* Returns the specified property value from the given map, as a {@link String},
* or <code>null</code> if none.
*
* @param property the name of the property
* @param properties property map
* @return value or <code>null</code>
*/
private static String getProperty(String property, Map<String, String> properties) {
return properties.get(property);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.AbstractVMInstallType#doCreateVMInstall(java.lang.String)
*/
@Override
protected IVMInstall doCreateVMInstall(String id) {
return new EEVMInstall(this, id);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.IVMInstallType#detectInstallLocation()
*/
@Override
public File detectInstallLocation() {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.IVMInstallType#getDefaultLibraryLocations(java.io.File)
*/
@Override
public LibraryLocation[] getDefaultLibraryLocations(File installLocationOrDefinitionFile) {
return new LibraryLocation[0];
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.IVMInstallType#getName()
*/
@Override
public String getName() {
return LaunchingMessages.EEVMType_2;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.IVMInstallType#validateInstallLocation(java.io.File)
*/
@Override
public IStatus validateInstallLocation(File installLocation) {
if (installLocation.exists()) {
return new Status(IStatus.INFO, LaunchingPlugin.ID_PLUGIN, LaunchingMessages.EEVMType_4);
}
return new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, NLS.bind(LaunchingMessages.EEVMType_3, new String[]{installLocation.getPath()}));
}
}