com.ebmwebsourcing.petals.common.extensions.internal.wizards.WSDLtoJavaWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.ebmwebsourcing.petals.common.extensions.internal.wizards.WSDLtoJavaWizardPage.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.common.extensions.internal.wizards;

import java.io.File;
import java.net.URI;
import java.util.ArrayList;

import org.eclipse.bpel.common.wsdl.helpers.UriAndUrlHelper;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import com.ebmwebsourcing.petals.common.internal.provisional.ui.WorkspaceExplorer;

/**
 * The page used in the WSDL to Java wizard.
 * <p>
 * It is made up of a text field for the WSDL URL,
 * and selection table for the destination container.
 * </p>
 *
 * @author Vincent Zurczak - EBM WebSourcing
 */
public class WSDLtoJavaWizardPage extends WizardPage {

    private URI wsdlUri;
    private IContainer outputContainer;
    private boolean complete = false;

    /**
     * Constructor.
     * @param pageName
     * @param selection
     */
    public WSDLtoJavaWizardPage(String pageName, ISelection selection) {
        super(pageName);
        setTitle(pageName); //NON-NLS-1
        setDescription("Specify the WSDL and Java output locations."); //NON-NLS-1

        if (!selection.isEmpty()) {
            Object o = ((IStructuredSelection) selection).getFirstElement();
            if (o instanceof IContainer)
                this.outputContainer = (IContainer) o;
        }
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage
     * #createControl(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        container.setLayout(layout);
        container.setLayoutData(new GridData(GridData.FILL_BOTH));

        // WSDL field
        Label l = new Label(container, SWT.NONE);
        l.setText("WSDL URI:");
        l.setLayoutData(new GridData());

        final Text text = new Text(container, SWT.BORDER | SWT.SINGLE);
        text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        text.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                String uri = text.getText();
                if (uri.trim().length() == 0)
                    return;

                try {
                    WSDLtoJavaWizardPage.this.wsdlUri = UriAndUrlHelper.urlToUri(uri);

                } catch (Exception e1) {
                    WSDLtoJavaWizardPage.this.wsdlUri = null;
                }

                validate();
            }
        });

        Composite buttons = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = layout.marginWidth = 0;
        buttons.setLayout(layout);

        Button b = new Button(buttons, SWT.PUSH);
        b.setText("Browse File System");
        b.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            @Override
            public void widgetSelected(SelectionEvent e) {

                FileDialog dlg = new FileDialog(text.getShell(), SWT.SINGLE);
                dlg.setFilterNames(new String[] { "WSDL (*.wsdl)" }); //$NON-NLS-1$
                dlg.setFilterExtensions(new String[] { "*.wsdl" }); //$NON-NLS-1$
                String path = dlg.open();

                if (path != null) {
                    text.setText(new File(path).toURI().toString());
                    text.setSelection(path.length());
                    text.setFocus();
                }
            }
        });

        b = new Button(buttons, SWT.PUSH);
        b.setText("Browse Workspace...");
        b.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            @Override
            public void widgetSelected(SelectionEvent e) {

                WorkspaceExplorer dlg = new WorkspaceExplorer(getShell(), new String[] { "wsdl" });
                if (dlg.open() == Window.OK) {
                    IResource res = dlg.getSelectedResource();
                    text.setText(new File(res.getLocation().toOSString()).toURI().toString());
                    text.setSelection(text.getText().length());
                    text.setFocus();
                }
            }
        });

        // Container selection
        l = new Label(container, SWT.NONE);
        l.setText("Select the output location.");
        GridData layoutData = new GridData();
        layoutData.verticalIndent = 15;
        l.setLayoutData(layoutData);

        TreeViewer viewer = new TreeViewer(container, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
        layoutData = new GridData(GridData.FILL_BOTH);
        layoutData.heightHint = 200;
        viewer.getTree().setLayoutData(layoutData);
        viewer.setLabelProvider(new WorkbenchLabelProvider());

        viewer.setContentProvider(new WorkbenchContentProvider() {
            @Override
            public Object[] getChildren(Object o) {

                if (o instanceof IContainer) {
                    IResource[] members;
                    try {
                        members = ((IContainer) o).members();
                    } catch (Exception e) {
                        return new Object[0];
                    }

                    ArrayList<IResource> results = new ArrayList<IResource>();
                    for (IResource member : members) {
                        if (member instanceof IContainer)
                            results.add(member);
                    }

                    return results.toArray();
                }

                return new Object[0];
            }
        });

        // Set page input
        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        viewer.setInput(root);
        if (this.outputContainer != null) {
            viewer.setSelection(new StructuredSelection(this.outputContainer), true);
            viewer.expandToLevel(this.outputContainer, 1);
        }

        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {

                IStructuredSelection s = (IStructuredSelection) event.getSelection();
                if (!s.isEmpty())
                    WSDLtoJavaWizardPage.this.outputContainer = (IContainer) s.getFirstElement();
                else
                    WSDLtoJavaWizardPage.this.outputContainer = null;
                validate();
            }
        });

        text.setFocus();
        setControl(container);
    }

    /**
     * Validates the page fields.
     */
    private void validate() {

        String msg = null;
        if (this.wsdlUri == null)
            msg = "The WSDL URI is invalid.";
        else if (this.outputContainer == null)
            msg = "You must select the output location.";

        setErrorMessage(msg);
        setPageComplete(msg == null);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage
     * #isPageComplete()
     */
    @Override
    public boolean isPageComplete() {
        return this.complete;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage#setPageComplete(boolean)
     */
    @Override
    public void setPageComplete(boolean complete) {
        this.complete = complete;
        super.setPageComplete(complete);
    }

    /**
     * @return the outputContainer
     */
    public IContainer getOutputContainer() {
        return this.outputContainer;
    }

    /**
     * @return the wsdlUri
     */
    public URI getWsdlUri() {
        return this.wsdlUri;
    }
}