Skip to main content
summaryrefslogblamecommitdiffstats
blob: 738e58033eab5a05f0fa052121c04f506c833182 (plain) (tree)
1
2
3
4
5
6
7
8
                                                                                
                                                       



                                                                        
  
                



                                                                                                                                                                            
                                                  
                                                                                                          
                                                  
                                                     
                                                                                                                       
                                                                                                                  
                                                                                


                                                                                 
                                                    



                                              


                                                 
                                     
                                         
                                       



                                                                   
                                                                        
                                                                              

                                                                 
                                                         
                                                                 
                                                                 
                                                      
                                                  
 
                                                                                    

                                          
                      


                                  



                            
    






                                                         
                                                                                                                              











                                                                                                  
             






                                                                                                                                

                                                        
                                                                
                                                

                                                         
                                                               
                                                      

                                                                 
                                                               

                                                
                                    
                  

                                                                          
                                          
                 
           
          
                                                       
         
                




                                                                   
                









                                          
                                                                                        













                                                                               





                                                                    



                                                  









                                                                                 




                                                             

                                                                      






                                











                                                                                     
                                 




                                                                

                                                          










                                  



                                                                                             



                                  
/*******************************************************************************
 * 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
 * -------- -------- -----------------------------------------------------------
 * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
 * 20070327   172339 kathy@ca.ibm.com - Kathy Chan
 * 20070125   171071 makandre@ca.ibm.com - Andrew Mak, Create public utility method for copying WSDL files
 * 20070410   181827 kathy@ca.ibm.com - Kathy Chan
 * 20080220   219537 makandre@ca.ibm.com - Andrew Mak
 * 20080501   229728 makandre@ca.ibm.com - Andrew Mak, uppercase .WSDL cannot be found by the Web Service Client wizard
 * 20081208   257618 mahutch@ca.ibm.com - Mark Hutchinson, Add Mechanism for Adopters to map Services to WSDL URLs
 * 20090310   242440 yenlu@ca.ibm.com - Yen Lu, Pluggable IFile to URI Converter
 *******************************************************************************/
package org.eclipse.jst.ws.internal.consumption.ui.widgets;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
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.jface.viewers.IStructuredSelection;
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.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.ws.internal.converter.IIFile2UriConverter;
import org.eclipse.wst.ws.internal.plugin.WSPlugin;
import org.eclipse.wst.ws.internal.ui.utils.AdapterUtils;
import org.eclipse.wst.ws.internal.util.UniversalPathTransformer;
import org.eclipse.wst.ws.internal.wsfinder.WSDLURLStringWrapper;
import org.eclipse.wst.wsdl.internal.impl.ServiceImpl;
import org.eclipse.wst.wsdl.util.WSDLResourceImpl;

public class WSDLSelectionWidgetDefaultingCommand extends AbstractDataModelOperation
{
  private IStructuredSelection selection_;
  private String uri_;
  
