| /*************************************************************************************************** |
| * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation |
| * |
| **************************************************************************************************/ |
| package org.eclipse.jst.server.generic.ui.internal; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jdt.launching.IVMInstall; |
| import org.eclipse.jdt.launching.IVMInstallType; |
| import org.eclipse.jdt.launching.JavaRuntime; |
| import org.eclipse.jface.dialogs.IMessageProvider; |
| import org.eclipse.jface.preference.IPreferenceNode; |
| import org.eclipse.jface.preference.PreferenceDialog; |
| import org.eclipse.jface.preference.PreferenceManager; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.jst.server.generic.core.internal.GenericServerRuntime; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.BusyIndicator; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Link; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.server.ui.wizard.IWizardHandle; |
| |
| |
| public class JRESelectDecorator implements GenericServerCompositeDecorator { |
| private List installedJREs; |
| private String[] jreNames; |
| private GenericServerRuntime fRuntime; |
| private IWizardHandle fWizard; |
| public JRESelectDecorator(GenericServerRuntime runtime, IWizardHandle wizardHandle){ |
| super(); |
| fRuntime = runtime; |
| fWizard = wizardHandle; |
| } |
| |
| public void decorate(final GenericServerComposite composite) { |
| updateJREs(); |
| Link link = new Link(composite,SWT.NONE); |
| link.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,false,3,1)); |
| link.setText(GenericServerUIMessages.installed_jre_link); |
| |
| Label label = new Label(composite, SWT.NONE); |
| label.setText(GenericServerUIMessages.jre_select_label); |
| |
| final Combo combo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); |
| combo.setItems(jreNames); |
| GridData data = new GridData(SWT.FILL,SWT.NONE,false,false,2,1); |
| |
| combo.setLayoutData(data); |
| |
| combo.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent e) { |
| int sel = combo.getSelectionIndex(); |
| IVMInstall vmInstall = null; |
| if (sel > 0) |
| vmInstall = (IVMInstall) installedJREs.get(sel - 1); |
| |
| fRuntime.setVMInstall(vmInstall); |
| validate(); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) { |
| widgetSelected(e); |
| } |
| }); |
| |
| link.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| String currentVM = combo.getText(); |
| if (showPreferencePage(composite)) { |
| updateJREs(); |
| combo.setItems(jreNames); |
| combo.setText(currentVM); |
| if (combo.getSelectionIndex() == -1) |
| combo.select(0); |
| } |
| } |
| }); |
| |
| if (fRuntime!=null){ |
| if(fRuntime.isUsingDefaultJRE()){ |
| combo.select(0); |
| }else{ |
| combo.setText(fRuntime.getVMInstall().getName()); |
| } |
| } |
| } |
| |
| |
| protected boolean showPreferencePage(GenericServerComposite composite) { |
| PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager(); |
| IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage"); //$NON-NLS-1$//$NON-NLS-2$ |
| PreferenceManager manager2 = new PreferenceManager(); |
| manager2.addToRoot(node); |
| final PreferenceDialog dialog = new PreferenceDialog(composite.getShell(), manager2); |
| final boolean[] result = new boolean[] { false }; |
| BusyIndicator.showWhile(composite.getDisplay(), new Runnable() { |
| public void run() { |
| dialog.create(); |
| if (dialog.open() == Window.OK) |
| result[0] = true; |
| } |
| }); |
| return result[0]; |
| } |
| |
| protected void updateJREs() { |
| installedJREs = new ArrayList(); |
| IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes(); |
| int size = vmInstallTypes.length; |
| for (int i = 0; i < size; i++) { |
| IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls(); |
| int size2 = vmInstalls.length; |
| for (int j = 0; j < size2; j++) { |
| installedJREs.add(vmInstalls[j]); |
| } |
| } |
| |
| size = installedJREs.size(); |
| jreNames = new String[size+1]; |
| jreNames[0] = GenericServerUIMessages.defaultJRE; |
| for (int i = 0; i < size; i++) { |
| IVMInstall vmInstall = (IVMInstall) installedJREs.get(i); |
| jreNames[i+1] = vmInstall.getName(); |
| } |
| } |
| |
| |
| |
| public boolean validate() { |
| IStatus status = fRuntime.validate(); |
| if( status.getSeverity() != IStatus.OK ) |
| { |
| fWizard.setMessage(status.getMessage(), IMessageProvider.ERROR); |
| fWizard.update(); |
| return true; |
| } |
| |
| fWizard.setMessage("", IMessageProvider.NONE); //$NON-NLS-1$ |
| fWizard.update(); |
| return false; |
| |
| } |
| } |