blob: ff99b65d9b9b677557680446dc243bdfe07d18ef [file] [log] [blame]
/*******************************************************************************
* 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
*******************************************************************************/
package org.eclipse.wst.xsl.internal.debug.ui.tabs.output;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.xsl.internal.debug.ui.Messages;
import org.eclipse.wst.xsl.internal.debug.ui.ResourceSelectionBlock;
import org.eclipse.wst.xsl.internal.debug.ui.XSLDebugUIPlugin;
import org.eclipse.wst.xsl.launching.XSLLaunchConfigurationConstants;
import org.eclipse.wst.xsl.launching.XSLTRuntime;
public class OutputFileBlock extends ResourceSelectionBlock {
private Button openFileCheckButton;
private Button formatFileCheckButton;
private String inputFilename;
private Text fileNameText;
private String defaultOutputFileName;
private String outputFileName;
public OutputFileBlock() {
super(IResource.FOLDER, true, true, false);
}
@Override
protected String getMessage(int type) {
switch (type) {
case ERROR_DIRECTORY_NOT_SPECIFIED:
return Messages.OutputFOFileBlock_DIRECTORY_NOT_SPECIFIED;
case ERROR_DIRECTORY_DOES_NOT_EXIST:
return Messages.OutputFOFileBlock_DIRECTORY_DOES_NOT_EXIST;
case GROUP_NAME:
return getName();
case USE_DEFAULT_RADIO:
return Messages.OutputFileBlock_0;
case USE_OTHER_RADIO:
return Messages.OutputFOFileBlock_OTHER_RADIO;
case DIRECTORY_DIALOG_MESSAGE:
return Messages.OutputFOFileBlock_DIALOG_MESSAGE;
case WORKSPACE_DIALOG_MESSAGE:
return Messages.OutputFOFileBlock_WORKSPACE_DIALOG_MESSAGE;
case VARIABLES_BUTTON:
return Messages.OutputFOFileBlock_VARIABLES_BUTTON;
case FILE_SYSTEM_BUTTON:
return Messages.OutputFOFileBlock_FILE_SYSTEM_BUTTON;
case WORKSPACE_BUTTON:
return Messages.OutputFOFileBlock_WORKSPACE_BUTTON;
case WORKSPACE_DIALOG_TITLE:
return Messages.OutputFOFileBlock_WORKSPACE_DIALOG_TITLE;
}
return "" + type; //$NON-NLS-1$
}
@Override
protected void createCheckboxAndText(Composite parent) {
if (showDefault) {
useDefaultCheckButton = createCheckButton(parent,
getMessage(USE_DEFAULT_RADIO));
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 2;
useDefaultCheckButton.setLayoutData(gd);
useDefaultCheckButton.addSelectionListener(widgetListener);
}
Composite specificFileComp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
if (showDefault)
layout.marginLeft = 20;
else
layout.marginLeft = 0;
layout.marginHeight = 0;
specificFileComp.setLayout(layout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
specificFileComp.setLayoutData(gd);
Label label = new Label(specificFileComp, SWT.NONE);
label.setText(Messages.OutputFileBlock_1);
fileNameText = new Text(specificFileComp, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = showDefault ? 1 : 2;
fileNameText.setLayoutData(gd);
fileNameText.setFont(parent.getFont());
fileNameText.addModifyListener(widgetListener);
if (showDefault) {
label = new Label(specificFileComp, SWT.NONE);
label.setText(Messages.OutputFileBlock_7);
}
resourceText = new Text(specificFileComp, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = showDefault ? 1 : 2;
resourceText.setLayoutData(gd);
resourceText.setFont(parent.getFont());
resourceText.addModifyListener(widgetListener);
}
@Override
protected void createButtons(Composite parent) {
Composite checkComposite = new Composite(parent, SWT.NONE);
checkComposite.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_BEGINNING));
GridLayout gl = new GridLayout();
gl.marginWidth = 0;
checkComposite.setLayout(gl);
openFileCheckButton = createCheckButton(checkComposite,
Messages.OutputFileBlock_8);
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 1;
openFileCheckButton.setLayoutData(gd);
openFileCheckButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
if (openFileCheckButton.getSelection()) {
formatFileCheckButton.setEnabled(true);
updateLaunchConfigurationDialog();
} else {
formatFileCheckButton.setEnabled(false);
formatFileCheckButton.setSelection(false);
}
}
});
formatFileCheckButton = createCheckButton(checkComposite,
Messages.OutputFileBlock_2);
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 1;
formatFileCheckButton.setLayoutData(gd);
formatFileCheckButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
Composite buttonComp = new Composite(parent, SWT.TOP);
GridLayout layout = new GridLayout(3, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
buttonComp.setLayout(layout);
gd = new GridData(GridData.HORIZONTAL_ALIGN_END
| GridData.VERTICAL_ALIGN_BEGINNING);
gd.horizontalSpan = 1;
buttonComp.setLayoutData(gd);
buttonComp.setFont(parent.getFont());
fWorkspaceButton = createPushButton(buttonComp,
getMessage(WORKSPACE_BUTTON), null);
fWorkspaceButton.addSelectionListener(widgetListener);
fFileSystemButton = createPushButton(buttonComp,
getMessage(FILE_SYSTEM_BUTTON), null);
fFileSystemButton.addSelectionListener(widgetListener);
fVariablesButton = createPushButton(buttonComp,
getMessage(VARIABLES_BUTTON), null);
fVariablesButton.addSelectionListener(widgetListener);
}
public String getName() {
return Messages.OutputFileBlock_9;
}
public void initializeFrom(ILaunchConfiguration configuration) {
try {
inputFilename = configuration.getAttribute(
XSLLaunchConfigurationConstants.ATTR_INPUT_FILE, ""); //$NON-NLS-1$
updateDefaultOutputFile();
boolean useDefault = configuration
.getAttribute(
XSLLaunchConfigurationConstants.ATTR_USE_DEFAULT_OUTPUT_FILE,
true);
useDefaultCheckButton.setSelection(useDefault);
outputFileName = configuration.getAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FILENAME,
defaultOutputFileName);
resource = configuration.getAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FOLDER,
defaultResource);
updateResourceText(useDefault);
boolean openFileOnCompletion = configuration.getAttribute(
XSLLaunchConfigurationConstants.ATTR_OPEN_FILE, true);
openFileCheckButton.setSelection(openFileOnCompletion);
boolean formatFileOnCompletion = configuration.getAttribute(
XSLLaunchConfigurationConstants.ATTR_FORMAT_FILE, false);
formatFileCheckButton.setSelection(formatFileOnCompletion);
} catch (CoreException e) {
XSLDebugUIPlugin.log(e);
}
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
boolean useDefault = useDefaultCheckButton.getSelection();
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_USE_DEFAULT_OUTPUT_FILE,
useDefault);
String outputFile = resourceText.getText();
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FOLDER, outputFile);
String outputFileName = fileNameText.getText();
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FILENAME,
outputFileName);
boolean openFileOnCompletion = openFileCheckButton.getSelection();
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OPEN_FILE,
openFileOnCompletion);
boolean formatFileOnCompletion = formatFileCheckButton.getSelection();
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_FORMAT_FILE,
formatFileOnCompletion);
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_USE_DEFAULT_OUTPUT_FILE,
true);
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FOLDER,
(String) null);
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OUTPUT_FILENAME,
(String) null);
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_OPEN_FILE, true);
configuration.setAttribute(
XSLLaunchConfigurationConstants.ATTR_FORMAT_FILE, false);
}
@Override
protected void updateResourceText(boolean useDefault) {
fileNameText.setEnabled(!useDefault);
if (useDefault)
fileNameText
.setText(defaultOutputFileName == null ? "" : defaultOutputFileName); //$NON-NLS-1$
else
fileNameText.setText(outputFileName == null ? defaultOutputFileName
: outputFileName);
super.updateResourceText(useDefault);
}
private void updateDefaultOutputFile() {
try {
IPath path = XSLTRuntime
.defaultOutputFileForInputFile(inputFilename);
// determine whether this path exists in the workspace
IFile[] files = ResourcesPlugin.getWorkspace().getRoot()
.findFilesForLocation(path);
if (files.length > 0) {// inside workspace
IPath p = new Path(files[0].getProject().getName());
p.append(files[0].getParent().getProjectRelativePath());
defaultResource = "${workspace_loc:/" + p.toString() + "}"; //$NON-NLS-1$//$NON-NLS-2$
} else {// outside workspace
IPath p = path.removeLastSegments(1);
defaultResource = p.toOSString();
}
defaultOutputFileName = path.lastSegment();
} catch (CoreException e) {
// do nothing
}
}
}