| /******************************************************************************* |
| * Copyright (c) 2006, 2007 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 |
| * -------- -------- ----------------------------------------------------------- |
| * 20060330 128827 kathy@ca.ibm.com - Kathy Chan |
| * 20060403 128827 kathy@ca.ibm.com - Kathy Chan |
| * 20060524 127343 mahutch@ca.ibm.com - Mark Hutchinson |
| * 20070116 169138 mahutch@ca.ibm.com - Mark Hutchinson |
| *******************************************************************************/ |
| package org.eclipse.jst.ws.internal.axis.creation.ui.task; |
| |
| |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Map; |
| |
| import javax.wsdl.Binding; |
| import javax.wsdl.Definition; |
| import javax.wsdl.Port; |
| import javax.wsdl.Service; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jst.ws.internal.axis.consumption.core.AxisConsumptionCoreMessages; |
| import org.eclipse.jst.ws.internal.axis.consumption.core.common.JavaWSDLParameter; |
| import org.eclipse.jst.ws.internal.axis.consumption.ui.AxisConsumptionUIMessages; |
| import org.eclipse.jst.ws.internal.axis.consumption.ui.util.PlatformUtils; |
| import org.eclipse.jst.ws.internal.axis.consumption.ui.util.WSDLUtils; |
| import org.eclipse.jst.ws.internal.plugin.WebServicePlugin; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.wst.command.internal.env.common.FileResourceUtils; |
| import org.eclipse.wst.command.internal.env.core.common.StatusUtils; |
| import org.eclipse.wst.command.internal.env.core.context.ResourceContext; |
| import org.eclipse.wst.common.environment.IEnvironment; |
| import org.eclipse.wst.common.environment.IStatusHandler; |
| import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; |
| import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser; |
| import org.eclipse.wst.ws.internal.wsrt.WebServiceInfo; |
| |
| public class BackupSkelImplCommand extends AbstractDataModelOperation |
| { |
| private final String IMPL = "Impl"; //$NON-NLS-1$ |
| private final String DOT = "."; //$NON-NLS-1$ |
| private final String BAK_EXT = "bak"; //$NON-NLS-1$ |
| private final String JAVA = "java"; //$NON-NLS-1$ |
| private WebServicesParser webServicesParser; |
| private JavaWSDLParameter javaWSDLParam; |
| |
| private WebServiceInfo webServiceInfo; |
| |
| public BackupSkelImplCommand( ) { |
| } |
| |
| |
| public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) |
| { |
| IEnvironment environment = getEnvironment(); |
| if (javaWSDLParam == null) |
| { |
| IStatus status = StatusUtils.errorStatus(AxisConsumptionCoreMessages.MSG_ERROR_JAVA_WSDL_PARAM_NOT_SET); |
| environment.getStatusHandler().reportError(status); |
| return status; |
| } |
| |
| IStatus status = Status.OK_STATUS; |
| // Read WSDL |
| Definition definition = null; |
| String wsdlURL = javaWSDLParam.getInputWsdlLocation(); |
| try |
| { |
| URL url = new URL(wsdlURL); |
| definition = webServicesParser.getWSDLDefinition(url.toString()); |
| } |
| catch(MalformedURLException e) |
| { |
| wsdlURL = PlatformUtils.getFileURLFromPath(new Path(wsdlURL)); |
| definition = webServicesParser.getWSDLDefinition(wsdlURL); |
| } |
| |
| // Compute the qualified name of the Java bean skeleton |
| Service service = null; |
| Port port = null; |
| ArrayList implURLList = new ArrayList(); |
| if (definition != null) { |
| StringBuffer beanName = new StringBuffer(); |
| |
| //first check if there is a mapping for this namespace to a package name |
| //if not then compute package name from namespace |
| String beanPackageName = null; |
| Map mappings = javaWSDLParam.getMappings(); |
| if (mappings != null) |
| { |
| String targetNamespace = definition.getTargetNamespace(); |
| beanPackageName = (String)mappings.get(targetNamespace); |
| } |
| if (beanPackageName == null) |
| { |
| beanPackageName = WSDLUtils.getPackageName(definition); |
| } |
| |
| javaWSDLParam.setBeanPackage(beanPackageName); |
| beanName.append(beanPackageName); |
| beanName.append(DOT); |
| |
| service = (Service) definition.getServices().values().iterator().next(); |
| port = (Port) service.getPorts().values().iterator().next(); |
| Binding binding = port.getBinding(); |
| |
| String qName = binding.getQName().getLocalPart(); |
| beanName.append(qName.substring(0,1).toUpperCase());//Fix for bug 169138, need to ensure first char is uppercase |
| beanName.append(qName.substring(1)); |
| |
| beanName.append(IMPL); |
| String beanNameString = beanName.toString(); |
| javaWSDLParam.setBeanName(beanNameString); |
| |
| // Check if the skeleton implementation bean already exist or not. |
| // If it does, then back it up as xxx.java.bak before proceeding to call the Axis emitter |
| |
| FileInputStream finStream = null; |
| |
| ResourceContext context = WebServicePlugin.getInstance().getResourceContext(); |
| IStatusHandler statusHandler = environment.getStatusHandler(); |
| |
| String beanNamePathString = beanNameString.replace('.',IPath.SEPARATOR); |
| IPath skelImplPath = new Path (javaWSDLParam.getJavaOutput()).append(new Path (beanNamePathString)).addFileExtension(JAVA); |
| |
| // store the name of the implURL |
| String implURLString; |
| try { |
| implURLString = skelImplPath.toFile().toURL().toString(); |
| } catch (MalformedURLException e1) { |
| implURLString = PlatformUtils.getFileURLFromPath(skelImplPath); |
| } |
| implURLList.add( implURLString ); |
| |
| if (skelImplPath.toFile().exists()) { |
| |
| IPath targetPath = skelImplPath.addFileExtension(BAK_EXT); |
| try { |
| finStream = new FileInputStream(skelImplPath.toString()); |
| if (finStream != null) { |
| FileResourceUtils.createFileAtLocation(context, targetPath.makeAbsolute(), finStream, |
| monitor, statusHandler); |
| finStream.close(); |
| } |
| } catch (Exception e) { |
| status = StatusUtils.errorStatus(NLS.bind(AxisConsumptionCoreMessages.MSG_ERROR_MOVE_RESOURCE,new String[]{e.getLocalizedMessage()}), e); |
| environment.getStatusHandler().reportError(status); |
| } finally { |
| try { |
| if (finStream != null) { |
| finStream.close(); |
| } |
| } catch (IOException e) { |
| } |
| } |
| } |
| |
| String[] implURLArray = new String[implURLList.size()]; |
| webServiceInfo.setImplURLs( (String[]) (implURLList.toArray(implURLArray))); |
| |
| } |
| else { |
| status = StatusUtils.errorStatus( NLS.bind(AxisConsumptionUIMessages.MSG_ERROR_WSDL_NO_DEFINITION, new String[] {wsdlURL})); |
| environment.getStatusHandler().reportError(status); |
| } |
| |
| return status; |
| } |
| |
| |
| /** |
| * Sets the javaWSDLParam. |
| * @param javaWSDLParam The javaWSDLParam to set |
| */ |
| public void setJavaWSDLParam(JavaWSDLParameter javaWSDLParam) { |
| this.javaWSDLParam = javaWSDLParam; |
| } |
| |
| /** |
| * @param webServicesParser The webServicesParser to set. |
| */ |
| public void setWebServicesParser(WebServicesParser webServicesParser) { |
| this.webServicesParser = webServicesParser; |
| } |
| |
| |
| public void setWebServiceInfo(WebServiceInfo webServiceInfo) { |
| this.webServiceInfo = webServiceInfo; |
| } |
| |
| |
| } |