/** * <copyright> * </copyright> * * */ package org.dresdenocl.debug.ui.launch; import org.dresdenocl.debug.ui.OclDebugUIPlugin; import org.dresdenocl.language.ocl.resource.ocl.mopp.OclMetaInformation; import org.eclipse.core.resources.IFile; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; /** * A class that provides the main tab to parameterize launch configurations. Set * the overrideLaunchConfigurationMainTab option to false to customize this * class. */ public class OclLaunchConfigurationMainTab extends org.eclipse.debug.ui.AbstractLaunchConfigurationTab { private org.eclipse.swt.widgets.Label uriLabel; private org.eclipse.swt.widgets.Text uriText; private org.eclipse.swt.widgets.Button workspaceButton; private org.eclipse.swt.widgets.Button fileSystemButton; public void createControl(org.eclipse.swt.widgets.Composite parent) { org.eclipse.swt.widgets.Composite comp = new org.eclipse.swt.widgets.Composite(parent, org.eclipse.swt.SWT.NONE); org.eclipse.swt.layout.GridLayout layout = new org.eclipse.swt.layout.GridLayout(1, true); comp.setLayout(layout); org.eclipse.swt.layout.GridData gd = new org.eclipse.swt.layout.GridData( org.eclipse.swt.layout.GridData.FILL_BOTH); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = org.eclipse.swt.SWT.FILL; comp.setLayoutData(gd); org.eclipse.swt.widgets.Group group = new org.eclipse.swt.widgets.Group(comp, org.eclipse.swt.SWT.NONE); group.setText("Launch parameters"); group.setLayout(new org.eclipse.swt.layout.GridLayout(3, false)); gd = new org.eclipse.swt.layout.GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = org.eclipse.swt.SWT.FILL; group.setLayoutData(gd); uriLabel = new org.eclipse.swt.widgets.Label(group, org.eclipse.swt.SWT.NONE); uriLabel.setText("Resource to execute:"); gd = new org.eclipse.swt.layout.GridData(); uriLabel.setLayoutData(gd); uriText = new org.eclipse.swt.widgets.Text(group, org.eclipse.swt.SWT.SINGLE | org.eclipse.swt.SWT.BORDER); uriText.setLayoutData(new org.eclipse.swt.layout.GridData( org.eclipse.swt.layout.GridData.FILL_HORIZONTAL)); uriText.addModifyListener(new org.eclipse.swt.events.ModifyListener() { public void modifyText(org.eclipse.swt.events.ModifyEvent evt) { updateLaunchConfigurationDialog(); } }); gd = new org.eclipse.swt.layout.GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = org.eclipse.swt.SWT.FILL; gd.horizontalSpan = 2; uriText.setLayoutData(gd); workspaceButton = new org.eclipse.swt.widgets.Button(group, org.eclipse.swt.SWT.PUSH); workspaceButton.setText("Workspace..."); workspaceButton .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent event) { handleBrowseWorkspace(); } }); gd = new org.eclipse.swt.layout.GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = org.eclipse.swt.SWT.RIGHT; gd.horizontalSpan = 2; workspaceButton.setLayoutData(gd); fileSystemButton = new org.eclipse.swt.widgets.Button(group, org.eclipse.swt.SWT.PUSH); fileSystemButton.setText("File System..."); fileSystemButton .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent event) { handleBrowseFileSystem(); } }); gd = new org.eclipse.swt.layout.GridData(); gd.horizontalAlignment = org.eclipse.swt.SWT.RIGHT; fileSystemButton.setLayoutData(gd); setControl(comp); } public void setDefaults( org.eclipse.debug.core.ILaunchConfigurationWorkingCopy configuration) { } public void initializeFrom( org.eclipse.debug.core.ILaunchConfiguration configuration) { try { uriText.setText(configuration.getAttribute(OclDebugUIPlugin.OCL_URI, "")); // more initialization code can be added here } catch (org.eclipse.core.runtime.CoreException e) { org.dresdenocl.language.ocl.resource.ocl.mopp.OclPlugin.logError( "Can't initialize launch configuration tab.", e); } } public void performApply( org.eclipse.debug.core.ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(OclDebugUIPlugin.OCL_URI, uriText.getText()); } public String getName() { return "Main"; } @Override public org.eclipse.swt.graphics.Image getImage() { // return // org.dresdenocl.language.ocl.resource.ocl.ui.OclImageProvider.INSTANCE.getImage("icons/launch_tab_main_icon.gif"); return null; } protected void handleBrowseFileSystem() { org.eclipse.swt.widgets.FileDialog dialog = new org.eclipse.swt.widgets.FileDialog(getControl().getShell()); dialog.setText("Select resource to launch"); String result = dialog.open(); if (result != null) { uriText.setText(org.eclipse.emf.common.util.URI.createFileURI(result) .toString()); } } protected void handleBrowseWorkspace() { ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getControl().getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider()); dialog.setInput(org.eclipse.core.resources.ResourcesPlugin.getWorkspace() .getRoot()); dialog.addFilter(new org.eclipse.jface.viewers.ViewerFilter() { @Override public boolean select(org.eclipse.jface.viewers.Viewer viewer, Object parentElement, Object element) { if (element instanceof IFile) { org.eclipse.core.resources.IFile file = (org.eclipse.core.resources.IFile) element; return file.getFileExtension().equals( new OclMetaInformation().getSyntaxName()); } return true; } }); dialog.setAllowMultiple(false); dialog.setTitle("Select model to launch"); dialog.setMessage("Resource to launch"); dialog.setValidator(new org.eclipse.ui.dialogs.ISelectionStatusValidator() { public org.eclipse.core.runtime.IStatus validate(Object[] selection) { if (selection.length > 0 && selection[0] instanceof org.eclipse.core.resources.IFile) return new org.eclipse.core.runtime.Status( org.eclipse.core.runtime.IStatus.OK, OclDebugUIPlugin.PLUGIN_ID, org.eclipse.core.runtime.IStatus.OK, "", null); return new org.eclipse.core.runtime.Status( org.eclipse.core.runtime.IStatus.ERROR, OclDebugUIPlugin.PLUGIN_ID, org.eclipse.core.runtime.IStatus.ERROR, "", null); } }); if (dialog.open() == org.eclipse.jface.window.Window.OK) { org.eclipse.core.resources.IFile file = (org.eclipse.core.resources.IFile) dialog.getFirstResult(); uriText.setText(org.eclipse.emf.common.util.URI .createPlatformResourceURI( file.getFullPath().makeRelative().toString(), true).toString()); } } }