| /******************************************************************************* |
| * Copyright (c) 2010, 2011 EclipseSource 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: |
| * Holger Staudacher - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.libra.warproducts.ui.newwizard; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.*; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.debug.core.*; |
| import org.eclipse.debug.ui.DebugUITools; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.libra.warproducts.ui.Messages; |
| import org.eclipse.libra.warproducts.ui.WARProductConstants; |
| import org.eclipse.pde.internal.ui.PDEPlugin; |
| import org.eclipse.pde.internal.ui.PDEUIMessages; |
| import org.eclipse.pde.internal.ui.wizards.PDEWizardNewFileCreationPage; |
| import org.eclipse.pde.launching.IPDELauncherConstants; |
| import org.eclipse.pde.ui.launcher.EclipseLaunchShortcut; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| 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.help.IWorkbenchHelpSystem; |
| |
| public class WARProductFileWizardPage extends PDEWizardNewFileCreationPage { |
| |
| public final static int USE_DEFAULT = 0; |
| public final static int USE_LAUNCH_CONFIG = 1; |
| private static final String FILE_EXTENSION = "warproduct"; //$NON-NLS-1$ |
| |
| private Button basicButton; |
| private Button launchConfigButton; |
| private Combo launchConfigCombo; |
| private Group group; |
| |
| public WARProductFileWizardPage( final String pageName, |
| final IStructuredSelection selection ) |
| { |
| super( pageName, selection ); |
| setDescription( Messages.FileWizardPageNewFile ); |
| setTitle( Messages.FileWizardPageTitle ); |
| setFileExtension( FILE_EXTENSION ); |
| } |
| |
| protected void createAdvancedControls( final Composite parent ) { |
| group = new Group( parent, SWT.NONE ); |
| group.setText( Messages.FileWizardPageInit ); |
| group.setLayout( new GridLayout( 2, false ) ); |
| group.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); |
| basicButton = new Button( group, SWT.RADIO ); |
| GridData gd = new GridData(); |
| gd.horizontalSpan = 2; |
| basicButton.setLayoutData( gd ); |
| basicButton.setText( Messages.FileWizardPageCreate ); |
| launchConfigButton = new Button( group, SWT.RADIO ); |
| String buttonText = Messages.FileWizardPageLaunchConfig; |
| launchConfigButton.setText( buttonText ); |
| launchConfigButton.addSelectionListener( new SelectionAdapter() { |
| public void widgetSelected( final SelectionEvent e ) { |
| launchConfigCombo.setEnabled( launchConfigButton.getSelection() ); |
| } |
| } ); |
| launchConfigCombo = new Combo( group, SWT.SINGLE | SWT.READ_ONLY ); |
| launchConfigCombo.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); |
| launchConfigCombo.setItems( getLaunchConfigurations() ); |
| initializeState(); |
| } |
| |
| private void initializeState() { |
| launchConfigCombo.setEnabled( false ); |
| if( launchConfigCombo.getItemCount() > 0 ) { |
| launchConfigCombo.setText( launchConfigCombo.getItem( 0 ) ); |
| } |
| basicButton.setSelection( true ); |
| } |
| |
| private static String[] getLaunchConfigurations() { |
| ArrayList<String> list = new ArrayList<String>(); |
| try { |
| String eclipseConf = EclipseLaunchShortcut.CONFIGURATION_TYPE; |
| addLaunchConfigToListFromType( list, eclipseConf ); |
| // add osgi launch configs to the list |
| String osgiConf = IPDELauncherConstants.OSGI_CONFIGURATION_TYPE; |
| addLaunchConfigToListFromType( list, osgiConf ); |
| // add RAP launch configs to the list |
| String rapConf = WARProductConstants.RAP_LAUNCH_CONFIG_TYPE; |
| addLaunchConfigToListFromType( list, rapConf ); |
| } catch( final CoreException e ) { |
| PDEPlugin.logException( e ); |
| } |
| String[] launchConfigArray = new String[ list.size() ]; |
| return list.toArray( launchConfigArray ); |
| } |
| |
| private static void addLaunchConfigToListFromType( final List<String> list, |
| final String type ) |
| throws CoreException |
| { |
| ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); |
| ILaunchConfigurationType configType |
| = manager.getLaunchConfigurationType( type ); |
| ILaunchConfiguration[] configs |
| = manager.getLaunchConfigurations( configType ); |
| for( int i = 0; i < configs.length; i++ ) { |
| if( !DebugUITools.isPrivate( configs[ i ] ) ) { |
| list.add( configs[ i ].getName() ); |
| } |
| } |
| } |
| |
| public ILaunchConfiguration getSelectedLaunchConfiguration() { |
| ILaunchConfiguration result = null; |
| if( launchConfigButton.getSelection() ) { |
| String configName = launchConfigCombo.getText(); |
| try { |
| ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); |
| String eclipseConf = EclipseLaunchShortcut.CONFIGURATION_TYPE; |
| ILaunchConfigurationType type |
| = manager.getLaunchConfigurationType( eclipseConf ); |
| String osgiConf = IPDELauncherConstants.OSGI_CONFIGURATION_TYPE; |
| ILaunchConfigurationType type2 |
| = manager.getLaunchConfigurationType( osgiConf ); |
| String rapCong = WARProductConstants.RAP_LAUNCH_CONFIG_TYPE; |
| ILaunchConfigurationType type3 |
| = manager.getLaunchConfigurationType( rapCong ); |
| ILaunchConfiguration[] configs |
| = manager.getLaunchConfigurations( type ); |
| ILaunchConfiguration[] configs2 |
| = manager.getLaunchConfigurations( type2 ); |
| ILaunchConfiguration[] configs3 |
| = manager.getLaunchConfigurations( type3 ); |
| ILaunchConfiguration[] configurations |
| = new ILaunchConfiguration[ configs.length |
| + configs2.length |
| + configs3.length ]; |
| System.arraycopy( configs, 0, configurations, 0, configs.length ); |
| System.arraycopy( configs2, |
| 0, |
| configurations, |
| configs.length, |
| configs2.length ); |
| System.arraycopy( configs3, |
| 0, |
| configurations, |
| configs2.length, |
| configs3.length ); |
| for( int i = 0; i < configurations.length && result == null; i++ ) { |
| if( configurations[ i ].getName().equals( configName ) |
| && !DebugUITools.isPrivate( configurations[ i ] ) ) |
| { |
| result = configurations[ i ]; |
| } |
| } |
| } catch( final CoreException e ) { |
| PDEPlugin.logException( e ); |
| } |
| } |
| return result; |
| } |
| |
| public int getInitializationOption() { |
| int result = USE_LAUNCH_CONFIG; |
| if( basicButton.getSelection() ) { |
| result = USE_DEFAULT; |
| } |
| return result; |
| } |
| |
| public void createControl( final Composite parent ) { |
| super.createControl( parent ); |
| Dialog.applyDialogFont( group ); |
| IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem(); |
| String contextId = WARProductConstants.HELP_CONTEXT_NEWFILE_PAGE; |
| helpSystem.setHelp( getControl(), contextId ); |
| } |
| |
| protected boolean validatePage() { |
| boolean valid = super.validatePage(); |
| if( valid ) { |
| IPath containerPath = getContainerFullPath(); |
| valid = validateWarProductLocation( valid, containerPath ); |
| } |
| return valid; |
| } |
| |
| private boolean validateWarProductLocation( final boolean valid, |
| final IPath containerPath ) |
| { |
| boolean result = valid; |
| IContainer container = getSelectedContainer( containerPath ); |
| try { |
| IResource[] members = container.members(); |
| for( int i = 0; i < members.length && valid; i++ ) { |
| IResource member = members[ i ]; |
| String extension = member.getFileExtension(); |
| if( extension != null |
| && extension.equals( WARProductConstants.FILE_EXTENSION ) ) |
| { |
| result = false; |
| setErrorMessage( Messages.FileWizardPageError ); |
| } |
| } |
| } catch( final CoreException e ) { |
| MessageDialog.openError( getShell(), |
| PDEUIMessages.ProductExportWizard_error, |
| e.getMessage() ); |
| } |
| return result; |
| } |
| |
| private static IContainer getSelectedContainer( final IPath containerPath ) { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| IContainer container; |
| if( containerPath.segmentCount() > 1 ) { |
| container = root.getFolder( containerPath ); |
| } else { |
| container = root.getProject( containerPath.toOSString() ); |
| } |
| return container; |
| } |
| |
| } |