/*******************************************************************************
 *  Copyright (c) 2008, 2011 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *     Remy Chi Jian Suen <remy.suen@gmail.com>
 *      - Bug 214696 Expose WorkingDirectoryBlock as API
 *      - Bug 221973 Make WorkingDirectoryBlock from JDT a Debug API class
 *******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.launcher;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.ui.WorkingDirectoryBlock;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.launching.JavaRuntime;

/**
 * A UI block allowing a working directory to be specified for a launch
 * configuration.
 *
 * @since 3.4
 */
public class JavaWorkingDirectoryBlock extends WorkingDirectoryBlock {

	/**
	 * Constructs a new working directory block.
	 */
	public JavaWorkingDirectoryBlock() {
		super(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
				IJavaDebugHelpContextIds.WORKING_DIRECTORY_BLOCK);
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.WorkingDirectoryBlock#getProject(org.eclipse.debug.core.ILaunchConfiguration)
	 */
	@Override
	protected IProject getProject(ILaunchConfiguration configuration)
			throws CoreException {
		IJavaProject project = JavaRuntime.getJavaProject(configuration);
		return project == null ? null : project.getProject();
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.WorkingDirectoryBlock#log(org.eclipse.core.runtime.CoreException)
	 */
	@Override
	protected void log(CoreException e) {
		setErrorMessage(e.getMessage());
	}

}
