1 /******************************************************************************* 2 * Copyright (c) 2005, 2016 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 * EclipseSource Corporation - ongoing enhancements 14 * Martin Karpisek <martin.karpisek@gmail.com> - Bug 507831 15 *******************************************************************************/ 16 package org.eclipse.pde.internal.ui.wizards.product; 17 18 import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter; 19 20 import java.util.ArrayList; 21 import org.eclipse.core.resources.IProject; 22 import org.eclipse.core.resources.IResource; 23 import org.eclipse.core.runtime.CoreException; 24 import org.eclipse.core.runtime.IAdaptable; 25 import org.eclipse.debug.core.*; 26 import org.eclipse.debug.ui.DebugUITools; 27 import org.eclipse.jface.dialogs.Dialog; 28 import org.eclipse.jface.viewers.IStructuredSelection; 29 import org.eclipse.pde.core.plugin.*; 30 import org.eclipse.pde.internal.ui.*; 31 import org.eclipse.pde.internal.ui.wizards.PDEWizardNewFileCreationPage; 32 import org.eclipse.pde.launching.IPDELauncherConstants; 33 import org.eclipse.pde.ui.launcher.EclipseLaunchShortcut; 34 import org.eclipse.swt.SWT; 35 import org.eclipse.swt.layout.GridData; 36 import org.eclipse.swt.layout.GridLayout; 37 import org.eclipse.swt.widgets.*; 38 import org.eclipse.ui.PlatformUI; 39 40 public class ProductFileWizardPage extends PDEWizardNewFileCreationPage { 41 42 public final static int USE_DEFAULT = 0; 43 public final static int USE_PRODUCT = 1; 44 public final static int USE_LAUNCH_CONFIG = 2; 45 46 private static final String F_FILE_EXTENSION = "product"; //$NON-NLS-1$ 47 48 private Button fBasicButton; 49 private Button fProductButton; 50 private Combo fProductCombo; 51 private Button fLaunchConfigButton; 52 private Combo fLaunchConfigCombo; 53 private Group fGroup; 54 55 private IPluginModelBase fModel; 56 ProductFileWizardPage(String pageName, IStructuredSelection selection)57 public ProductFileWizardPage(String pageName, IStructuredSelection selection) { 58 super(pageName, selection); 59 setDescription(PDEUIMessages.ProductFileWizadPage_title); 60 setTitle(PDEUIMessages.NewProductFileWizard_title); 61 // Force the file extension to be 'product' 62 setFileExtension(F_FILE_EXTENSION); 63 64 initializeModel(selection); 65 } 66 initializeModel(IStructuredSelection selection)67 private void initializeModel(IStructuredSelection selection) { 68 Object selected = selection.getFirstElement(); 69 if (selected instanceof IAdaptable) { 70 IResource resource = ((IAdaptable) selected).getAdapter(IResource.class); 71 if (resource != null) { 72 IProject project = resource.getProject(); 73 fModel = PluginRegistry.findModel(project); 74 } 75 } 76 } 77 78 @Override createAdvancedControls(Composite parent)79 protected void createAdvancedControls(Composite parent) { 80 fGroup = new Group(parent, SWT.NONE); 81 fGroup.setText(PDEUIMessages.ProductFileWizadPage_groupTitle); 82 fGroup.setLayout(new GridLayout(2, false)); 83 fGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 84 85 fBasicButton = new Button(fGroup, SWT.RADIO); 86 GridData gd = new GridData(); 87 gd.horizontalSpan = 2; 88 fBasicButton.setLayoutData(gd); 89 fBasicButton.setText(PDEUIMessages.ProductFileWizadPage_basic); 90 91 fProductButton = new Button(fGroup, SWT.RADIO); 92 fProductButton.setText(PDEUIMessages.ProductFileWizadPage_existingProduct); 93 fProductButton.addSelectionListener(widgetSelectedAdapter(e -> fProductCombo.setEnabled(fProductButton.getSelection()))); 94 95 fProductCombo = new Combo(fGroup, SWT.SINGLE | SWT.READ_ONLY); 96 fProductCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 97 fProductCombo.setItems(TargetPlatform.getProducts()); 98 99 fLaunchConfigButton = new Button(fGroup, SWT.RADIO); 100 fLaunchConfigButton.setText(PDEUIMessages.ProductFileWizadPage_existingLaunchConfig); 101 fLaunchConfigButton.addSelectionListener(widgetSelectedAdapter(e -> fLaunchConfigCombo.setEnabled(fLaunchConfigButton.getSelection()))); 102 103 fLaunchConfigCombo = new Combo(fGroup, SWT.SINGLE | SWT.READ_ONLY); 104 fLaunchConfigCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 105 fLaunchConfigCombo.setItems(getLaunchConfigurations()); 106 107 initializeState(); 108 } 109 initializeState()110 private void initializeState() { 111 fLaunchConfigCombo.setEnabled(false); 112 if (fLaunchConfigCombo.getItemCount() > 0) 113 fLaunchConfigCombo.setText(fLaunchConfigCombo.getItem(0)); 114 115 if (fModel != null && fModel.getPluginBase().getId() != null) { 116 IPluginExtension[] extensions = fModel.getPluginBase().getExtensions(); 117 for (IPluginExtension extension : extensions) { 118 String point = extension.getPoint(); 119 if ("org.eclipse.core.runtime.products".equals(point)) { //$NON-NLS-1$ 120 String id = extension.getId(); 121 if (id != null) { 122 String full = fModel.getPluginBase().getId() + "." + id; //$NON-NLS-1$ 123 if (fProductCombo.indexOf(full) != -1) { 124 fProductCombo.setText(full); 125 fProductButton.setSelection(true); 126 return; 127 } 128 } 129 } 130 } 131 } 132 133 fBasicButton.setSelection(true); 134 135 fProductCombo.setEnabled(false); 136 if (fProductCombo.getItemCount() > 0) 137 fProductCombo.setText(fProductCombo.getItem(0)); 138 139 } 140 getLaunchConfigurations()141 private String[] getLaunchConfigurations() { 142 ArrayList<String> list = new ArrayList<>(); 143 try { 144 ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); 145 ILaunchConfigurationType type = manager.getLaunchConfigurationType(EclipseLaunchShortcut.CONFIGURATION_TYPE); 146 ILaunchConfiguration[] configs = manager.getLaunchConfigurations(type); 147 for (int i = 0; i < configs.length; i++) { 148 if (!DebugUITools.isPrivate(configs[i])) 149 list.add(configs[i].getName()); 150 } 151 // add osgi launch configs to the list 152 type = manager.getLaunchConfigurationType(IPDELauncherConstants.OSGI_CONFIGURATION_TYPE); 153 configs = manager.getLaunchConfigurations(type); 154 for (int i = 0; i < configs.length; i++) { 155 if (!DebugUITools.isPrivate(configs[i])) 156 list.add(configs[i].getName()); 157 } 158 } catch (CoreException e) { 159 PDEPlugin.logException(e); 160 } 161 return list.toArray(new String[list.size()]); 162 } 163 getSelectedLaunchConfiguration()164 public ILaunchConfiguration getSelectedLaunchConfiguration() { 165 if (!fLaunchConfigButton.getSelection()) 166 return null; 167 168 String configName = fLaunchConfigCombo.getText(); 169 try { 170 ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); 171 ILaunchConfigurationType type = manager.getLaunchConfigurationType(EclipseLaunchShortcut.CONFIGURATION_TYPE); 172 ILaunchConfigurationType type2 = manager.getLaunchConfigurationType(IPDELauncherConstants.OSGI_CONFIGURATION_TYPE); 173 ILaunchConfiguration[] configs = manager.getLaunchConfigurations(type); 174 ILaunchConfiguration[] configs2 = manager.getLaunchConfigurations(type2); 175 ILaunchConfiguration[] configurations = new ILaunchConfiguration[configs.length + configs2.length]; 176 System.arraycopy(configs, 0, configurations, 0, configs.length); 177 System.arraycopy(configs2, 0, configurations, configs.length, configs2.length); 178 for (int i = 0; i < configurations.length; i++) { 179 if (configurations[i].getName().equals(configName) && !DebugUITools.isPrivate(configurations[i])) 180 return configurations[i]; 181 } 182 } catch (CoreException e) { 183 PDEPlugin.logException(e); 184 } 185 return null; 186 } 187 getSelectedProduct()188 public String getSelectedProduct() { 189 return fProductButton.getSelection() ? fProductCombo.getText() : null; 190 } 191 getInitializationOption()192 public int getInitializationOption() { 193 if (fBasicButton.getSelection()) 194 return USE_DEFAULT; 195 if (fProductButton.getSelection()) 196 return USE_PRODUCT; 197 return USE_LAUNCH_CONFIG; 198 } 199 200 @Override createControl(Composite parent)201 public void createControl(Composite parent) { 202 super.createControl(parent); 203 Dialog.applyDialogFont(fGroup); 204 205 PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.PRODUCT_FILE_PAGE); 206 } 207 208 } 209