com.ebmwebsourcing.petals.server.ui.wizards.PetalsServerWizardFragment3x.java Source code

Java tutorial

Introduction

Here is the source code for com.ebmwebsourcing.petals.server.ui.wizards.PetalsServerWizardFragment3x.java

Source

/******************************************************************************
 * Copyright (c) 2009-2013, Linagora
 *
 * 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:
 *       Linagora - initial API and implementation
 *******************************************************************************/

package com.ebmwebsourcing.petals.server.ui.wizards;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IMessageProvider;
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.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.core.TaskModel;
import org.eclipse.wst.server.ui.wizard.IWizardHandle;
import org.eclipse.wst.server.ui.wizard.WizardFragment;

import com.ebmwebsourcing.petals.server.PetalsServerPlugin;
import com.ebmwebsourcing.petals.server.server.IPetalsServerWorkingCopy;
import com.ebmwebsourcing.petals.server.utils.TopologyHandler3x;

/**
 * @author Vincent Zurczak - EBM WebSourcing
 */
public class PetalsServerWizardFragment3x extends WizardFragment {

    private IServerWorkingCopy serverWc;
    private IPetalsServerWorkingCopy petalsServerWc;
    private IWizardHandle wizard;

    private String host, wsPrefix, containerName;
    private int port;
    private String serverName;

    private Text serverNameText, hostText, wsPrefixText, containerNameText;
    private Spinner portSpinner;

    /* (non-Javadoc)
     * @see org.eclipse.wst.server.ui.wizard.WizardFragment#hasComposite()
     */
    @Override
    public boolean hasComposite() {
        return true;
    }

    /* (non-Javadoc)
     * @see org.eclipse.wst.server.ui.wizard.WizardFragment#enter()
     */
    @Override
    public void enter() {

        // Get the model
        Object o = getTaskModel().getObject(TaskModel.TASK_SERVER);
        if (o instanceof IServer) {
            o = ((IServer) o).createWorkingCopy();
            getTaskModel().putObject(TaskModel.TASK_SERVER, o);
        }

        this.serverWc = (IServerWorkingCopy) o;
        if (this.serverWc.getOriginal() == null) {
            try {
                this.serverWc.save(true, null);

            } catch (CoreException e) {
                PetalsServerPlugin.log(e, IStatus.ERROR);
            }
        }

        this.petalsServerWc = (IPetalsServerWorkingCopy) this.serverWc.loadAdapter(IPetalsServerWorkingCopy.class,
                null);

        // Pre-fill information
        if (this.serverNameText != null)
            this.serverNameText.setText(this.serverWc.getName());

        if (hasLocalTopology() && this.host == null)
            parseTopology();

        if (this.containerName != null)
            this.containerNameText.setText(this.containerName);

        if (this.host != null)
            this.hostText.setText(this.host);

        if (this.wsPrefix != null)
            this.wsPrefixText.setText(this.wsPrefix);

        this.portSpinner.setSelection(this.port);
    }

    /* (non-Javadoc)
     * @see org.eclipse.wst.server.ui.wizard.WizardFragment#exit()
     */
    @Override
    public void exit() {
        // nothing
    }

    /**
     * @return
     */
    private boolean hasLocalTopology() {

        boolean hasLocalTopology = this.serverWc.getRuntime().getLocation() != null;
        return hasLocalTopology;
    }

    /**
     *
     */
    private void parseTopology() {

        try {
            IPath installPath = this.serverWc.getRuntime().getLocation();
            File rootFile = installPath.toFile();
            if (!rootFile.exists())
                return;

            File serverFile = new File(rootFile, "conf/server.properties");
            if (!serverFile.exists())
                return;

            Properties serverProperties = new Properties();
            FileInputStream fis = null;
            try {
                // Parse the petalsServerWc properties
                fis = new FileInputStream(serverFile);
                serverProperties.load(fis);
                String containerName = serverProperties.getProperty("petals.container.name", null);
                if (containerName == null)
                    return;

                // Parse the topology.xml
                SAXParserFactory factory = SAXParserFactory.newInstance();
                SAXParser parser = factory.newSAXParser();

                TopologyHandler3x handler = new TopologyHandler3x(containerName);
                File topologyFile = new File(rootFile, "conf/topology.xml");
                parser.parse(topologyFile, handler);

                this.containerName = containerName;
                this.host = handler.getHost();
                this.wsPrefix = handler.getWsPrefix();
                this.port = handler.getPort();

            } catch (Exception e1) {
                PetalsServerPlugin.log(e1, IStatus.ERROR);

            } finally {
                try {
                    if (fis != null)
                        fis.close();

                } catch (IOException e) {
                    PetalsServerPlugin.log(e, IStatus.ERROR);
                }
            }

        } finally {
            // Whatever happens, validate the fields
            validate();
        }
    }

