Java tutorial
/****************************************************************************** * 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; } }