org.eclipse.php.internal.server.ui.ServerEditDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.php.internal.server.ui.ServerEditDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2009 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *     Zend Technologies
 *******************************************************************************/
package org.eclipse.php.internal.server.ui;

import java.util.ArrayList;
import java.util.Iterator;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.php.internal.server.PHPServerUIMessages;
import org.eclipse.php.internal.server.core.Server;
import org.eclipse.php.internal.ui.util.SWTUtil;
import org.eclipse.php.internal.ui.wizards.CompositeFragment;
import org.eclipse.php.internal.ui.wizards.IControlHandler;
import org.eclipse.php.internal.ui.wizards.WizardFragmentsFactoryRegistry;
import org.eclipse.php.ui.wizards.ICompositeFragmentFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

public class ServerEditDialog extends TitleAreaDialog implements IControlHandler {

    protected static final String FRAGMENT_GROUP_ID = "org.eclipse.php.server.ui.serverWizardAndComposite"; //$NON-NLS-1$
    private Server server;
    private ArrayList runtimeComposites;
    private SelectionListener tabsListener;
    private CTabFolder tabs;
    private String tabID;

    /**
     * Instantiate a new server edit dialog.
     * 
     * @param parentShell
     *            the parent SWT shell
     * @param server
     *            An assigned IServer
     */
    public ServerEditDialog(Shell parentShell, Server server) {
        super(parentShell);
        setShellStyle(getShellStyle() | SWT.RESIZE);

        this.server = server;
        runtimeComposites = new ArrayList(3);
    }

    /**
     * Instantiate a new server edit dialog.
     * 
     * @param parentShell
     *            the parent SWT shell
     * @param server
     *            An assigned IServer
     * @param init
     *            selected tabe ID.
     */
    public ServerEditDialog(Shell parentShell, Server server, String tabID) {
        this(parentShell, server);
        this.tabID = tabID;
    }

    protected Control createDialogArea(Composite parent) {
        // Create a tabbed container that will hold all the fragments
        tabs = SWTUtil.createTabFolder(parent);
        ICompositeFragmentFactory[] factories = WizardFragmentsFactoryRegistry
                .getFragmentsFactories(FRAGMENT_GROUP_ID);
        for (ICompositeFragmentFactory element : factories) {
            CTabItem tabItem = new CTabItem(tabs, SWT.BORDER);
            CompositeFragment fragment = element.createComposite(tabs, this);
            fragment.setData(server);
            tabItem.setText(fragment.getDisplayName());
            tabItem.setControl(fragment);
            tabItem.setData(fragment.getId());
            runtimeComposites.add(fragment);
        }

        getShell().setText(PHPServerUIMessages.getString("ServerEditDialog.editServer")); //$NON-NLS-1$
        getShell().setImage(ServersPluginImages.get(ServersPluginImages.IMG_SERVER));

        tabsListener = new TabsSelectionListener();
        tabs.addSelectionListener(tabsListener);

        // set the init selection of tabitem.
        if (tabID != null) {
            setSelect(tabID);
        }
        return tabs;
    }

    private void setSelect(String id) {
        if (id == null) {
            return;
        }
        for (int i = 0; i < tabs.getItemCount(); i++) {
            if (id.equals(tabs.getItem(i).getData())) {
                tabs.setSelection(i);
                break;
            }
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
     */
    protected void cancelPressed() {
        Iterator composites = runtimeComposites.iterator();
        while (composites.hasNext()) {
            ((CompositeFragment) composites.next()).performCancel();
        }
        super.cancelPressed();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    protected void okPressed() {
        Iterator composites = runtimeComposites.iterator();
        while (composites.hasNext()) {
            ((CompositeFragment) composites.next()).performOk();
        }
        super.okPressed();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.php.internal.server.apache.ui.IControlHandler#setDescription
     * (java.lang.String)
     */
    public void setDescription(String desc) {
        super.setMessage(desc);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.php.internal.server.apache.ui.IControlHandler#setImageDescriptor
     * (org.eclipse.jface.resource.ImageDescriptor)
     */
    public void setImageDescriptor(ImageDescriptor image) {
        super.setTitleImage(image.createImage());
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.php.internal.server.apache.ui.IControlHandler#update()
     */
    public void update() {
        Button button = getButton(IDialogConstants.OK_ID);
        if (button != null) {
            Iterator composites = runtimeComposites.iterator();
            while (composites.hasNext()) {
                if (!((CompositeFragment) composites.next()).isComplete()) {
                    button.setEnabled(false);
                    return;
                }
            }
            button.setEnabled(true);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.dialogs.TitleAreaDialog#setMessage(java.lang.String,
     * int)
     */
    public void setMessage(String newMessage, int newType) {
        // Override the WARNING with an INFORMATION.
        // We have a bug that cause the warning to be displayed in all the tabs
        // and not
        // only in the selected one. (TODO - Fix this)
        if (newType == IMessageProvider.WARNING) {
            newType = IMessageProvider.INFORMATION;
        }
        super.setMessage(newMessage, newType);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.php.internal.server.apache.ui.IControlHandler#getServer()
     */
    public Server getServer() {
        return server;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.php.internal.server.apache.ui.IControlHandler#setServer(org
     * .eclipse.wst.server.core.IServer)
     */
    public void setServer(Server server) {
        this.server = server;
    }

    private class TabsSelectionListener implements SelectionListener {

        public void widgetDefaultSelected(SelectionEvent e) {
            // Do nothing
        }

        public void widgetSelected(SelectionEvent e) {
            CTabItem item = (CTabItem) e.item;
            CompositeFragment fragment = (CompositeFragment) item.getControl();
            setTitle(fragment.getTitle());
            setDescription(fragment.getDescription());
        }

    }
}