    /**
     * Validates the page data.
     */
    public void validate() {

        // Validate the runtime
        this.petalsServerWc.setContainerName(this.containerName);
        this.petalsServerWc.setHost(this.host);
        this.petalsServerWc.setPort(this.port);
        this.petalsServerWc.setWsPrefix(this.wsPrefix);
        this.serverWc.setName(this.serverName);

        String errorMsg = this.petalsServerWc.validateTopologyInformation();
        this.wizard.setMessage(errorMsg, IMessageProvider.ERROR);
        setComplete(errorMsg == null);
        this.wizard.update();
    }

    /* (non-Javadoc)
     * @see org.eclipse.wst.server.ui.wizard.WizardFragment
     * #createComposite(org.eclipse.swt.widgets.Composite, org.eclipse.wst.server.ui.wizard.IWizardHandle)
     */
    @Override
    public Composite createComposite(Composite parent, IWizardHandle wizard) {

        // Wizard
        this.wizard = wizard;
        wizard.setTitle("Petals server");
        wizard.setDescription("Create a new Petals server.");
        wizard.setImageDescriptor(PetalsServerPlugin.getImageDescriptor("icons/wizban/pstudio_64x64.png"));

        // Composite
        Composite container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(3, false);
        layout.marginTop = 10;
        container.setLayout(layout);
        container.setLayoutData(new GridData(GridData.FILL_BOTH));

        // Redefine the petalsServerWc name
        new Label(container, SWT.NONE).setText("Server name:");
        this.serverNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        this.serverNameText.setLayoutData(layoutData);
        this.serverNameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                PetalsServerWizardFragment3x.this.serverName = PetalsServerWizardFragment3x.this.serverNameText
                        .getText();
                validate();
            }
        });

        // Topology parameters
        Composite separatorComposite = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginWidth = 0;
        layout.marginTop = 20;
        separatorComposite.setLayout(layout);
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 3;
        separatorComposite.setLayoutData(layoutData);

        Label titleLabel = new Label(separatorComposite, SWT.NONE);
        titleLabel.setText("From the topology.xml file");
        Label separatorLabel = new Label(separatorComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
        separatorLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false));

        new Label(container, SWT.NONE).setText("Container:");
        this.containerNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        this.containerNameText.setLayoutData(layoutData);
        this.containerNameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                PetalsServerWizardFragment3x.this.containerName = PetalsServerWizardFragment3x.this.containerNameText
                        .getText();
                validate();
            }
        });

        new Label(container, SWT.NONE).setText("Host:");
        this.hostText = new Text(container, SWT.BORDER | SWT.SINGLE);
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        this.hostText.setLayoutData(layoutData);
        this.hostText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                PetalsServerWizardFragment3x.this.host = PetalsServerWizardFragment3x.this.hostText.getText();
                validate();
            }
        });

        new Label(container, SWT.NONE).setText("WS prefix:");
        this.wsPrefixText = new Text(container, SWT.BORDER | SWT.SINGLE);
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        this.wsPrefixText.setLayoutData(layoutData);
        this.wsPrefixText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                PetalsServerWizardFragment3x.this.wsPrefix = PetalsServerWizardFragment3x.this.wsPrefixText
                        .getText();
                validate();
            }
        });

        new Label(container, SWT.NONE).setText("Port:");
        this.portSpinner = new Spinner(container, SWT.BORDER | SWT.SINGLE);
        this.portSpinner.setValues(9600, 0, Integer.MAX_VALUE, 0, 1, 10);
        this.portSpinner.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                PetalsServerWizardFragment3x.this.port = PetalsServerWizardFragment3x.this.portSpinner
                        .getSelection();
                validate();
            }
        });

        this.portSpinner.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                PetalsServerWizardFragment3x.this.port = PetalsServerWizardFragment3x.this.portSpinner
                        .getSelection();
                validate();
            }
        });

        return container;
    }
}