blob: 8e5f625346a378b57f35b4151a04a5abd43947f7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.ruta.ide.debug.ui.launchConfiguration;
import org.apache.uima.cas.CAS;
import org.apache.uima.ruta.ide.RutaIdeUIPlugin;
import org.apache.uima.ruta.ide.core.RutaNature;
import org.apache.uima.ruta.ide.core.builder.RutaProjectUtils;
import org.apache.uima.ruta.ide.launching.RutaLaunchConstants;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
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.dltk.core.IScriptProject;
import org.eclipse.dltk.core.PreferencesLookupDelegate;
import org.eclipse.dltk.debug.core.DLTKDebugPreferenceConstants;
import org.eclipse.dltk.debug.ui.launchConfigurations.MainLaunchConfigurationTab;
import org.eclipse.dltk.launching.AbstractScriptLaunchConfigurationDelegate;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
public class RutaMainLaunchConfigurationTab extends MainLaunchConfigurationTab {
private Text inputText;
private Button recursivelyButton;
private Text outputFolderText;
private Text viewText;
public RutaMainLaunchConfigurationTab(String mode) {
super(mode);
}
/*
* @seeorg.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#
* breakOnFirstLinePrefEnabled(org.eclipse.dltk.core.PreferencesLookupDelegate)
*/
@Override
protected boolean breakOnFirstLinePrefEnabled(PreferencesLookupDelegate delegate) {
return delegate.getBoolean(RutaIdeUIPlugin.PLUGIN_ID,
DLTKDebugPreferenceConstants.PREF_DBGP_BREAK_ON_FIRST_LINE);
}
/*
* @see
* org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#dbpgLoggingPrefEnabled
* (org.eclipse.dltk.core.PreferencesLookupDelegate)
*/
@Override
protected boolean dbpgLoggingPrefEnabled(PreferencesLookupDelegate delegate) {
return delegate.getBoolean(RutaIdeUIPlugin.PLUGIN_ID,
DLTKDebugPreferenceConstants.PREF_DBGP_ENABLE_LOGGING);
}
@Override
public String getNatureID() {
return RutaNature.NATURE_ID;
}
@Override
protected void doCreateControl(Composite composite) {
super.doCreateControl(composite);
// Input Resource Group
Group inputResourceGroup = new Group(composite, SWT.None);
inputResourceGroup.setText("Input Folder:");
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
.applyTo(inputResourceGroup);
GridLayout inputResourceGroupLayout = new GridLayout(4, false);
inputResourceGroup.setLayout(inputResourceGroupLayout);
inputText = new Text(inputResourceGroup, SWT.BORDER);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(3, 1)
.applyTo(inputText);
inputText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
updateLaunchConfigurationDialog();
}
});
Button browseInputResource = new Button(inputResourceGroup, SWT.NONE);
browseInputResource.setText("Browse ...");
browseInputResource.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(),
new WorkbenchLabelProvider(), new WorkbenchContentProvider());
dialog.setTitle("Select input folder");
dialog.setMessage("Select input folder");
dialog.setInput(getProject().getProject());
dialog.setInitialSelection(getWorkspaceRoot().findMember(inputText.getText()));
if (dialog.open() == IDialogConstants.OK_ID) {
IResource resource = (IResource) dialog.getFirstResult();
if (resource != null) {
String fileLoc = resource.getFullPath().toString();
inputText.setText(fileLoc);
}
}
}
});
recursivelyButton = new Button(inputResourceGroup, SWT.CHECK);
recursivelyButton.setText("Recursively");
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
.applyTo(recursivelyButton);
recursivelyButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
updateLaunchConfigurationDialog();
}
public void widgetDefaultSelected(SelectionEvent event) {
}
});
Label viewLabel = new Label(inputResourceGroup, SWT.NONE);
viewLabel.setText("View Name:");
viewText = new Text(inputResourceGroup, SWT.BORDER);
GridDataFactory.swtDefaults().hint(250, SWT.DEFAULT).align(SWT.LEFT, SWT.CENTER)
.grab(true, false).applyTo(viewText);
viewText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
updateLaunchConfigurationDialog();
}
});
Group outputFolderGroup = new Group(composite, SWT.None);
outputFolderGroup.setText("Output Folder:");
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
.applyTo(outputFolderGroup);
GridLayout outputFolderGroupLayout = new GridLayout(2, false);
outputFolderGroup.setLayout(outputFolderGroupLayout);
outputFolderText = new Text(outputFolderGroup, SWT.BORDER);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
.applyTo(outputFolderText);
outputFolderText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
updateLaunchConfigurationDialog();
}
});
Button browseOutputFolderButton = new Button(outputFolderGroup, SWT.NONE);
browseOutputFolderButton.setText("Browse ...");
browseOutputFolderButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String currentContainerString = outputFolderText.getText();
IContainer currentContainer = getContainer(currentContainerString);
ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(),
currentContainer, false, "Select output folder");
dialog.showClosedProjects(false);
dialog.open();
Object[] results = dialog.getResult();
if ((results != null) && (results.length > 0) && (results[0] instanceof IPath)) {
IPath path = (IPath) results[0];
String containerName = path.toOSString();
outputFolderText.setText(containerName);
}
}
});
}
private IContainer getContainer(String path) {
Path containerPath = new Path(path);
IResource resource = getWorkspaceRoot().findMember(containerPath);
if (resource instanceof IContainer)
return (IContainer) resource;
return null;
}
@Override
public void doInitializeForm(ILaunchConfiguration config) {
super.doInitializeForm(config);
IScriptProject proj = null;
try {
proj = AbstractScriptLaunchConfigurationDelegate.getScriptProject(config);
} catch (CoreException e) {
RutaIdeUIPlugin.error(e);
}
String defaultInputLocation = RutaProjectUtils.getDefaultInputLocation();
String defaultOutputLocation = RutaProjectUtils.getDefaultOutputLocation();
IResource inputFolder = proj.getProject().findMember(defaultInputLocation);
IResource outputFolder = proj.getProject().findMember(defaultOutputLocation);
try {
recursivelyButton.setSelection(config.getAttribute(RutaLaunchConstants.RECURSIVE, false));
} catch (CoreException e) {
recursivelyButton.setSelection(false);
}
try {
viewText.setText(config.getAttribute(RutaLaunchConstants.VIEW, CAS.NAME_DEFAULT_SOFA));
} catch (CoreException e) {
viewText.setText(CAS.NAME_DEFAULT_SOFA);
}
try {
inputText.setText(config.getAttribute(RutaLaunchConstants.INPUT_FOLDER, inputFolder
.getFullPath().toPortableString()));
} catch (CoreException e) {
inputText.setText(inputFolder.getFullPath().toPortableString());
}
try {
outputFolderText.setText(config.getAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolder
.getFullPath().toPortableString()));
} catch (CoreException e) {
outputFolderText.setText(outputFolder.getFullPath().toPortableString());
}
}
@Override
public void doPerformApply(ILaunchConfigurationWorkingCopy config) {
super.doPerformApply(config);
config.setAttribute(RutaLaunchConstants.RECURSIVE, recursivelyButton.getSelection());
config.setAttribute(RutaLaunchConstants.VIEW, viewText.getText());
config.setAttribute(RutaLaunchConstants.INPUT_FOLDER, inputText.getText());
config.setAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolderText.getText());
}
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy config) {
super.setDefaults(config);
IScriptProject proj = null;
try {
proj = AbstractScriptLaunchConfigurationDelegate.getScriptProject(config);
} catch (CoreException e) {
RutaIdeUIPlugin.error(e);
}
String defaultInputLocation = RutaProjectUtils.getDefaultInputLocation();
String defaultOutputLocation = RutaProjectUtils.getDefaultOutputLocation();
IResource inputFolder = proj.getProject().findMember(defaultInputLocation);
IResource outputFolder = proj.getProject().findMember(defaultOutputLocation);
config.setAttribute(RutaLaunchConstants.RECURSIVE, false);
config.setAttribute(RutaLaunchConstants.INPUT_FOLDER, inputFolder.getFullPath()
.toPortableString());
config.setAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolder.getFullPath()
.toPortableString());
}
}