/************************************************************************************* * Copyright (c) 2008-2011 Red Hat, Inc. 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: * JBoss by Red Hat - Initial implementation. ************************************************************************************/ package org.jboss.tools.common.jdt.debug.sourcelookup; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationListener; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.jdt.launching.JavaRuntime; import org.jboss.tools.common.jdt.debug.RemoteDebugActivator; /** * * @author snjeza * */ public class DebugLaunchConfigurationListener implements ILaunchConfigurationListener { public void launchConfigurationAdded(ILaunchConfiguration configuration) { updateLaunchConfiguration(configuration); } public void launchConfigurationChanged(ILaunchConfiguration configuration) { updateLaunchConfiguration(configuration); } public void launchConfigurationRemoved(ILaunchConfiguration configuration) { // do nothing } private void updateLaunchConfiguration(ILaunchConfiguration configuration) { try { if (!RemoteDebugActivator.REMOTE_JAVA_APPLICATION_ID .equals(configuration.getType().getIdentifier())) { return; } if (configuration.getAttributes().containsKey( IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER)) { return; } if (!configuration.getAttribute(RemoteDebugActivator.JBOSS_REMOTE_JAVA_APPLICATION, false)) { return; } IJavaProject javaProject = JavaRuntime .getJavaProject(configuration); if (javaProject == null) { return; } String sourcePathComputer = configuration.getAttribute(ISourcePathComputer.ATTR_SOURCE_PATH_COMPUTER_ID, (String) null); ILaunchConfigurationWorkingCopy wc = getLaunchConfigurationWorkingCopy(configuration); boolean save = false; if (sourcePathComputer == null) { wc.setAttribute(ISourcePathComputer.ATTR_SOURCE_PATH_COMPUTER_ID, RemoteDebugActivator.JBOSS_SOURCE_PATH_COMPUTER_ID); save = true; } if (javaProject.getProject().hasNature(RemoteDebugActivator.MAVEN_NATURE)) { if (RemoteDebugActivator.m2eExists()) { wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, RemoteDebugActivator.MAVEN_CLASSPATH_PROVIDER); wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, RemoteDebugActivator.MAVEN_SOURCEPATH_PROVIDER); } else { String classPathProvider = wc.getAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, ""); if (RemoteDebugActivator.MAVEN_CLASSPATH_PROVIDER.equals(classPathProvider)) { wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, (String)null); } String sourcePathProvider = wc.getAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, ""); if (RemoteDebugActivator.MAVEN_SOURCEPATH_PROVIDER.equals(sourcePathProvider)) { wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, (String)null); } } save = true; } if (save) { wc.doSave(); } } catch (CoreException e) { RemoteDebugActivator.pluginLog().logError(e); } } private ILaunchConfigurationWorkingCopy getLaunchConfigurationWorkingCopy( ILaunchConfiguration configuration) throws CoreException { ILaunchConfigurationWorkingCopy wc; if (configuration instanceof ILaunchConfigurationWorkingCopy) { wc = (ILaunchConfigurationWorkingCopy) configuration; } else { wc = configuration.getWorkingCopy(); } return wc; } }