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

Java tutorial

Introduction

Here is the source code for org.eclipse.php.internal.server.ui.ServerCompositeFragment.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.net.MalformedURLException;
import java.net.URL;

import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.php.internal.server.PHPServerUIMessages;
import org.eclipse.php.internal.server.core.Server;
import org.eclipse.php.internal.server.core.manager.ServersManager;
import org.eclipse.php.internal.ui.wizards.CompositeFragment;
import org.eclipse.php.internal.ui.wizards.IControlHandler;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

/**
 * Wizard page to set the server install directory.
 */
@SuppressWarnings("restriction")
public class ServerCompositeFragment extends CompositeFragment {

    protected Text name;
    protected Text url;
    protected Combo combo;
    private Text webroot;

    /**
     * ServerCompositeFragment
     * 
     * @param parent
     *            the parent composite
     * @param wizard
     *            the wizard handle
     */
    public ServerCompositeFragment(Composite parent, IControlHandler handler, boolean isForEditing) {
        super(parent, handler, isForEditing);
        createDescription();
    }

    protected void createDescription() {
        setDisplayName(PHPServerUIMessages.getString("ServerCompositeFragment.server")); //$NON-NLS-1$
        setDescription(PHPServerUIMessages.getString("ServerCompositeFragment.specifyInformation")); //$NON-NLS-1$
        controlHandler.setDescription(getDescription());
        setImageDescriptor(ServersPluginImages.DESC_WIZ_SERVER);
        controlHandler.setImageDescriptor(getImageDescriptor());
        switch (controlHandler.getKind()) {
        case WIZARD: {
            setTitle(PHPServerUIMessages.getString("ServerCompositeFragment.newPhpServer")); //$NON-NLS-1$
            break;
        }
        case EDITOR: {
            setTitle(PHPServerUIMessages.getString("ServerCompositeFragment.phpServer")); //$NON-NLS-1$
            break;
        }
        default:
            break;
        }
        controlHandler.setTitle(getTitle());
    }

    /**
     * Override the super setData to handle only Server types.
     * 
     * @throws IllegalArgumentException
     *             if the given object is not a {@link Server}
     */
    public void setData(Object server) throws IllegalArgumentException {
        if (server != null && !(server instanceof Server)) {
            throw new IllegalArgumentException("The given object is not a Server"); //$NON-NLS-1$
        }
        super.setData(server);
        init();
        validate();
    }

    public Server getServer() {
        return (Server) getData();
    }

