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