/*******************************************************************************
 * Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
 * 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:
 *     Doug Satchwell (Chase Technology Ltd) - initial API and implementation
 *     David Carver (STAR) - bug 245772 - NLS Message refactoring
 *******************************************************************************/
package org.eclipse.wst.xsl.internal.debug.ui.actions;

import org.eclipse.jface.window.Window;
import org.eclipse.wst.xsl.internal.debug.ui.tabs.main.ParameterViewer;
import org.eclipse.wst.xsl.launching.config.LaunchAttribute;
import org.eclipse.wst.xsl.debug.ui.Messages;

/**
 * An action that opens a dialog to allow the user to add a parameter to a transform.
 * 
 * @author Doug Satchwell
 */
public class AddParameterAction extends AbstractParameterAction
{
	/**
	 * Create a new instance of this.
	 * 
	 * @param viewer teh viewer
	 */
	public AddParameterAction(ParameterViewer viewer)
	{
		super(Messages.getString("AddParameterAction"), viewer);
	}

	@Override
	public void run()
	{
		MultipleInputDialog dialog = new MultipleInputDialog(getShell(), Messages.getString("AddParameterAction_Dialog"));
		String namelabel = Messages.getString("AddParameterAction_Dialog_Name");
		dialog.addTextField(namelabel, null, false);
		String variableslabel = Messages.getString("AddParameterAction_Dialog_Value");
		dialog.addVariablesField(variableslabel, null, false);
		dialog.open();

		if (dialog.getReturnCode() == Window.OK)
		{
			String name = dialog.getStringValue(namelabel);
			String value = dialog.getStringValue(variableslabel);
			LaunchAttribute parameter = null;
			if (value != null && value.indexOf("${") > -1) //$NON-NLS-1$
				parameter = new LaunchAttribute(name, null, value);
			else
				parameter = new LaunchAttribute(name, null, value);
			getViewer().addParameter(parameter);
		}
	}

	@Override
	public void setEnabled(boolean enabled)
	{
		// do nothing
	}

}
