/****************************************************************************** * Copyright (c) 2010-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.services.validation.v11; import org.eclipse.bpel.common.wsdl.helpers.UriAndUrlHelper; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridLayoutFactory; 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.events.SelectionListener; 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.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.ebmwebsourcing.petals.common.internal.provisional.swt.TextWithButtonComposite; import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.SwtFactory; import com.ebmwebsourcing.petals.services.su.wizards.pages.AbstractSuWizardPage; /** * Replace the default COMPONENT page. * @author Vincent Zurczak - EBM WebSourcing */ public class ValidationProvideSpecificPage extends AbstractSuWizardPage { private boolean createXsd=true, createWsdl=false; private String xsdURL, targetNamespace = "http://petals.ow2.org"; /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage * #createControl(org.eclipse.swt.widgets.Composite) */ public void createControl( Composite parent ) { // Create the composite container and define its layout. setDescription( "Specify how to get the XML schema." ); final Composite container = new Composite( parent, SWT.NONE ); GridLayoutFactory.swtDefaults().extendedMargins( 15, 15, 20, 0 ).applyTo( container ); container.setLayoutData( new GridData( GridData.FILL_BOTH )); // Create the XML schema final Button createXsdButton = new Button( container, SWT.RADIO ); createXsdButton.setText( "Create a new XML schema." ); Composite comp = new Composite( container, SWT.NONE ); GridLayout layout = new GridLayout( 2, false ); layout.marginLeft = 15; comp.setLayout( layout ); comp.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); final Label tnsLabel = new Label( comp, SWT.NONE ); tnsLabel.setText( "Target namespace:" ); final Text tnsText = new Text( comp, SWT.SINGLE | SWT.BORDER ); tnsText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); tnsText.setText( this.targetNamespace ); tnsText.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { ValidationProvideSpecificPage.this.targetNamespace = tnsText.getText().trim(); validate(); } }); // Import an existing XML schema final Button importXsdButton = new Button( container, SWT.RADIO ); importXsdButton.setText( "Import an existing XML schema." ); comp = new Composite( container, SWT.NONE ); layout = new GridLayout( 3, false ); layout.marginLeft = 15; comp.setLayout( layout ); comp.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); final Label xsdLabel = new Label( comp, SWT.NONE ); xsdLabel.setText( "XML schema location:" ); final TextWithButtonComposite twb = SwtFactory.createFileBrowser( comp, false, true, "XSD" ); twb.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); twb.getText().addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { ValidationProvideSpecificPage.this.xsdURL = ((Text) e.widget).getText().trim(); validate(); } }); // Create a WSDL Button createWsdlButton = new Button( container, SWT.CHECK ); createWsdlButton.setText( "Create a default WSDL" ); createWsdlButton.setSelection( this.createWsdl ); GridData layoutData = new GridData(); layoutData.verticalIndent = 5; createWsdlButton.setLayoutData( layoutData ); createWsdlButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { ValidationProvideSpecificPage.this.createWsdl = ! ValidationProvideSpecificPage.this.createWsdl; validate(); } }); // Listeners SelectionListener commonListener = new SelectionListener() { public void widgetSelected( SelectionEvent e ) { widgetDefaultSelected( e ); } public void widgetDefaultSelected( SelectionEvent e ) { ValidationProvideSpecificPage.this.createXsd = createXsdButton.getSelection(); xsdLabel.setEnabled( ! ValidationProvideSpecificPage.this.createXsd ); twb.getText().setEnabled( ! ValidationProvideSpecificPage.this.createXsd ); twb.getButton().setEnabled( ! ValidationProvideSpecificPage.this.createXsd ); tnsLabel.setEnabled( ValidationProvideSpecificPage.this.createXsd ); tnsText.setEnabled( ValidationProvideSpecificPage.this.createXsd ); validate(); } }; createXsdButton.addSelectionListener( commonListener ); importXsdButton.addSelectionListener( commonListener ); // Initialize the page createXsdButton.setSelection( this.createXsd ); createXsdButton.notifyListeners( SWT.Selection, new Event()); if( getErrorMessage() != null ) { updateStatus( null ); setPageComplete( false ); } setControl( container ); } /* (non-Javadoc) * @see com.ebmwebsourcing.petals.services.su.wizards.pages.AbstractSuPage * #validate() */ @Override public boolean validate() { boolean valid = true; if( ! this.createXsd ) { if( StringUtils.isEmpty( this.xsdURL )) { updateStatus( "You must select the XML schema to import." ); valid = false; } else { try { UriAndUrlHelper.urlToUri( this.xsdURL ); } catch( Exception e ) { updateStatus( "The URL for the XML schema is not valid." ); valid = false; } } } else { if( StringUtils.isEmpty( this.targetNamespace )) { updateStatus( "You must define the target name space of the XML schema to create." ); valid = false; } } if( valid ) updateStatus( null ); if( this.createWsdl && ! this.createXsd ) setMessage( "The generated WSDL might not reflect the content of the imported XML schema.", IMessageProvider.WARNING ); else setMessage( null, IMessageProvider.WARNING ); return valid; } /** * @return the createXsd */ public boolean isCreateXsd() { return this.createXsd; } /** * @return the createWsdl */ public boolean isCreateWsdl() { return this.createWsdl; } /** * @return the xsdURL */ public String getXsdURL() { return this.xsdURL; } /** * @param xsdURL the xsdURL to set */ public void setXsdURL( String xsdURL ) { this.xsdURL = xsdURL; } /** * @return the targetNamespace */ public String getTargetNamespace() { return this.targetNamespace; } /** * @param targetNamespace the targetNamespace to set */ public void setTargetNamespace( String targetNamespace ) { this.targetNamespace = targetNamespace; } }