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