org.eclipse.virgo.ide.runtime.internal.ui.ServerRuntimeComposite.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.virgo.ide.runtime.internal.ui.ServerRuntimeComposite.java

Source

/*******************************************************************************
 * Copyright (c) 2009, 2010 SpringSource, a divison of VMware, Inc.
 * 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:
 *     SpringSource, a division of VMware, Inc. - initial API and implementation
 *******************************************************************************/

package org.eclipse.virgo.ide.runtime.internal.ui;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.IVMInstallType;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jface.dialogs.Dialog;
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.resource.ImageDescriptor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.layout.GridLayout;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.virgo.ide.runtime.core.IServerRuntimeWorkingCopy;
import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
import org.eclipse.wst.server.core.internal.IInstallableRuntime;
import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.ui.internal.SWTUtil;
import org.eclipse.wst.server.ui.wizard.IWizardHandle;

/**
 * @author Christian Dupuis
 */
@SuppressWarnings("restriction")
public class ServerRuntimeComposite extends Composite {

    protected IRuntimeWorkingCopy runtimeWC;

    protected IServerRuntimeWorkingCopy runtime;

    protected IWizardHandle wizard;

    protected Text installDir;

    protected Text name;

    protected Combo vmCombo;

    protected List<IVMInstall> installedJREs;

    protected String[] jreNames;

    protected IInstallableRuntime ir;

    protected Label installLabel;

    protected Button install;

    protected ServerRuntimeComposite(Composite parent, IWizardHandle wizard, String wizardTitle,
            String wizardDescription) {
        this(parent, wizard, wizardTitle, wizardDescription, ServerUiImages.DESC_WIZB_SERVER);
    }

    protected ServerRuntimeComposite(Composite parent, IWizardHandle wizard, String wizardTitle,
            String wizardDescription, ImageDescriptor imageDescriptor) {
        super(parent, SWT.NONE);
        this.wizard = wizard;

        wizard.setTitle(wizardTitle);
        wizard.setDescription(wizardDescription);
        wizard.setImageDescriptor(imageDescriptor);

        createControl();
    }

    protected void setRuntime(IRuntimeWorkingCopy newRuntime) {
        if (newRuntime == null) {
            this.runtimeWC = null;
            this.runtime = null;
        } else {
            this.runtimeWC = newRuntime;
            this.runtime = (IServerRuntimeWorkingCopy) newRuntime.loadAdapter(IServerRuntimeWorkingCopy.class,
                    null);
        }

        if (this.runtimeWC == null) {
            this.ir = null;
            this.install.setEnabled(false);
            this.installLabel.setText("");
        } else {
            this.ir = ServerPlugin.findInstallableRuntime(this.runtimeWC.getRuntimeType().getId());
        }

        init();
        validate();
    }