    /**
     * Provide a wizard page to change the Server's installation directory.
     */
    protected void createContents(Composite parent) {
        Composite nameGroup = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(1, true);
        layout = new GridLayout();
        layout.numColumns = 2;
        nameGroup.setLayout(layout);
        nameGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Label label = new Label(nameGroup, SWT.NONE);
        label.setText(PHPServerUIMessages.getString("ServerCompositeFragment.nameLabel")); //$NON-NLS-1$
        GridData data = new GridData();
        label.setLayoutData(data);
        name = new Text(nameGroup, SWT.BORDER);
        data = new GridData(GridData.FILL_HORIZONTAL);
        name.setLayoutData(data);
        name.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                getServer().setName(name.getText());
                validate();
            }
        });
        createURLGroup(parent);
        init();
        validate();
        Dialog.applyDialogFont(parent);
        name.forceFocus();
    }

    protected void init() {
        Server server = getServer();
        if (name == null || server == null)
            return;
        if (getServer().getName() != null) {
            boolean nameSet = false;
            String serverName = getServer().getName();
            String orgName = serverName;
            if (!isForEditing()) {
                for (int i = 0; i < 10; i++) {
                    boolean ok = checkServerName(serverName);
                    if (ok) {
                        name.setText(serverName);
                        getServer().setName(serverName);
                        ;
                        nameSet = true;
                        break;
                    }
                    serverName = orgName + " (" + Integer.toString(i + 2) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
                }
                if (!nameSet) {
                    name.setText(""); //$NON-NLS-1$
                    getServer().setName(""); //$NON-NLS-1$
                }
            } else {
                name.setText(serverName);
            }
        } else {
            name.setText(""); //$NON-NLS-1$
        }
        if (getServer().getDocumentRoot() != null) {
            webroot.setText(getServer().getDocumentRoot());
        }
        String baseURL = getServer().getBaseURL();
        if (!baseURL.equals("")) { //$NON-NLS-1$
            url.setText(baseURL);
            try {
                URL originalURL = new URL(baseURL);
                int port = originalURL.getPort();
                getServer().setPort(String.valueOf(port));
            } catch (Exception e) {
                setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.enterValidURL"), //$NON-NLS-1$
                        IMessageProvider.ERROR);
            }
        } else {
            baseURL = "http://" + server.getHost(); //$NON-NLS-1$
            url.setText(baseURL);
            try {
                getServer().setBaseURL(baseURL);
                URL createdURL = new URL(baseURL);
                int port = createdURL.getPort();
                getServer().setPort(String.valueOf(port));
            } catch (Exception e) {
                setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.enterValidURL"), //$NON-NLS-1$
                        IMessageProvider.ERROR);
            }
        }
    }

    public void validate() {
        if (getServer() == null) {
            setMessage("", IMessageProvider.ERROR); //$NON-NLS-1$
            return;
        }
        setMessage(getDescription(), IMessageProvider.NONE);
        String urlStr = url.getText();
        if (urlStr != null && !urlStr.trim().equals("")) { //$NON-NLS-1$
            boolean ok = checkServerUrl(urlStr);
            if (!ok) {
                setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.duplicateServerUrl"), //$NON-NLS-1$
                        IMessageProvider.ERROR);
            }
        }
        try {
            URL url = new URL(urlStr);
            if (url.getPath() != null && url.getPath().length() != 0) {
                urlStr = null;
            }
        } catch (MalformedURLException e1) {
            // in case of Malformed URL - reset
            urlStr = null;
        }
        if (urlStr == null || urlStr.equals("")) { //$NON-NLS-1$
            setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.enterValidURL"), //$NON-NLS-1$
                    IMessageProvider.ERROR);
            return;
        }
        try {
            URL baseURL = new URL(urlStr);
            String host = baseURL.getHost();
            if (host.trim().length() == 0) {
                setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.serverURLEmpty"), //$NON-NLS-1$
                        IMessageProvider.ERROR);
            }
            int port = baseURL.getPort();

            getServer().setHost(host);
            getServer().setPort(String.valueOf(port));
        } catch (Exception e) {
            setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.enterValidURL"), //$NON-NLS-1$
                    IMessageProvider.ERROR);
            return;
        }
        String serverName = getServer().getName();
        if (serverName == null || serverName.trim().equals("")) { //$NON-NLS-1$
            setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.missingServerName"), //$NON-NLS-1$
                    IMessageProvider.ERROR);
        } else {
            boolean ok = checkServerName(serverName);
            if (!ok) {
                setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.duplicateServerName"), //$NON-NLS-1$
                        IMessageProvider.ERROR);
            }
        }
        String webrootStr = webroot.getText().trim();
        if (webrootStr.length() != 0 && !new Path(webrootStr).toFile().exists()) {
            setMessage(PHPServerUIMessages.getString("ServerCompositeFragment.webrootNotExists"), //$NON-NLS-1$
                    IMessageProvider.ERROR);
        }
        controlHandler.update();
    }

    protected void createURLGroup(Composite parent) {
        // Main composite
        Composite urlGroupComposite = new Composite(parent, SWT.NONE);
        GridLayout sLayout = new GridLayout();
        urlGroupComposite.setLayout(sLayout);
        GridData sGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        urlGroupComposite.setLayoutData(sGridData);
        Group group = new Group(urlGroupComposite, SWT.NONE);
        group.setFont(urlGroupComposite.getFont());
        GridLayout layout = new GridLayout(3, false);
        group.setLayout(layout);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        group.setLayoutData(data);
        group.setText(PHPServerUIMessages.getString("ServerCompositeFragment.serverProperties")); //$NON-NLS-1$
        Label urlLabel = new Label(group, SWT.None);
        urlLabel.setText(PHPServerUIMessages.getString("ServerCompositeFragment.baseURL")); //$NON-NLS-1$
        url = new Text(group, SWT.BORDER);
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        url.setLayoutData(layoutData);
        url.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                if (getServer() != null) {
                    String urlStr = url.getText();
                    try {
                        getServer().setBaseURL(urlStr);
                    } catch (MalformedURLException e1) {
                        // ignore
                    }
                }
                validate();
            }
        });
        Label labelRoot = new Label(group, SWT.None);
        labelRoot.setText(PHPServerUIMessages.getString("ServerCompositeFragment.localWebRoot")); //$NON-NLS-1$
        labelRoot.setLayoutData(new GridData());
        webroot = new Text(group, SWT.BORDER);
        webroot.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        webroot.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                if (getServer() != null) {
                    String webrootStr = webroot.getText();
                    getServer().setDocumentRoot(webrootStr);
                }
                validate();
            }
        });
        Button browseButton = new Button(group, SWT.PUSH);
        browseButton.setText(PHPServerUIMessages.getString("ServerCompositeFragment.browse")); //$NON-NLS-1$
        browseButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                DirectoryDialog dialog = new DirectoryDialog(getShell());
                if (!"".equals(webroot.getText())) { //$NON-NLS-1$
                    String initialDir = webroot.getText();
                    dialog.setFilterPath(initialDir);
                }
                String result = dialog.open();
                if (result != null)
                    webroot.setText(result.toString());
            }
        });

    }

    private boolean checkServerName(String name) {
        name = name.trim();
        Server[] allServers = ServersManager.getServers();
        if (allServers != null) {
            int size = allServers.length;
            for (int i = 0; i < size; i++) {
                Server server = allServers[i];
                if (name.equals(server.getName()) && !getServer().getUniqueId().equals(server.getUniqueId()))
                    return false;
            }
        }
        return true;
    }

    private boolean checkServerUrl(String url) {
        url = url.trim();
        Server[] allServers = ServersManager.getServers();
        if (allServers != null) {
            int size = allServers.length;
            for (int i = 0; i < size; i++) {
                Server server = allServers[i];
                if (url.equals(server.getBaseURL()) && !getServer().getUniqueId().equals(server.getUniqueId()))
                    return false;
            }
        }
        return true;
    }

    /**
     * Saves the IServerWorkingCopy.
     */
    public boolean performOk() {
        return true;
    }

}