| /******************************************************************************* |
| * Copyright (c) 2004, 2006 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 |
| *******************************************************************************/ |
| /* |
| |
| |
| */ |
| package org.eclipse.jem.internal.ui.proxy.remote; |
| |
| import java.text.MessageFormat; |
| |
| import org.eclipse.core.resources.*; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; |
| import org.eclipse.jdt.core.*; |
| import org.eclipse.jdt.debug.ui.launchConfigurations.JavaLaunchTab; |
| import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; |
| import org.eclipse.jdt.ui.JavaElementLabelProvider; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.*; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.dialogs.ElementListSelectionDialog; |
| import org.eclipse.ui.ide.IDE; |
| |
| import org.eclipse.jem.internal.proxy.core.ProxyPlugin; |
| |
| /** |
| * |
| * @since 1.0.0 |
| */ |
| public class LocalLaunchProjectTab extends JavaLaunchTab { |
| |
| // Project UI widgets |
| protected Label fProjLabel; |
| protected Text fProjText; |
| protected Button fProjButton; |
| |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite) |
| */ |
| public void createControl(Composite parent) { |
| Font font = parent.getFont(); |
| |
| Composite comp = new Composite(parent, SWT.NONE); |
| setControl(comp); |
| GridLayout topLayout = new GridLayout(); |
| comp.setLayout(topLayout); |
| GridData gd; |
| |
| createVerticalSpacer(comp, 1); |
| |
| Composite projComp = new Composite(comp, SWT.NONE); |
| GridLayout projLayout = new GridLayout(); |
| projLayout.numColumns = 2; |
| projLayout.marginHeight = 0; |
| projLayout.marginWidth = 0; |
| projComp.setLayout(projLayout); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| projComp.setLayoutData(gd); |
| projComp.setFont(font); |
| |
| fProjLabel = new Label(projComp, SWT.NONE); |
| fProjLabel.setText(ProxyRemoteUIMessages.LocalLaunchProjectTab_Project); |
| gd = new GridData(); |
| gd.horizontalSpan = 2; |
| fProjLabel.setLayoutData(gd); |
| fProjLabel.setFont(font); |
| |
| fProjText = new Text(projComp, SWT.SINGLE | SWT.BORDER); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| fProjText.setLayoutData(gd); |
| fProjText.setFont(font); |
| fProjText.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent evt) { |
| updateLaunchConfigurationDialog(); |
| } |
| }); |
| |
| fProjButton = createPushButton(projComp, ProxyRemoteUIMessages.LocalLaunchProjectTab_Browse, null); |
| fProjButton.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent evt) { |
| handleProjectButtonSelected(); |
| } |
| }); |
| |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration) |
| */ |
| public void initializeFrom(ILaunchConfiguration config) { |
| super.initializeFrom(config); |
| updateProjectFromConfig(config); |
| } |
| |
| protected void updateProjectFromConfig(ILaunchConfiguration config) { |
| String projectName = ""; //$NON-NLS-1$ |
| try { |
| projectName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ |
| } catch (CoreException ce) { |
| ProxyPlugin.getPlugin().getLogger().log(ce); |
| } |
| fProjText.setText(projectName); |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy) |
| */ |
| public void performApply(ILaunchConfigurationWorkingCopy config) { |
| config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, fProjText.getText()); |
| } |
| |
| /** |
| * Show a dialog that lets the user select a project. This in turn provides |
| * context for the main type, allowing the user to key a main type name, or |
| * constraining the search for main types to the specified project. |
| */ |
| protected void handleProjectButtonSelected() { |
| IJavaProject project = chooseJavaProject(); |
| if (project == null) { |
| return; |
| } |
| |
| String projectName = project.getElementName(); |
| fProjText.setText(projectName); |
| } |
| |
| /** |
| * Realize a Java Project selection dialog and return the first selected project, |
| * or null if there was none. |
| */ |
| protected IJavaProject chooseJavaProject() { |
| IJavaProject[] projects; |
| try { |
| projects= JavaCore.create(getWorkspaceRoot()).getJavaProjects(); |
| } catch (JavaModelException e) { |
| ProxyPlugin.getPlugin().getLogger().log(e); |
| projects= new IJavaProject[0]; |
| } |
| |
| ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); |
| ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider); |
| dialog.setTitle(ProxyRemoteUIMessages.LocalLaunchProjectTab_Project_Selection); |
| dialog.setMessage(ProxyRemoteUIMessages.LocalLaunchProjectTab_ChooseProject); |
| dialog.setElements(projects); |
| |
| IJavaProject javaProject = getJavaProject(); |
| if (javaProject != null) { |
| dialog.setInitialSelections(new Object[] { javaProject }); |
| } |
| if (dialog.open() == Window.OK) { |
| return (IJavaProject) dialog.getFirstResult(); |
| } |
| return null; |
| } |
| |
| /** |
| * Return the IJavaProject corresponding to the project name in the project name |
| * text field, or null if the text does not match a project name. |
| */ |
| protected IJavaProject getJavaProject() { |
| String projectName = fProjText.getText().trim(); |
| if (projectName.length() < 1) { |
| return null; |
| } |
| return getJavaModel().getJavaProject(projectName); |
| } |
| |
| /** |
| * Convenience method to get the workspace root. |
| */ |
| private IWorkspaceRoot getWorkspaceRoot() { |
| return ResourcesPlugin.getWorkspace().getRoot(); |
| } |
| |
| /** |
| * Convenience method to get access to the java model. |
| */ |
| private IJavaModel getJavaModel() { |
| return JavaCore.create(getWorkspaceRoot()); |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(ILaunchConfiguration) |
| */ |
| public boolean isValid(ILaunchConfiguration config) { |
| |
| setErrorMessage(null); |
| setMessage(null); |
| |
| String name = fProjText.getText().trim(); |
| if (name.length() > 0) { |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| IStatus status = workspace.validateName(name, IResource.PROJECT); |
| if (status.isOK()) { |
| IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(name); |
| if (!project.exists()) { |
| setErrorMessage(MessageFormat.format(ProxyRemoteUIMessages.LocalLaunchProjectTab_ProjectNotExist_ERROR_, new String[] {name})); |
| return false; |
| } |
| if (!project.isOpen()) { |
| setErrorMessage(MessageFormat.format(ProxyRemoteUIMessages.LocalLaunchProjectTab_ProjectNotOpen_ERROR_, new String[] {name})); |
| return false; |
| } |
| } else { |
| setErrorMessage(MessageFormat.format(ProxyRemoteUIMessages.LocalLaunchProjectTab_ProjectValidateError_ERROR_, new String[]{status.getMessage()})); |
| return false; |
| } |
| } |
| |
| return false; // Kludge. We always return false so that "Run" button is never enabled. We can't launch these configurations using the standard way. Only through ProxyLaunchSupport. |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy) |
| */ |
| public void setDefaults(ILaunchConfigurationWorkingCopy config) { |
| IJavaElement javaElement = getContext(); |
| if (javaElement != null) { |
| initializeJavaProject(javaElement, config); |
| } else { |
| // We set empty attributes for project so that when one config is |
| // compared to another, the existence of empty attributes doesn't cause an |
| // incorrect result (the performApply() method can result in empty values |
| // for these attributes being set on a config if there is nothing in the |
| // corresponding text boxes) |
| config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() |
| */ |
| public String getName() { |
| return ProxyRemoteUIMessages.LocalLaunchProjectTab_name; |
| } |
| |
| /** |
| * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() |
| */ |
| public Image getImage() { |
| return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT); |
| } |
| } |