blob: c6550713146904362f5421652e7af2f00ff40b8d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2018 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.macbundler;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.IStructuredSelection;
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.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class BundleWizardPage1 extends BundleWizardBasePage {
static String[] JVMS = { "1.3+", //$NON-NLS-1$
"1.3*", //$NON-NLS-1$
"1.4.2", //$NON-NLS-1$
"1.4+", //$NON-NLS-1$
"1.4*", //$NON-NLS-1$
"1.5+", //$NON-NLS-1$
"1.5*", //$NON-NLS-1$
"1.6+", //$NON-NLS-1$
"1.6*" //$NON-NLS-1$
};
ILaunchConfiguration[] fConfigurations = new ILaunchConfiguration[0];
Combo fLocation;
Combo fLaunchConfigs;
Combo fJVMVersion;
Text fAppName;
Text fMainClass;
Text fArguments;
Text fIconFileName;
Button fUseSWT;
public BundleWizardPage1(BundleDescription bd) {
super("page1", bd); //$NON-NLS-1$
}
@Override
public void createContents(Composite c) {
final Shell shell = c.getShell();
Composite c1 = createComposite(c, 2);
createLabel(c1, Util.getString("page1.launchConfig.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
fLaunchConfigs = new Combo(c1, SWT.READ_ONLY);
fillCombo(fLaunchConfigs);
fLaunchConfigs.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int ix = fLaunchConfigs.getSelectionIndex();
if (ix > 0 && ix < fConfigurations.length) {
fBundleDescription.clear();
fBundleDescription.inititialize(fConfigurations[ix]);
}
}
});
Group c2 = createGroup(c, "Main", 2); //$NON-NLS-1$
createLabel(c2, Util.getString("page1.mainClass.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
Composite c7a = createHBox(c2);
fMainClass = createText(c7a, MAINCLASS, 1);
Button b1 = createButton(c7a, SWT.NONE, Util.getString("page1.mainClass.chooseButton.label")); //$NON-NLS-1$
b1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
MessageBox mb = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
mb.setMessage(Util.getString("page1.mainClass.dialog.message")); //$NON-NLS-1$
mb.setText(Util.getString("page1.mainClass.dialog.title")); //$NON-NLS-1$
mb.open();
}
});
createLabel(c2, Util.getString("page1.arguments.label"), GridData.VERTICAL_ALIGN_BEGINNING); //$NON-NLS-1$
fArguments = createText(c2, ARGUMENTS, 2);
Group c5 = createGroup(c, "Destination", 2); //$NON-NLS-1$
createLabel(c5, Util.getString("page1.appName.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
fAppName = createText(c5, APPNAME, 1);
createLabel(c5, Util.getString("page1.appFolder.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
Composite c3a = createHBox(c5);
fLocation = createCombo(c3a, DESTINATIONDIRECTORY);
final Button browse = createButton(c3a, SWT.NONE, Util.getString("page1.appFolder.browseButton.label")); //$NON-NLS-1$
browse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dd = new DirectoryDialog(browse.getShell(), SWT.SAVE | SWT.SHEET);
dd.setMessage(Util.getString("page1.appFolder.browseDialog.message")); //$NON-NLS-1$
dd.setText(Util.getString("page1.appFolder.browseDialog.title")); //$NON-NLS-1$
String name = dd.open();
if (name != null) {
fLocation.setText(name);
}
}
});
Group g6 = createGroup(c, "Options", 2); //$NON-NLS-1$
createLabel(g6, Util.getString("page1.jvm.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
Composite c8 = createComposite(g6, 4);
fJVMVersion = new Combo(c8, SWT.READ_ONLY);
for (int i = 0; i < JVMS.length; i++) {
fJVMVersion.add(JVMS[i]);
}
fJVMVersion.setText(JVMS[4]);
hookField(fJVMVersion, JVMVERSION);
createLabel(c8, " ", GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
createLabel(c8, Util.getString("page1.useSWT.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
fUseSWT = createButton(c8, SWT.CHECK, null);
hookButton(fUseSWT, USES_SWT);
createLabel(g6, Util.getString("page1.appIcon.label"), GridData.VERTICAL_ALIGN_CENTER); //$NON-NLS-1$
Composite c7 = createComposite(g6, 2);
fIconFileName = createText(c7, ICONFILE, 1);
final Button b = createButton(c7, SWT.NONE, Util.getString("page1.appIcon.chooseButton.label")); //$NON-NLS-1$
b.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog fd = new FileDialog(b.getShell(), SWT.OPEN | SWT.SHEET);
fd.setText(Util.getString("page1.appIcon.chooseDialog.title")); //$NON-NLS-1$
fd.setFilterExtensions(new String[] { "icns" }); //$NON-NLS-1$
String name = fd.open();
if (name != null) {
fIconFileName.setText(name);
}
}
});
}
@Override
void enterPage() {
super.enterPage();
initCombo(fLaunchConfigs);
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (fAppName != null) {
fAppName.setText(fBundleDescription.get(APPNAME, "")); //$NON-NLS-1$
}
if (fMainClass != null) {
fMainClass.setText(fBundleDescription.get(MAINCLASS, "")); //$NON-NLS-1$
}
if (fJVMVersion != null) {
fJVMVersion.setText(fBundleDescription.get(JVMVERSION, "")); //$NON-NLS-1$
}
if (fUseSWT != null) {
fUseSWT.setSelection(fBundleDescription.get(USES_SWT, false));
}
}
@Override
public boolean isPageComplete() {
return fAppName != null && fAppName.getText().length() > 0 && fLocation.getText().length() > 0;
}
// private stuff
private void collectLaunchConfigs() {
ArrayList<ILaunchConfiguration> configs = new ArrayList<ILaunchConfiguration>();
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
try {
ILaunchConfiguration[] configurations = manager.getLaunchConfigurations(type);
for (int i = 0; i < configurations.length; i++) {
ILaunchConfiguration configuration = configurations[i];
if (BundleDescription.verify(configuration)) {
configs.add(configuration);
}
}
}
catch (CoreException e) {
//
}
fConfigurations = configs.toArray(new ILaunchConfiguration[configs.size()]);
Arrays.sort(fConfigurations, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
ILaunchConfiguration lc1 = (ILaunchConfiguration) o1;
ILaunchConfiguration lc2 = (ILaunchConfiguration) o2;
return lc1.getName().compareTo(lc2.getName());
}
@Override
public boolean equals(Object obj) {
return false;
}
});
}
private void fillCombo(Combo c) {
collectLaunchConfigs();
for (int i = 0; i < fConfigurations.length; i++) {
ILaunchConfiguration configuration = fConfigurations[i];
c.add(configuration.getName());
}
}
private void initCombo(Combo c) {
IStructuredSelection sel = ((MacBundleWizard) getWizard()).getSelection();
Object o = sel.getFirstElement();
if (o instanceof IJavaElement) {
IJavaProject project = ((IJavaElement) o).getJavaProject();
if (project != null) {
for (int i = 0; i < fConfigurations.length; i++) {
ILaunchConfiguration configuration = fConfigurations[i];
if (BundleDescription.matches(configuration, project)) {
c.setText(configuration.getName());
fBundleDescription.inititialize(configuration);
return;
}
}
}
}
}
}