  public String getWebServiceURI()
  {
	if (uri_ != null)
		return uri_;
	  
    uri_ = "";
    
  	if (selection_ != null && !selection_.isEmpty())
  	{
  	  Object firstSel = selection_.getFirstElement();
  	  if (firstSel instanceof IFile)
  	  {
  	    IFile ifile = (IFile)firstSel;
  	    String ext = ifile.getFileExtension();
  	    if (ext != null && (ext.equalsIgnoreCase("wsdl") || ext.equalsIgnoreCase("wsil") || ext.equalsIgnoreCase("html")))
  	    {  	    
  	      IIFile2UriConverter converter = WSPlugin.getInstance().getIFile2UriConverter();
  	      boolean allowBaseConversionOnFailure = true;
  	      if (converter != null)
  	      {
  	    	  uri_ = converter.convert(ifile);
  	    	  if (uri_ == null)
  	    		  allowBaseConversionOnFailure = converter.allowBaseConversionOnFailure();
  	    		  
  	      }
  	      if ((uri_ == null || uri_.length() == 0) && allowBaseConversionOnFailure)
  	        uri_ = ifile.getFullPath().toString();
  	    }
  	  } 
  	  else if (Platform.getAdapterManager().hasAdapter(firstSel, WSDLURLStringWrapper.class.getName())) {
		Object adaptedObject = Platform.getAdapterManager().loadAdapter(firstSel, WSDLURLStringWrapper.class.getName());
  		WSDLURLStringWrapper wrapper = (WSDLURLStringWrapper)adaptedObject;
  		uri_ = wrapper.getWSDLURLString();  		
  	  }
  	  else if (firstSel instanceof ServiceImpl)
      {
        ServiceImpl serviceImpl = (ServiceImpl)firstSel;
        uri_ = J2EEActionAdapterFactory.getWSDLURI(serviceImpl);
      } else if (firstSel instanceof ServiceRef)
      {
  	    ServiceRef serviceRef = (ServiceRef)firstSel;
        uri_ = J2EEActionAdapterFactory.getWSDLURI(serviceRef);
      } else if (firstSel instanceof WSDLResourceImpl)
  	  {
  	    WSDLResourceImpl wsdlRI = (WSDLResourceImpl)firstSel;
  	    uri_ = J2EEActionAdapterFactory.getWSDLURI(wsdlRI);
  	  } else if (firstSel instanceof String)
  	  {
  	    uri_ = (String)firstSel;
  	  } else {
  		String adaptedUri = AdapterUtils.getAdaptedWSDL(firstSel);
  		if (adaptedUri != null) {
  			uri_ = adaptedUri;
  		}
  	  }
  	  
  	  uri_ = UniversalPathTransformer.toPath(uri_);
  	}
    return uri_;
  }
 
  public void setInitialSelection( IStructuredSelection selection )
  {
    selection_ = selection;   
    uri_ = null;
  }
  
  public boolean getGenWSIL()
  {
    return false;
  }
  
  public String getWsilURI()
  {
  	String wsURI = getWebServiceURI();
  	if (wsURI != null && wsURI.length() > 0 && wsURI.toLowerCase().endsWith("wsdl"))
  	{
      StringBuffer sb = new StringBuffer(wsURI.substring(0, wsURI.length()-4));
      sb.append("wsil");
      return sb.toString();
  	}
    return "";
  }
  
  public IProject getProject()
  {
  	IProject p = getProjectFromInitialSelection(selection_);
  	return p;
  }
  
  public String getComponentName()
  {
    String cname = getComponentNameFromInitialSelection(selection_);
    return cname;
  }
  
  private boolean hasProtocol(String url) {	  
    return url.indexOf(":") != -1;	  
  }
  
  private IProject getProjectFromInitialSelection(IStructuredSelection selection)
  {
    if (selection != null && selection.size() == 1)
    {
      Object obj = selection.getFirstElement();
      if (obj != null) 
      {
        try
        { 
          IResource resource = ResourceUtils.getResourceFromSelection(obj);
          if (resource==null) {
            String uri = getWebServiceURI();
            if (hasProtocol(uri)) return null;
            return ResourceUtils.getProjectOf(new Path(uri));
          }
          else
            return ResourceUtils.getProjectOf(resource.getFullPath());
        } catch(CoreException e)
        {
          return null;
        }        
      }
    }
    return null;
  }
  
  private String getComponentNameFromInitialSelection(IStructuredSelection selection)
  {
    if (selection != null && selection.size() == 1)
    {
      Object obj = selection.getFirstElement();
      if (obj != null) 
      {
        try
        { 
          IResource resource = ResourceUtils.getResourceFromSelection(obj);
          IVirtualComponent comp;
          if (resource==null) {
            String uri = getWebServiceURI();
            if (hasProtocol(uri)) return null;              
            comp = ResourceUtils.getComponentOf(new Path(uri)) ;
          }
          else 
            comp = ResourceUtils.getComponentOf(resource);
          if (comp!=null)
          {
            return comp.getName();
          }
        } catch(CoreException e)
        {
          return null;
        }        
      }
    }
    return null;
  }

  public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
  {
	  return Status.OK_STATUS;
  }    
     
}

Back to the top