| /******************************************************************************* |
| * Copyright (c) 2009, 2010 by SAP AG, Walldorf. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * SAP AG - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.ws.jaxws.dom.runtime; |
| |
| import java.util.Collection; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.DomPackage; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IDOM; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IJavaWebServiceElement; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IServiceEndpointInterface; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebMethod; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebParam; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebService; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebServiceProject; |
| import org.eclipse.jst.ws.jaxws.dom.runtime.util.DomSwitch; |
| |
| /** |
| * |
| * @noextend This class is not intended to be extended by clients. |
| * |
| */ |
| public class DomUtil |
| { |
| public static final DomUtil INSTANCE = new DomUtil(); |
| |
| private final DomSwitch<String> implSwitch; |
| |
| public DomUtil() { |
| implSwitch = createImplFinderSwitch(); |
| } |
| |
| public void setFeatureValue(final EObject object, final int featureId, final Object value) |
| { |
| final EStructuralFeature feature = object.eClass().getEStructuralFeature(featureId); |
| object.eSet(feature, value); |
| } |
| |
| public Object getFeatureValue(final EObject object, final int featureId) |
| { |
| final EStructuralFeature feature = object.eClass().getEStructuralFeature(featureId); |
| return object.eGet(feature); |
| } |
| |
| public void addToCollectionFeature(final EObject object, final int featureId, final Object value) |
| { |
| @SuppressWarnings("unchecked") |
| final Collection<Object> oldValue = (Collection<Object>) getFeatureValue(object, featureId); |
| oldValue.add(value); |
| } |
| |
| public IWebServiceProject findProjectByName(IDOM dom, String name) |
| { |
| for (IWebServiceProject wsProject : dom.getWebServiceProjects()) |
| { |
| if (wsProject.getName().equals(name)) |
| { |
| return wsProject; |
| } |
| } |
| return null; |
| } |
| |
| public IWebService findWsByImplName(IWebServiceProject wsProject, String name) |
| { |
| for (IWebService ws : wsProject.getWebServices()) |
| { |
| if (ws.getImplementation().equals(name)) |
| { |
| return ws; |
| } |
| } |
| return null; |
| } |
| |
| public IServiceEndpointInterface findSeiByImplName(IWebServiceProject wsProject, String name) |
| { |
| for (IServiceEndpointInterface sei : wsProject.getServiceEndpointInterfaces()) |
| { |
| if (sei.getImplementation().equals(name)) |
| { |
| return sei; |
| } |
| } |
| return null; |
| } |
| |
| |
| public IWebMethod findWebMethodByImpl(IServiceEndpointInterface sei, String impl) |
| { |
| for (IWebMethod wm : sei.getWebMethods()) |
| { |
| if (wm.getImplementation().equals(impl)) |
| { |
| return wm; |
| } |
| } |
| return null; |
| } |
| |
| public IMethod findMethod(final IType seiType, final IWebMethod webMethod) throws JavaModelException |
| { |
| for (IMethod method : seiType.getMethods()) |
| { |
| if (webMethod.getImplementation().equals(calcImplementation(method))) { |
| return method; |
| } |
| } |
| |
| return null; |
| } |
| |
| public IJavaWebServiceElement findJavaWebServiceElemByImplName(IWebServiceProject wsProject, String name) |
| { |
| final IWebService ws = findWsByImplName(wsProject, name); |
| return ws == null ? findSeiByImplName(wsProject, name) : ws; |
| } |
| |
| /** |
| * Calculates the method signature to be used as implementation in {@link IWebMethod} |
| * @param method |
| * @return calculated string |
| * @throws JavaModelException |
| */ |
| public String calcImplementation(final IMethod method) throws JavaModelException |
| { |
| return method.getElementName() + method.getSignature(); |
| } |
| |
| /** |
| * Extract {@link IWebServiceProject} out of DOM object by recursively |
| * iterating parent objects. |
| * @param eObject |
| * @return the found project or <code>null</code> in case not found |
| */ |
| public IWebServiceProject findWsProject(EObject eObject) |
| { |
| EObject parent = eObject; |
| while (parent!=null) |
| { |
| if (parent instanceof IWebServiceProject) { |
| return (IWebServiceProject)parent; |
| } |
| |
| parent = parent.eContainer(); |
| } |
| |
| return null; |
| } |
| |
| /** |
| * Defines if this SEI is part of outside-in web service |
| * @param sei |
| * @return true if there is a web service with wsdlLocation set to something different than <code>null</code> |
| */ |
| public boolean isOutsideInWebService(final IServiceEndpointInterface sei) |
| { |
| if (sei == null) { |
| return false; |
| } |
| |
| for (IWebService webService : sei.getImplementingWebServices()) { |
| if (webService.getWsdlLocation()!=null) { |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| /** |
| * Calculates unique implementation for DOM object in the scope of the resource in which |
| * they exist. Useful when you need to uniquely identify DOM object. |
| * |
| * @param eObject |
| * @return calculated implementation |
| */ |
| public String calcUniqueImpl(final EObject eObject) |
| { |
| if (eObject.eClass().getClassifierID() == DomPackage.IWEB_PARAM) |
| { |
| final IWebParam wp = (IWebParam) eObject; |
| return ((IWebMethod)wp.eContainer()).getImplementation() + "[" + wp.getImplementation() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| return extractImplementation(eObject); |
| } |
| |
| /** |
| * Extracts the implementation property for DOM object without casting :-D. |
| * |
| * @param eObject |
| * @return the implementation |
| */ |
| public String extractImplementation(final EObject eObject) { |
| return implSwitch.doSwitch(eObject); |
| } |
| |
| private DomSwitch<String> createImplFinderSwitch() |
| { |
| return new DomSwitch<String>() |
| { |
| @Override |
| public String caseIWebService(IWebService ws) { |
| return ws.getImplementation(); |
| } |
| |
| @Override |
| public String caseIServiceEndpointInterface(IServiceEndpointInterface sei) { |
| return sei.getImplementation(); |
| } |
| |
| @Override |
| public String caseIWebMethod(IWebMethod wm) { |
| return wm.getImplementation(); |
| } |
| |
| @Override |
| public String caseIWebParam(IWebParam wp) { |
| return wp.getImplementation(); |
| } |
| |
| @Override |
| public String caseIWebServiceProject(IWebServiceProject wsProject) { |
| return wsProject.getName(); |
| } |
| }; |
| } |
| } |