| /******************************************************************************* |
| * Copyright (c) 2011 BSI Business Systems Integration AG. |
| * 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: |
| * Daniel Wiehl (BSI Business Systems Integration AG) - initial API and implementation |
| ******************************************************************************/ |
| /** |
| * |
| */ |
| package org.eclipse.scout.sdk.ws.jaxws.operation; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.scout.commons.StringUtility; |
| import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument; |
| import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument.ScoutXmlElement; |
| import org.eclipse.scout.sdk.operation.IOperation; |
| import org.eclipse.scout.sdk.util.typecache.IWorkingCopyManager; |
| import org.eclipse.scout.sdk.workspace.IScoutBundle; |
| import org.eclipse.scout.sdk.ws.jaxws.JaxWsSdk; |
| import org.eclipse.scout.sdk.ws.jaxws.resource.IResourceListener; |
| import org.eclipse.scout.sdk.ws.jaxws.resource.ResourceFactory; |
| import org.eclipse.scout.sdk.ws.jaxws.resource.XmlResource; |
| import org.eclipse.scout.sdk.ws.jaxws.swt.model.BuildJaxWsBean; |
| import org.eclipse.scout.sdk.ws.jaxws.swt.model.SunJaxWsBean; |
| import org.eclipse.scout.sdk.ws.jaxws.swt.wizard.page.ElementBean; |
| import org.eclipse.scout.sdk.ws.jaxws.util.JaxWsSdkUtility; |
| import org.eclipse.scout.sdk.ws.jaxws.util.PathNormalizer; |
| |
| public class WsFilesMoveOperation implements IOperation { |
| |
| public static final int ID_WSDL_FILE = 1 << 1; |
| public static final int ID_REF_WSDL = 1 << 2; |
| public static final int ID_REF_XSD = 1 << 3; |
| public static final int ID_WSDL_SUNJAXWS_REGISTRATION = 1 << 4; |
| public static final int ID_WSDL_BUILDJAXWS_REGISTRATION = 1 << 5; |
| public static final int ID_BINDING_FILE = 1 << 6; |
| |
| private IScoutBundle m_bundle; |
| private SunJaxWsBean m_sunJaxWsBean; |
| private BuildJaxWsBean m_buildJaxWsBean; |
| private List<ElementBean> m_elements; |
| private IFolder m_destination; |
| |
| @Override |
| public void validate() throws IllegalArgumentException { |
| if (m_bundle == null) { |
| throw new IllegalArgumentException("No bundle set"); |
| } |
| if (m_buildJaxWsBean == null) { |
| throw new IllegalArgumentException("No buildJaxWsBean set"); |
| } |
| if (m_elements == null) { |
| throw new IllegalArgumentException("No elements set"); |
| } |
| if (m_destination == null) { |
| throw new IllegalArgumentException("No destination path set"); |
| } |
| } |
| |
| @Override |
| public void run(IProgressMonitor monitor, IWorkingCopyManager workingCopyManager) throws CoreException, IllegalArgumentException { |
| JaxWsSdk.getDefault().getMarkerQueueManager().suspend(); |
| try { |
| String wsdlFileName = null; |
| for (ElementBean element : m_elements) { |
| switch (element.getId()) { |
| case ID_WSDL_FILE: |
| case ID_REF_WSDL: |
| case ID_REF_XSD: { |
| moveFile((IFile) element.getResource(), m_destination, monitor); |
| break; |
| } |
| case ID_WSDL_SUNJAXWS_REGISTRATION: { |
| wsdlFileName = new Path(m_sunJaxWsBean.getWsdl()).lastSegment(); |
| m_sunJaxWsBean.setWsdl(PathNormalizer.toWsdlPath(m_destination.getProjectRelativePath().append(wsdlFileName).toString())); |
| ResourceFactory.getSunJaxWsResource(m_bundle).storeXml(m_sunJaxWsBean.getXml().getDocument(), IResourceListener.EVENT_SUNJAXWS_WSDL_CHANGED, monitor, m_sunJaxWsBean.getAlias()); |
| break; |
| } |
| case ID_WSDL_BUILDJAXWS_REGISTRATION: { |
| wsdlFileName = new Path(m_buildJaxWsBean.getWsdl()).lastSegment(); |
| m_buildJaxWsBean.setWsdl(PathNormalizer.toWsdlPath(m_destination.getProjectRelativePath().append(wsdlFileName).toString())); |
| ResourceFactory.getBuildJaxWsResource(m_bundle).storeXml(m_buildJaxWsBean.getXml().getDocument(), IResourceListener.EVENT_BUILDJAXWS_WSDL_CHANGED, monitor, m_buildJaxWsBean.getAlias()); |
| break; |
| } |
| case ID_BINDING_FILE: { |
| IFile bindingFile = (IFile) element.getResource(); |
| |
| XmlResource xmlResource = new XmlResource(m_bundle); |
| xmlResource.setFile(bindingFile); |
| ScoutXmlDocument xmlDocument = xmlResource.loadXml(); |
| String namespacePrefix = xmlDocument.getRoot().getNamePrefix(); |
| ScoutXmlElement xmlBindings = xmlDocument.getChild(StringUtility.join(":", namespacePrefix, "bindings")); |
| if (xmlBindings.hasAttribute("wsdlLocation")) { |
| xmlBindings.removeAttribute("wsdlLocation"); |
| xmlBindings.setAttribute("wsdlLocation", (String) element.getData()); |
| xmlResource.storeXml(xmlDocument, IResourceListener.EVENT_UNKNOWN, monitor); |
| } |
| break; |
| } |
| } |
| } |
| |
| // rebuild webservice stub |
| if (wsdlFileName != null) { |
| WsStubGenerationOperation op = new WsStubGenerationOperation(); |
| op.setBundle(m_bundle); |
| op.setAlias(m_buildJaxWsBean.getAlias()); |
| op.setProperties(m_buildJaxWsBean.getPropertiers()); |
| op.setWsdlFileName(wsdlFileName); |
| op.setWsdlFolder(m_destination); |
| op.run(monitor, workingCopyManager); |
| } |
| } |
| finally { |
| JaxWsSdk.getDefault().getMarkerQueueManager().resume(); |
| } |
| } |
| |
| private void moveFile(IFile file, IFolder destinationFolderPath, IProgressMonitor monitor) throws CoreException { |
| if (file == null || !file.exists()) { |
| return; |
| } |
| try { |
| // ensure folder to be created |
| JaxWsSdkUtility.getFolder(m_bundle, destinationFolderPath.getProjectRelativePath(), true); |
| // move file |
| file.move(destinationFolderPath.getFullPath().append(file.getName()), true, true, monitor); |
| } |
| catch (Exception e) { |
| JaxWsSdk.logError(e); |
| } |
| } |
| |
| @Override |
| public String getOperationName() { |
| return WsFilesMoveOperation.class.getName(); |
| } |
| |
| public IScoutBundle getBundle() { |
| return m_bundle; |
| } |
| |
| public void setBundle(IScoutBundle bundle) { |
| m_bundle = bundle; |
| } |
| |
| public SunJaxWsBean getSunJaxWsBean() { |
| return m_sunJaxWsBean; |
| } |
| |
| public void setSunJaxWsBean(SunJaxWsBean sunJaxWsBean) { |
| m_sunJaxWsBean = sunJaxWsBean; |
| } |
| |
| public BuildJaxWsBean getBuildJaxWsBean() { |
| return m_buildJaxWsBean; |
| } |
| |
| public void setBuildJaxWsBean(BuildJaxWsBean buildJaxWsBean) { |
| m_buildJaxWsBean = buildJaxWsBean; |
| } |
| |
| public IFolder getDestination() { |
| return m_destination; |
| } |
| |
| public void setDestination(IFolder destination) { |
| m_destination = destination; |
| } |
| |
| public List<ElementBean> getElements() { |
| return m_elements; |
| } |
| |
| public void setElements(List<ElementBean> elements) { |
| m_elements = elements; |
| } |
| } |