/******************************************************************************* | |
* Copyright (c) 2009 by SAP AG, Walldorf. | |
* 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: | |
* 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(); | |
} | |
}; | |
} | |
} |