    protected void createControl() {
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        setLayout(layout);
        setLayoutData(new GridData(GridData.FILL_BOTH));

        Label label = new Label(this, SWT.NONE);
        label.setText(ServerUiPlugin.getResourceString("runtimeName"));
        GridData data = new GridData();
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        this.name = new Text(this, SWT.BORDER);
        data = new GridData(GridData.FILL_HORIZONTAL);
        this.name.setLayoutData(data);
        this.name.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
                ServerRuntimeComposite.this.runtimeWC.setName(ServerRuntimeComposite.this.name.getText());
                validate();
            }
        });

        label = new Label(this, SWT.NONE);
        label.setText(ServerUiPlugin.getResourceString("installDir"));
        data = new GridData();
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        this.installDir = new Text(this, SWT.BORDER);
        data = new GridData(GridData.FILL_HORIZONTAL);
        this.installDir.setLayoutData(data);
        this.installDir.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
                ServerRuntimeComposite.this.runtimeWC
                        .setLocation(new Path(ServerRuntimeComposite.this.installDir.getText()));
                validate();
            }
        });

        Button browse = SWTUtil.createButton(this, ServerUiPlugin.getResourceString("browse"));
        browse.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent se) {
                DirectoryDialog dialog = new DirectoryDialog(ServerRuntimeComposite.this.getShell());
                dialog.setMessage(ServerUiPlugin.getResourceString("selectInstallDir"));
                dialog.setFilterPath(ServerRuntimeComposite.this.installDir.getText());
                String selectedDirectory = dialog.open();
                if (selectedDirectory != null) {
                    ServerRuntimeComposite.this.installDir.setText(selectedDirectory);
                }
            }
        });

        // Composite configuration = new Composite(this, SWT.BORDER);
        // GridLayout configLayout = new GridLayout();
        // configLayout.numColumns = 2;
        // configuration.setLayout(configLayout);
        // data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
        // configuration.setLayoutData(data);
        //
        // Label versionLabel = new Label(configuration, SWT.NONE);
        // versionLabel.setText(ServerUiPlugin.getResourceString("version"));
        // data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
        // versionLabel.setLayoutData(data);
        //
        // versionCombo = new Combo(configuration, SWT.DROP_DOWN | SWT.READ_ONLY);
        //
        // List<String> names = new ArrayList<String>();
        // for (ServerVirgoHandler version : ServerVersionAdapter.ALL_HANDLERS) {
        // names.add(version.getName());
        // }
        // versionCombo.setItems(names.toArray(new String[] {}));
        // data = new GridData(GridData.FILL_HORIZONTAL);
        //
        // versionCombo.setLayoutData(data);
        //
        // versionCombo.addSelectionListener(new SelectionListener() {
        // public void widgetSelected(SelectionEvent e) {
        // int sel = versionCombo.getSelectionIndex();
        // runtime.setVirgoVersion(ServerVersionAdapter.ALL_HANDLERS[sel]);
        // validate();
        // }
        //
        // public void widgetDefaultSelected(SelectionEvent e) {
        // widgetSelected(e);
        // }
        // });

        updateJREs();

        // JDK location
        label = new Label(this, SWT.NONE);
        label.setText(ServerUiPlugin.getResourceString("installedJRE"));
        data = new GridData();
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        this.vmCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
        this.vmCombo.setItems(this.jreNames);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
        this.vmCombo.setLayoutData(data);

        this.vmCombo.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                int sel = ServerRuntimeComposite.this.vmCombo.getSelectionIndex();
                IVMInstall vmInstall = null;
                if (sel > 0) {
                    vmInstall = ServerRuntimeComposite.this.installedJREs.get(sel - 1);
                }

                ServerRuntimeComposite.this.runtime.setVMInstall(vmInstall);
                validate();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }
        });

        Button button = SWTUtil.createButton(this, ServerUiPlugin.getResourceString("installedJREs"));
        button.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                String currentVM = ServerRuntimeComposite.this.vmCombo.getText();
                if (showPreferencePage()) {
                    updateJREs();
                    ServerRuntimeComposite.this.vmCombo.setItems(ServerRuntimeComposite.this.jreNames);
                    ServerRuntimeComposite.this.vmCombo.setText(currentVM);
                    if (ServerRuntimeComposite.this.vmCombo.getSelectionIndex() == -1) {
                        ServerRuntimeComposite.this.vmCombo.select(0);
                    }
                    validate();
                }
            }
        });

        init();
        validate();

        Dialog.applyDialogFont(this);

        this.name.forceFocus();
    }

    protected void updateJREs() {
        // get all installed JVMs
        this.installedJREs = new ArrayList<IVMInstall>();
        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++) {
                this.installedJREs.add(vmInstalls[j]);
            }
        }

        // get names
        size = this.installedJREs.size();
        this.jreNames = new String[size + 1];
        this.jreNames[0] = ServerUiPlugin.getResourceString("runtimeDefaultJRE");
        for (int i = 0; i < size; i++) {
            IVMInstall vmInstall = this.installedJREs.get(i);
            this.jreNames[i + 1] = vmInstall.getName();
        }
    }

    protected boolean showPreferencePage() {
        String id = "org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
        PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
        IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage")
                .findSubNode(id);
        PreferenceManager manager2 = new PreferenceManager();
        manager2.addToRoot(node);
        PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
        dialog.create();
        return dialog.open() == Window.OK;
    }

    protected void init() {
        if (this.name == null || this.runtime == null) {
            return;
        }

        if (this.runtimeWC.getName() != null) {
            this.name.setText(this.runtimeWC.getName());
        } else {
            this.name.setText("");
        }

        if (this.runtimeWC.getLocation() != null) {
            this.installDir.setText(this.runtimeWC.getLocation().toOSString());
        } else {
            this.installDir.setText("");
        }

        // updateConfiguration();

        // set selection
        if (this.runtime.isUsingDefaultJRE()) {
            this.vmCombo.select(0);
        } else {
            boolean found = false;
            int size = this.installedJREs.size();
            for (int i = 0; i < size; i++) {
                IVMInstall vmInstall = this.installedJREs.get(i);
                if (vmInstall.equals(this.runtime.getVMInstall())) {
                    this.vmCombo.select(i + 1);
                    found = true;
                }
            }
            if (!found) {
                this.vmCombo.select(0);
            }
        }
    }

    // private void updateConfiguration() {
    // int v = 0;
    // for (ServerVirgoHandler version : ServerVersionAdapter.ALL_HANDLERS) {
    // if (version.isHandlerFor(runtimeWC)) {
    // versionCombo.select(v);
    // break;
    // }
    // v++;
    // }
    // }

    protected void validate() {
        if (this.runtime == null) {
            this.wizard.setMessage("", IMessageProvider.ERROR);
            return;
        }

        IStatus status = this.runtimeWC.validate(null);
        if (status == null) {
            this.wizard.setMessage(null, IMessageProvider.NONE);
        } else if (status.isOK()) {
            this.wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
        } else if (status.getSeverity() == IStatus.WARNING) {
            this.wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
        } else {
            this.wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
        }
        this.wizard.update();
        // updateConfiguration();
    }
}