/*******************************************************************************
* Copyright (c) 2005 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
*******************************************************************************/
package org.eclipse.bpel.model.util;
import javax.xml.namespace.QName;
import org.eclipse.bpel.model.messageproperties.Property;
import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.ExtensibilityElement;
import org.eclipse.wst.wsdl.WSDLPackage;
public class BPELServicesUtility {
static public QName getQName(Property property) {
QName qname;
Definition def = property.getEnclosingDefinition();
if (def == null) {
qname = new QName(property.getName());
} else {
qname = new QName(def.getTargetNamespace(), property.getName());
}
return qname;
}
static public QName getQName(PartnerLinkType plnk) {
QName qname;
Definition def = plnk.getEnclosingDefinition();
if (def == null) {
qname = new QName(plnk.getName());
} else {
qname = new QName(def.getTargetNamespace(), plnk.getName());
}
return qname;
}
// static public URI getPropertyProxyURI(Property property) {
// if (property != null && property.eIsProxy()) {
// // If a property is a proxy, we need to generate a URI for it which identifies a
// // resource from which it can be located. We use the resource of the
// // extensibility element which references it, since this will either contain
// // the property, or have an import to the file which contains it.
// String proxyURI = ((InternalEObject)property).eProxyURI().toString();
// int idx = proxyURI.lastIndexOf(':');
// String id = getPropertyId(property, proxyURI.substring(idx+1));
// if (property.getEnclosingDefinition().eResource() != null) {
// return property.getEnclosingDefinition().eResource().getURI().appendFragment(id);
// }
// return URI.createURI(id);
// }
// return null;
// }
static public String getIdForExtensibilityElement(ExtensibilityElement element, String localName) {
Definition def = element.getEnclosingDefinition();
if (def != null) {
String targetNameSpace = def.getTargetNamespace();
if (targetNameSpace != null){
return getId(new QName(targetNameSpace,localName), element);
}
}
return getId(new QName(":<unknown>:",localName), element);
}
static public String getIdForNestedNamedObject(String nestingObjectID, EObject nestedObject, String objectName) {
return nestedObject.eClass().getName()+":"+nestingObjectID+":"+objectName;
}
static public String getId(QName qName, EObject object) {
return object.eClass().getName()+":"+qName.getNamespaceURI()+":"+qName.getLocalPart();
}
static public String getProxyURI(URI baseURI, QName qname, EObject object) {
try {
return getProxyURI(baseURI, getId(qname, object));
} catch (Exception e) {
return null;
}
}
static public String getProxyURI(URI baseURI, String id) {
try {
return baseURI.appendFragment(id).toString();
} catch (Exception e) {
return null;
}
}
static public URI getXSDTypeProxyURI(URI baseURI, String namespace, String localPart) {
return baseURI.appendFragment("XSDType:" + namespace + '#' +localPart);
}
static public URI getXSDElementProxyURI(URI baseURI, String namespace, String localPart) {
return baseURI.appendFragment("XSDElement:" + namespace + '#' + localPart);
}
// static public Resource getResourceForProxy(EObject proxyObject, EObject hostingObject) {
// Resource resource = proxyObject.eResource();
// if (resource == null) {
// resource = hostingObject.eResource();
// }
// return resource;
// }
// static public String getNamespaceForProxy(ExtensibilityElement proxyObject, ExtensibilityElement hostingObject, String prefixedName) {
// String namespace = "";
// int separator = prefixedName.indexOf(':');
// if (separator != -1) {
// String prefix = prefixedName.substring(0,separator);
// Definition definition = proxyObject.getEnclosingDefinition();
// if (definition == null) {
// definition = hostingObject.getEnclosingDefinition();
// }
// if (definition != null) {
// namespace = definition.getNamespace(prefix);
// }
// }
// return namespace;
// }
// static public String getLocalNameForProxy(String prefixedName) {
// String localName = "";
// int separator = prefixedName.indexOf(':');
// if (separator != -1) {
// localName = prefixedName.substring(separator+1);
// }
// return localName;
// }
static public URI getProxyURI(Resource contextResource, String prefixedName, String targetClass) {
int i = prefixedName.indexOf(':');
String prefix = "";
String localName = prefixedName;
if (i != -1) {
prefix = prefixedName.substring(0,i);
localName = prefixedName.substring(i+1);
}
Definition definition = (Definition)EcoreUtil.getObjectByType(contextResource.getContents(), WSDLPackage.eINSTANCE.getDefinition());
String namespace = definition.getNamespace(prefix);
return contextResource.getURI().appendFragment(targetClass+":"+namespace+":"+localName);
}
static public String getProxyURIString(Resource contextResource, String prefixedName, EClass targetClass) {
return getProxyURI(contextResource, prefixedName, targetClass.getName()).toString();
}
}