/****************************************************************************** * 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.xslt.wizard; import java.io.File; 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.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.ebmwebsourcing.petals.common.internal.provisional.preferences.PreferencesManager; import com.ebmwebsourcing.petals.common.internal.provisional.swt.DefaultSelectionListener; import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils; import com.ebmwebsourcing.petals.services.su.wizards.pages.AbstractSuWizardPage; /** * Replace the default COMPONENT page. * @author Vincent Zurczak - EBM WebSourcing */ public class XsltProvideSpecificPage extends AbstractSuWizardPage { private String attachmentName; private String xslUrl; private boolean createXsltFile = true; private boolean createWsdlFile = false; /* * (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 XSL style sheet." ); final Composite container = new Composite( parent, SWT.NONE ); GridLayoutFactory.swtDefaults().extendedMargins( 15, 15, 20, 0 ).applyTo( container ); container.setLayoutData( new GridData( GridData.FILL_BOTH )); // The XSL style sheet final Button createXslStyleSheetButton = new Button( container, SWT.RADIO ); createXslStyleSheetButton.setText( "Create a new XSL style sheet." ); final Button importXslStyleSheetButton = new Button( container, SWT.RADIO ); importXslStyleSheetButton.setText( "Import an existing XSL style sheet." ); Composite comp = new Composite( container, SWT.NONE ); GridLayout layout = new GridLayout( 3, false ); layout.marginLeft = 15; comp.setLayout( layout ); comp.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); final Label xslLabel = new Label( comp, SWT.NONE ); xslLabel.setText( "XSL Sheet location:" ); final Text xslText = new Text( comp, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY ); xslText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); xslText.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { XsltProvideSpecificPage.this.xslUrl = xslText.getText().trim(); validate(); } }); final Button xslBrowserButton = new Button( comp, SWT.PUSH ); xslBrowserButton.setText( "Browse..." ); xslBrowserButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dlg = new FileDialog( xslLabel.getShell(), SWT.SINGLE ); dlg.setText( "XSL Selection" ); dlg.setFilterNames( new String[] { "XSL Files (*.xsl)" }); dlg.setFilterExtensions( new String[] { "*.xsl" }); //$NON-NLS-1$ String path = PreferencesManager.getSavedLocation(); if( path.trim().length() > 0 ) dlg.setFilterPath( path ); String fn = dlg.open(); if( fn != null ) { path = dlg.getFilterPath(); PreferencesManager.setSavedLocation( path ); String filePath = new File( fn ).toURI().toString(); xslText.setText( filePath ); xslText.setSelection( xslText.getText().length()); } } }); // Create a WSDL Button createWsdlButton = new Button( container, SWT.CHECK ); createWsdlButton.setText( "Create a default WSDL (might need to be updated)" ); createWsdlButton.setSelection( this.createWsdlFile ); GridData layoutData = new GridData(); layoutData.verticalIndent = 10; createWsdlButton.setLayoutData( layoutData ); createWsdlButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { XsltProvideSpecificPage.this.createWsdlFile = ! XsltProvideSpecificPage.this.createWsdlFile; validate(); } }); // The attachment name Label attachLabel = new Label( container, SWT.NONE ); attachLabel.setText( "Attachment-name (if the transformation result is sent as an attachment):" ); final Text attachText = new Text( container, SWT.SINGLE | SWT.BORDER ); attachText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); attachText.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { XsltProvideSpecificPage.this.attachmentName = attachText.getText().trim(); validate(); } }); // Listeners SelectionListener commonListener = new DefaultSelectionListener() { public void widgetSelected( SelectionEvent e ) { XsltProvideSpecificPage.this.createXsltFile = createXslStyleSheetButton.getSelection(); xslLabel.setEnabled( ! XsltProvideSpecificPage.this.createXsltFile ); xslText.setEnabled( ! XsltProvideSpecificPage.this.createXsltFile ); xslBrowserButton.setEnabled( ! XsltProvideSpecificPage.this.createXsltFile ); validate(); } }; createXslStyleSheetButton.addSelectionListener( commonListener ); importXslStyleSheetButton.addSelectionListener( commonListener ); // Initialize the page createXslStyleSheetButton.setSelection( this.createXsltFile ); createXslStyleSheetButton.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.createXsltFile ) { if( StringUtils.isEmpty( this.xslUrl )) { updateStatus( "You must select the XSL style sheet to import." ); valid = false; } else { try { UriAndUrlHelper.urlToUri( this.xslUrl ); } catch( Exception e ) { updateStatus( "The URL for the XSL style sheet is not valid." ); valid = false; } } } if( valid ) updateStatus( null ); if( this.createWsdlFile && ! this.createXsltFile ) setMessage( "The generated WSDL might not reflect the content of the imported XSL style sheet.", IMessageProvider.WARNING ); else setMessage( null, IMessageProvider.WARNING ); return valid; } /** * @return the attachmentName */ public String getAttachmentName() { return this.attachmentName; } /** * @return the xslUrl */ public String getXslUrl() { return this.xslUrl; } /** * @return the createXsltFile */ public boolean isCreateXsltFile() { return this.createXsltFile; } /** * @return the createWsdlFile */ public boolean isCreateWsdlFile() { return this.createWsdlFile; } }