blob: faffda88c57284f9f83be86fa913911c389a1757 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Sierra Wireless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sierra Wireless - initial API and implementation
*******************************************************************************/
package org.eclipse.koneki.ldt.remote.debug.core.internal.launch;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.koneki.ldt.core.LuaNature;
import org.eclipse.koneki.ldt.remote.core.internal.RSEUtil;
import org.eclipse.koneki.ldt.remote.core.internal.lua.LuaRSEUtil;
import org.eclipse.koneki.ldt.remote.core.internal.lua.LuaSubSystem;
import org.eclipse.koneki.ldt.remote.debug.core.internal.LuaRemoteDebugConstant;
import org.eclipse.osgi.util.NLS;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemProfile;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
/**
* Utility class to handle ILaunchConfiguration for LuaEmbeddedLaunchConfiguration
*/
public final class LuaRemoteLaunchConfigurationUtil {
private LuaRemoteLaunchConfigurationUtil() {
}
/**
* set the HOST_ID attributes in the given launch configuration
*
* @param conf
* to edit
* @param host
* to save in the HOST_ID attribute
*/
public static final void setConnectionId(ILaunchConfigurationWorkingCopy conf, IHost host) {
List<String> hostData = new ArrayList<String>();
hostData.add(host.getSystemProfileName());
hostData.add(host.getName());
conf.setAttribute(LuaRemoteDebugConstant.HOST_ID, hostData);
}
/**
* get the host identify by the given ILaunchConfiguration.
*
* @return the host defined for this ILaunchConfiguration or null if no host is found
*/
public static final IHost getHost(ILaunchConfiguration conf) {
try {
List<?> hostData = conf.getAttribute(LuaRemoteDebugConstant.HOST_ID, Collections.EMPTY_LIST);
// list must contained 2 elements (profileName and host name)
if (hostData.size() != 2)
return null;
// get profile name
Object oProfileName = hostData.get(0);
if (!(oProfileName instanceof String))
return null;
String profileName = (String) oProfileName;
// get host name
Object oHost = hostData.get(1);
if (!(oHost instanceof String))
return null;
String hostID = (String) oHost;
// get profile
ISystemProfile systemProfile = RSECorePlugin.getTheSystemRegistry().getSystemProfile(profileName);
if (systemProfile == null)
return null;
// get host
IHost host = RSECorePlugin.getTheSystemRegistry().getHost(systemProfile, hostID);
return host;
} catch (CoreException e) {
return null;
}
}
/**
* internal method to validate the value of the current tab
*
* @param luaInspectorPort
*
* @return true if value is valid
*/
public static String validateRemoteLaunchConfiguration(String projectName, String scriptName, IHost host) {
// project validation
// -------------------------------
// projectName validation
if (projectName == null || projectName.isEmpty()) {
return Messages.LuaRemoteLaunchConfigurationUtil_error_no_project;
}
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
if (project == null || !project.exists()) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_unexisted_project, projectName);
}
if (!project.isOpen()) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_closed_project, projectName);
}
try {
if (!project.hasNature(LuaNature.ID)) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_not_lua_project, projectName);
}
} catch (CoreException e) {
// must not append (at this line project is open and exist)
return "Unexpected problem :" + e.getMessage(); //$NON-NLS-1$
}
// scriptName validation
if (scriptName == null || scriptName.isEmpty()) {
return Messages.LuaRemoteLaunchConfigurationUtil_error_no_script_selected;
}
IResource script = project.findMember(scriptName);
if (script == null || !script.exists()) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_script_desnt_exist, scriptName);
}
if (script.getType() != IResource.FILE || !script.getFileExtension().equals("lua")) { //$NON-NLS-1$
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_script_not_lua_file, scriptName);
}
// target validation
// --------------------------------
if (host == null) {
return Messages.LuaRemoteLaunchConfigurationUtil_error_no_host_selected;
}
String hostName = host.getName();
// check the target has the lua support
LuaSubSystem luaSubSystem = LuaRSEUtil.getLuaSubSystem(host);
if (luaSubSystem == null) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_no_lua_service, hostName);
}
// check luaSubSystem configuration
String luaCommand = luaSubSystem.getLuaCommand();
if (luaCommand == null || luaCommand.isEmpty()) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_no_luacommand, hostName);
}
String outputDirectory = luaSubSystem.getOutputDirectory();
if (outputDirectory == null || outputDirectory.isEmpty()) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_no_outputdir, hostName);
}
// check the target has the lua support
IRemoteFileSubSystem remoteFileSubsystem = RSEUtil.getRemoteFileSubsystem(host);
if (remoteFileSubsystem == null) {
return NLS.bind(Messages.LuaRemoteLaunchConfigurationUtil_error_no_remote_file_service, hostName);
}
return null;
}
public static String getRemoteApplicationPath(ILaunchConfiguration configuration) {
final IHost host = getHost(configuration);
if (host == null)
return ""; //$NON-NLS-1$
final IRemoteFileSubSystem remoteFileSubSystem = RSEUtil.getRemoteFileSubsystem(host);
final LuaSubSystem luaSubSystem = LuaRSEUtil.getLuaSubSystem(host);
if (luaSubSystem == null || remoteFileSubSystem == null)
return ""; //$NON-NLS-1$
return luaSubSystem.getOutputDirectory() + remoteFileSubSystem.getSeparator() + configuration.getName();
}
}