Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java')
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java736
1 files changed, 736 insertions, 0 deletions
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
new file mode 100644
index 000000000..5279a2851
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
@@ -0,0 +1,736 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060410 135441 joan@ca.ibm.com - Joan Haggarty
+ * 20060410 136011 kathy@ca.ibm.com - Kathy Chan
+ * 20060420 135912 joan@ca.ibm.com - Joan Haggarty
+ * 20060504 119296 pmoogk@ca.ibm.com - Peter Moogk
+ * 20060525 142281 joan@ca.ibm.com - Joan Haggarty
+ * 20060607 144932 kathy@ca.ibm.com - Kathy Chan
+ * 20060612 145081 pmoogk@ca.ibm.com - Peter Moogk
+ * 20060719 139977 kathy@ca.ibm.com - Kathy Chan
+ * 20060803 152701 cbrealey@ca.ibm.com - Chris Brealey
+ * 20060803 152486 makandre@ca.ibm.com - Andrew Mak, Typing WSDL in Service definition field is very slow
+ * 20060825 135570 makandre@ca.ibm.com - Andrew Mak, Service implementation URL not displayed properly on first page
+ * 20060831 155883 makandre@ca.ibm.com - Andrew Mak, service impl field doesn't work after switching from BU to TD
+ * 20061106 142500 david.schneider@unisys.com - David Schneider, WTP properties pages fonts don't follow Eclipse preferences
+ * 20061211 161589 makandre@ca.ibm.com - Andrew Mak, NPE in service generation after opening and cancelling from browse dialog
+ * 20070131 168786 makandre@ca.ibm.com - Andrew Mak, wsdl url on web service wizard page 1 is not reflected in browse dialog
+ * 20070326 171071 makandre@ca.ibm.com - Andrew Mak, Create public utility method for copying WSDL files
+ * 20090310 242440 yenlu@ca.ibm.com - Yen Lu, Pluggable IFile to URI Converter
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobManager;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef;
+import org.eclipse.jst.ws.internal.common.J2EEActionAdapterFactory;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.consumption.common.WSDLParserFactory;
+import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.TimedWSDLSelectionConditionCommand;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.WSDLSelectionTreeWidget;
+import org.eclipse.jst.ws.internal.ui.common.DialogResourceBrowser;
+import org.eclipse.jst.ws.internal.ui.common.FileExtensionFilter;
+import org.eclipse.jst.ws.internal.ui.common.UIUtils;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
+import org.eclipse.wst.command.internal.env.ui.widgets.WidgetDataEvents;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.ws.internal.converter.IIFile2UriConverter;
+import org.eclipse.wst.ws.internal.parser.wsil.WebServiceEntity;
+import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
+import org.eclipse.wst.ws.internal.plugin.WSPlugin;
+import org.eclipse.wst.ws.internal.preferences.PersistentWSDLValidationContext;
+import org.eclipse.wst.ws.internal.util.UniversalPathTransformer;
+import org.eclipse.wst.wsdl.internal.impl.ServiceImpl;
+import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
+import org.eclipse.wst.wsdl.validation.internal.IValidationMessage;
+
+public class WSDLSelectionWidget extends AbstractObjectSelectionWidget implements IObjectSelectionWidget, Runnable
+{
+ private String pluginId_;
+ private FileExtensionFilter wsFilter_;
+ private WebServicesParser webServicesParser;
+ private String wsdlURI_;
+
+ private Composite parent_;
+ private Listener statusListener_;
+ private ModifyListener modifyListener_;
+ private WSDLSelectionTreeWidget tree;
+
+ private Timer timer_ = null;
+
+ /*CONTEXT_ID PCON0001 for the WSDL Selection Page*/
+ private final String INFOPOP_PCON_PAGE = "PCON0001";
+
+ /*CONTEXT_ID PCON0002 for the WSDL Document text field of the WSDL Selection Page*/
+ private final String INFOPOP_PCON_TEXT_WSDL = "PCON0002";
+ private Text webServiceURI;
+
+ /*CONTEXT_ID PCON0003 for the WSDL Resource Browse button of the WSDL Selection Page*/
+ private final String INFOPOP_PCON_BUTTON_BROWSE_WSDL = "PCON0003";
+ private Button wsBrowseButton_;
+
+ /*CONTEXT_ID PCON0004 for the Wizard WSDL Validation table of the WSDL Selection Page*/
+ private ValidationMessageViewerWidget msgViewer_;
+ private ValidateWSDLJob validateWSDLJob_;
+ private JobChangeAdapter jobChangeAdapter_;
+
+ /*CONTEXT_ID PCON0005 for the Wizard WSDL Validation summary message of the WSDL Selection Page*/
+ private Text validationSummaryText_;
+ private Text validationSummaryText2_;
+
+ /*CONTEXT_ID PCON0006 for the Stop Wizard WSDL Validation button of the WSDL Selection Page*/
+ private Button stopValidationButton_;
+ private final String INFOPOP_PCON_BUTTON_STOP_VALIDATION = "PCON0006";
+
+ public WSDLSelectionWidget()
+ {
+ pluginId_ = "org.eclipse.jst.ws.consumption.ui";
+ wsFilter_ = new FileExtensionFilter(new String[] {"wsdl", "wsil", "html"});
+ webServicesParser = WSDLParserFactory.getWSDLParser();
+
+ final Runnable handleValidationMessages = new Runnable()
+ {
+ public void run()
+ {
+ msgViewer_.setInput(validateWSDLJob_.getValidationMessages());
+ updateValidationSummary(validateWSDLJob_.getValidationMessageSeverity());
+ setValidationInProgress(false);
+ }
+ };
+
+ jobChangeAdapter_ = new JobChangeAdapter()
+ {
+ public void done(IJobChangeEvent event)
+ {
+ if (msgViewer_!= null && msgViewer_.getContentProvider() != null) {
+ Display.getDefault().asyncExec( handleValidationMessages );
+ }
+ }
+ };
+ }
+
+ public WidgetDataEvents addControls( Composite parent, Listener statusListener )
+ {
+ UIUtils uiUtils = new UIUtils( pluginId_ );
+ parent_ = parent;
+ statusListener_ = statusListener;
+
+ parent.setToolTipText( ConsumptionUIMessages.TOOLTIP_PCON_PAGE );
+ PlatformUI.getWorkbench().getHelpSystem().setHelp( parent, pluginId_ + "." + INFOPOP_PCON_PAGE );
+
+ Composite wsdlGroup = uiUtils.createComposite( parent, 2, 5, 0 );
+
+ Label wsLabel = new Label( wsdlGroup, SWT.WRAP);
+ wsLabel.setText( ConsumptionUIMessages.LABEL_WS_SELECTION);
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ gd.horizontalSpan = 2;
+ wsLabel.setLayoutData(gd);
+ wsLabel.setToolTipText( ConsumptionUIMessages.TOOLTIP_PCON_TEXT_WS );
+
+ webServiceURI = uiUtils.createText( wsdlGroup, null,
+ ConsumptionUIMessages.TOOLTIP_PCON_TEXT_WS,
+ INFOPOP_PCON_TEXT_WSDL, SWT.SINGLE | SWT.BORDER );
+ modifyListener_ =
+ new ModifyListener()
+ {
+ public void modifyText(ModifyEvent event)
+ {
+ handleWebServiceURIModifyEvent();
+ }
+ };
+
+ webServiceURI.addModifyListener(modifyListener_);
+
+// webServiceURI.addListener( SWT.Modify, statusListener );
+
+ wsBrowseButton_ = uiUtils.createPushButton( wsdlGroup, ConsumptionUIMessages.BUTTON_BROWSE,
+ ConsumptionUIMessages.TOOLTIP_PCON_BUTTON_BROWSE_WS,
+ INFOPOP_PCON_BUTTON_BROWSE_WSDL );
+ wsBrowseButton_.addSelectionListener(
+ new SelectionListener()
+ {
+ public void widgetDefaultSelected(SelectionEvent event)
+ {
+ handleWSDLButton();
+ }
+
+ public void widgetSelected(SelectionEvent event)
+ {
+ handleWSDLButton();
+ }
+ });
+
+ tree = new WSDLSelectionTreeWidget();
+ tree.addControls(parent, statusListener);
+ tree.setWebServicesParser(webServicesParser);
+
+ msgViewer_ = new ValidationMessageViewerWidget();
+ msgViewer_.addControls(parent, statusListener);
+
+ validationSummaryText_ = new Text( parent, SWT.WRAP);
+ validationSummaryText_.setEditable(false);
+ GridData gd1 = new GridData(SWT.FILL, SWT.FILL, false, false);
+ validationSummaryText_.setLayoutData(gd1);
+ validationSummaryText_.setToolTipText( ConsumptionUIMessages.TOOLTIP_VALIDATE_TEXT_MESSAGE_SUMMARY );
+
+ validationSummaryText2_ = new Text( parent, SWT.WRAP);
+ validationSummaryText2_.setEditable(false);
+ validationSummaryText2_.setLayoutData(gd1);
+
+ stopValidationButton_ = uiUtils.createPushButton(parent,
+ ConsumptionUIMessages.LABEL_BUTTON_STOP_WSDL_VALIDATION,
+ ConsumptionUIMessages.TOOLTIP_STOP_VALIDATION_BUTTON,
+ INFOPOP_PCON_BUTTON_STOP_VALIDATION);
+ setValidationInProgress(false);
+
+ stopValidationButton_.addSelectionListener(
+ new SelectionListener()
+ {
+ public void widgetDefaultSelected(SelectionEvent event)
+ {
+ handleStopValidationButton();
+ }
+
+ public void widgetSelected(SelectionEvent event)
+ {
+ handleStopValidationButton();
+ }
+ });
+
+ setMessageSummary();
+ Dialog.applyDialogFont(parent);
+ return this;
+ }
+
+ private void setMessageSummary() {
+ String validationMessageSummary = ConsumptionUIMessages.MESSAGE_VALIDATE_NO_WSDL;
+ PersistentWSDLValidationContext wsdlValidationContext = WSPlugin.getInstance().getWSDLValidationContext();
+ String validationSelection = wsdlValidationContext.getPersistentWSDLValidation();
+ if (PersistentWSDLValidationContext.VALIDATE_REMOTE_WSDL.equals(validationSelection)) {
+ validationMessageSummary = ConsumptionUIMessages.MESSAGE_VALIDATE_REMOTE_WSDL;
+ } else if (PersistentWSDLValidationContext.VALIDATE_ALL_WSDL.equals(validationSelection)) {
+ validationMessageSummary = ConsumptionUIMessages.MESSAGE_VALIDATE_ALL_WSDL;
+ }
+ validationSummaryText_.setText( validationMessageSummary );
+ validationSummaryText2_.setText(" ");
+ }
+
+ private void handleWebServiceURIModifyEvent()
+ {
+ if (webServiceURI.getText().indexOf(':') > 0) {
+ timer_ = Timer.newInstance(timer_, Display.getCurrent(), this);
+ timer_.startTimer();
+ }
+ else
+ handleWebServiceURI();
+ statusListener_.handleEvent(null);
+ }
+
+ private void handleWebServiceURI() {
+ handleWebServiceURI(webServiceURI.getText());
+ }
+
+ private void handleWebServiceURI(String wsURI)
+ {
+ if (wsURI.indexOf(':') < 0)
+ {
+ IFile file = uri2IFile(wsURI);
+ if (file != null)
+ wsURI = iFile2URI(file);
+ }
+ if (wsURI != null && wsURI.indexOf(':') >= 0 && webServicesParser.getWebServiceEntityByURI(wsURI) == null)
+ {
+ TimedWSDLSelectionConditionCommand cmd = new TimedWSDLSelectionConditionCommand();
+ cmd.setWebServicesParser(webServicesParser);
+ cmd.setWebServiceURI(wsURI);
+ cmd.execute(null, null);
+ }
+ WebServiceEntity entity = webServicesParser.getWebServiceEntityByURI(wsURI);
+ if (entity != null && entity.getType() == WebServiceEntity.TYPE_WSDL)
+ tree.setEnabled(false);
+ else
+ tree.setEnabled(true);
+ tree.setWebServiceURI(wsURI);
+ tree.refreshTreeViewer();
+ wsdlURI_ = wsURI;
+ }
+
+ public void run()
+ {
+ handleWebServiceURI();
+ statusListener_.handleEvent(null);
+ }
+
+ private void handleWSDLButton()
+ {
+ DialogResourceBrowser dialog = new DialogResourceBrowser( parent_.getShell(), null, wsFilter_);
+ dialog.open();
+ IResource res = dialog.getFirstSelection();
+ if( res != null )
+ {
+ wsdlURI_ = res.getFullPath().toString();
+ webServiceURI.setText( wsdlURI_ );
+ }
+
+ statusListener_.handleEvent(null);
+ }
+
+ private void setValidationInProgress(boolean validating) {
+ stopValidationButton_.setEnabled(validating);
+ }
+
+ private void handleStopValidationButton()
+ {
+ IJobManager jobManager = Platform.getJobManager();
+ Job[] jobs = jobManager.find( ValidateWSDLJob.VALIDATE_WSDL_JOB_FAMILY );
+ ValidateWSDLJob existingValidateWSDLJob = null;
+
+ if( jobs.length > 0 )
+ {
+ for (int i=0; i<jobs.length; i++) {
+ existingValidateWSDLJob = (ValidateWSDLJob)jobs[i];
+
+ if (existingValidateWSDLJob.getState() != Job.NONE) {
+ existingValidateWSDLJob.cancel();
+ }
+ }
+ }
+ clearValidationMessages();
+ setValidationInProgress(false);
+ }
+
+ private void clearValidationMessages() {
+ msgViewer_.clearInput();
+ validationSummaryText_.setText(" " );
+ validationSummaryText2_.setText(" ");
+ }
+
+ public IStatus getStatus()
+ {
+ // Timer validation
+ /*
+ * Commenting out because we don't want to block fast typers from hitting Next/Finish
+ if (Timer.isRunning())
+ return new SimpleStatus("", ConsumptionUIMessages.PAGE_MSG_LOADING_WEB_SERVICE_URI, Status.ERROR);
+ */
+
+ // Validate the String representation of the Web service URI
+ // For example, is it pointing to an existing resource in the workspace?
+ String wsPath = webServiceURI.getText();
+ if( wsPath == null || wsPath.length() <= 0 ) {
+ clearValidationMessages();
+ return StatusUtils.errorStatus( ConsumptionUIMessages.PAGE_MSG_INVALID_WEB_SERVICE_URI );
+ }
+ else if( wsPath.indexOf(':') < 0 )
+ {
+ IResource res = ResourceUtils.findResource(wsPath);
+ if( res == null ) {
+ clearValidationMessages();
+ return StatusUtils.errorStatus( NLS.bind(ConsumptionUIMessages.PAGE_MSG_NO_SUCH_FILE, new Object[] {wsPath}) );
+ }
+ else if( res.getType() != IResource.FILE ) {
+ clearValidationMessages();
+ return StatusUtils.errorStatus( ConsumptionUIMessages.PAGE_MSG_INVALID_WEB_SERVICE_URI );
+ }
+ }
+
+
+ // Validate the content of the Web service URI
+ // For example, is selection a WSDL URI?
+ if (!Timer.isRunning(timer_) && tree.isEnabled())
+ {
+ IStatus status = tree.getStatus();
+ if (status != null)
+ {
+ int severity = status.getSeverity();
+ if (severity == Status.ERROR || severity == Status.WARNING) {
+ clearValidationMessages();
+ return status;
+ }
+ }
+ }
+ else
+ {
+ if( wsPath.indexOf(':') < 0 )
+ {
+ String wsdlURI = iFile2URI((IFile)ResourceUtils.findResource(wsPath));
+ if (webServicesParser.getWSDLDefinition(wsdlURI) == null) {
+ clearValidationMessages();
+ return StatusUtils.errorStatus(ConsumptionUIMessages.PAGE_MSG_SELECTION_MUST_BE_WSDL );
+ }
+ }
+ }
+
+
+ if (!Timer.isRunning(timer_)) {
+ String wsdlURI1 = wsPath;
+ boolean isRemote = true;
+ if (tree.isEnabled()) { // is wsil
+ wsdlURI1 = tree.getWsdlURI();
+ if (wsdlURI1.startsWith("file:") || wsdlURI1.startsWith("platform:"))
+ {
+ isRemote = false;
+ }
+ } else {
+ if (wsPath.indexOf(':') < 0)
+ {
+ isRemote = false;
+ wsdlURI1 = iFile2URI((IFile)ResourceUtils.findResource(wsPath));
+ }
+ else if (wsPath.startsWith("file:") || wsPath.startsWith("platform:"))
+ {
+ isRemote = false;
+ }
+ }
+
+ setMessageSummary();
+ msgViewer_.clearInput();
+ validateWSDL(wsdlURI1, isRemote);
+ }
+
+
+ // OK status
+ return Status.OK_STATUS;
+ }
+
+ private void validateWSDL (String wsdlURI, boolean isRemote) {
+
+ String validationSelection = WSPlugin.getInstance().getWSDLValidationContext().getPersistentWSDLValidation();;
+ if ((PersistentWSDLValidationContext.VALIDATE_ALL_WSDL.equals(validationSelection)) ||
+ (PersistentWSDLValidationContext.VALIDATE_REMOTE_WSDL.equals(validationSelection) && isRemote)) {
+
+ IJobManager jobManager = Platform.getJobManager();
+ Job[] jobs = jobManager.find( ValidateWSDLJob.VALIDATE_WSDL_JOB_FAMILY );
+ ValidateWSDLJob existingValidateWSDLJob = null;
+
+ boolean startWSDLValidation = true;
+ validationSummaryText_.setText( ConsumptionUIMessages.MESSAGE_VALIDATE_IN_PROGRESS );
+ validationSummaryText2_.setText(" ");
+ if( jobs.length > 0 )
+ {
+ for (int i=0; i<jobs.length; i++) {
+ existingValidateWSDLJob = (ValidateWSDLJob)jobs[i];
+
+ if (existingValidateWSDLJob.getState() != Job.NONE) {
+ // Job running or to be run
+ // If the job is validating the same wsdlURI, let it finish running and ignore this one.
+ // It is not for the same wsdlURI, cancel the job and schedule this one.
+
+ if (!wsdlURI.equals(existingValidateWSDLJob.getWsdlURI())) {
+ existingValidateWSDLJob.cancel();
+ setValidationInProgress(false);
+ } else {
+ startWSDLValidation = false;
+ }
+ }
+ }
+ }
+
+ if (startWSDLValidation) {
+ startWSDLValidationJob(wsdlURI);
+ }
+ }
+ return;
+ }
+
+ private void startWSDLValidationJob (String wsdlURI) {
+ validateWSDLJob_ = new ValidateWSDLJob(wsdlURI);
+ validateWSDLJob_.addJobChangeListener( jobChangeAdapter_ );
+ validateWSDLJob_.schedule();
+ setValidationInProgress(true);
+ }
+
+ public void updateValidationSummary(int messageSeverity)
+ {
+
+ switch (messageSeverity) {
+ case IValidationMessage.SEV_ERROR:
+ validationSummaryText_.setText(ConsumptionUIMessages.ERROR_MESSAGES_IN_VALIDATION);
+ validationSummaryText2_.setText(ConsumptionUIMessages.WARNING_IF_CONTINUE);
+ break;
+ case IValidationMessage.SEV_WARNING:
+ validationSummaryText_.setText(ConsumptionUIMessages.WARNING_MESSAGES_IN_VALIDATION);
+ validationSummaryText2_.setText(ConsumptionUIMessages.WARNING_IF_CONTINUE);
+ break;
+ default:
+ validationSummaryText_.setText(ConsumptionUIMessages.VALIDATION_COMPLETED);
+ validationSummaryText2_.setText(" ");
+ break;
+ }
+ }
+
+ private IFile uri2IFile(String uri)
+ {
+ IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(uri);
+
+ if (res instanceof IFile)
+ return (IFile)res;
+ else
+ return null;
+ }
+
+ private String iFile2URI(IFile file)
+ {
+ String uri = null;
+ IIFile2UriConverter converter = WSPlugin.getInstance().getIFile2UriConverter();
+ boolean allowBaseConversionOnFailure = true;
+ if (converter != null)
+ {
+ uri = converter.convert(file);
+ if (uri == null)
+ allowBaseConversionOnFailure = converter.allowBaseConversionOnFailure();
+ }
+ if (uri == null && allowBaseConversionOnFailure)
+ {
+ File f = file.getLocation().toFile();
+ try
+ {
+ uri = f.toURL().toString();
+ }
+ catch (MalformedURLException murle)
+ {
+ uri = f.toString();
+ }
+ }
+ return uri;
+ }
+
+ public void setInitialSelection(IStructuredSelection initialSelection)
+ {
+ if (initialSelection != null && !initialSelection.isEmpty())
+ {
+ Object object = initialSelection.getFirstElement();
+ String wsdlURI = toWsdlURI(object);
+ wsdlURI_ = wsdlURI;
+
+ if (wsdlURI != null && webServiceURI != null)
+ {
+ handleWebServiceURI(wsdlURI);
+
+ webServiceURI.removeModifyListener(modifyListener_);
+ webServiceURI.setText(getObjectSelectionDisplayableString());
+ webServiceURI.addModifyListener(modifyListener_);
+ }
+ }
+ }
+
+ private String toWsdlURI(Object object)
+ {
+ if (object instanceof ServiceImpl)
+ return J2EEActionAdapterFactory.getWSDLURI((ServiceImpl)object);
+ else if (object instanceof WSDLResourceImpl)
+ return J2EEActionAdapterFactory.getWSDLURI((WSDLResourceImpl)object);
+ else if (object instanceof ServiceRef)
+ return J2EEActionAdapterFactory.getWSDLURI((ServiceRef)object);
+ else if (object instanceof IFile)
+ return ((IFile)object).getFullPath().toString();
+ else if (object instanceof String)
+ return (String)object;
+ else
+ return null;
+ }
+
+ public IStructuredSelection getObjectSelection()
+ {
+ StructuredSelection ss;
+ if (tree != null && tree.getWsdlURI() != null)
+ ss = new StructuredSelection(tree.getWsdlURI());
+ else
+ ss = new StructuredSelection(wsdlURI_);
+ return new StructuredSelection(
+ new WSDLSelectionWrapper( webServicesParser, ss));
+ }
+
+ public WebServicesParser getWebServicesParser()
+ {
+ return webServicesParser;
+ }
+
+ public IStatus validateSelection(IStructuredSelection objectSelection)
+ {
+ return Status.OK_STATUS;
+ }
+
+ public IProject getProject()
+ {
+ String wsdlURI;
+
+ if (tree != null)
+ wsdlURI = tree.getWsdlURI();
+ else
+ wsdlURI = wsdlURI_;
+
+ if (wsdlURI != null)
+ {
+ IProject p = getProjectFromURI(wsdlURI);
+ if (p!=null && p.exists())
+ return p;
+
+ String wsRelPath = wsdlURI_;
+ IResource wsRes = ResourceUtils.findResource(wsRelPath);
+ if (wsRes!=null && wsRes instanceof IFile)
+ {
+ IProject p2 = ((IFile)wsRes).getProject();
+ return p2;
+ }
+
+ }
+ return null;
+ }
+
+ public String getComponentName()
+ {
+
+ String wsdlURI;
+ if (tree != null)
+ wsdlURI = tree.getWsdlURI();
+ else
+ wsdlURI = wsdlURI_;
+
+ if (wsdlURI != null)
+ {
+ String cname = getComponentNameFromURI(wsdlURI);
+ if (cname!=null && cname.length()>0)
+ return cname;
+
+ String wsRelPath = wsdlURI_;
+ IResource wsRes = ResourceUtils.findResource(wsRelPath);
+ if (wsRes!=null && wsRes instanceof IFile)
+ {
+ IVirtualComponent comp = ResourceUtils.getComponentOf(wsRes);
+ if (comp!=null)
+ {
+ return comp.getName();
+ }
+ }
+
+ }
+ return null;
+ }
+
+ private IProject getProjectFromURI(String uri)
+ {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ String wkspcRootLoc = root.getLocation().toString();
+ int idx = uri.indexOf(wkspcRootLoc);
+ if (idx != -1)
+ {
+ String relPath = uri.substring(wkspcRootLoc.length()+idx);
+ IResource res = root.findMember(new Path(relPath));
+ if (res instanceof IFile)
+ {
+ IProject p = ((IFile)res).getProject();
+ return p;
+ }
+ }
+ return null;
+ }
+
+ private String getComponentNameFromURI(String uri)
+ {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ String wkspcRootLoc = root.getLocation().toString();
+ int idx = uri.indexOf(wkspcRootLoc);
+ if (idx != -1)
+ {
+ String relPath = uri.substring(wkspcRootLoc.length()+idx);
+ IResource res = root.findMember(new Path(relPath));
+ if (res instanceof IFile)
+ {
+ IVirtualComponent comp = ResourceUtils.getComponentOf(res);
+ if (comp!=null)
+ {
+ return comp.getName();
+ }
+ }
+ }
+ return null;
+ }
+
+ public String getObjectSelectionDisplayableString()
+ {
+ if (tree != null)
+ {
+ return UniversalPathTransformer.toPath(tree.getWsdlURI());
+ }
+ else
+ {
+ return UniversalPathTransformer.toPath(wsdlURI_);
+ }
+ }
+
+ public Point getWidgetSize() {
+ return new Point( 580, 580);
+ }
+
+ public boolean validate(String s) {
+ String wsURI = s;
+
+ if (wsURI.indexOf(':') < 0)
+ {
+ IFile file = uri2IFile(wsURI);
+ if (file != null)
+ wsURI = iFile2URI(file);
+ }
+ if (wsURI != null && wsURI.indexOf(':') >= 0 && webServicesParser.getWebServiceEntityByURI(wsURI) == null)
+ {
+ TimedWSDLSelectionConditionCommand cmd = new TimedWSDLSelectionConditionCommand();
+ cmd.setWebServicesParser(webServicesParser);
+ cmd.setWebServiceURI(wsURI);
+ cmd.execute(null, null);
+ }
+
+ // prime widget based on the string
+ wsdlURI_ = wsURI;
+ if (tree != null)
+ tree.setWebServiceURI(wsURI);
+
+ WebServiceEntity entity = webServicesParser.getWebServiceEntityByURI(wsURI);
+ if (entity != null && entity.getType() == WebServiceEntity.TYPE_WSDL)
+ return true;
+ else
+ return false;
+
+ }
+}

Back to the top