| /******************************************************************************* |
| * 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 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.bpel.model.util; |
| |
| import javax.xml.namespace.QName; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.xsd.XSDElementDeclaration; |
| import org.eclipse.xsd.XSDPackage; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.XSDTypeDefinition; |
| |
| /** |
| * Help with resolution (lookup) of types and element declaration in schemas. |
| * |
| * @author IBM |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * @date Feb 27, 2007 |
| * |
| */ |
| |
| @SuppressWarnings("nls") |
| public class XSDUtil |
| { |
| /** Lookup type definitions */ |
| public static final String XSD_TYPE_DEFINITION = XSDPackage.eINSTANCE.getXSDTypeDefinition().getName(); |
| |
| /** Lookup element declarations */ |
| public static final String XSD_ELEMENT_DECLARATION = XSDPackage.eINSTANCE.getXSDElementDeclaration().getName(); |
| |
| /** Lookup schema */ |
| public static final String XSD_SCHEMA = XSDPackage.eINSTANCE.getXSDSchema().getName(); |
| |
| /** |
| * Tests if <code>typeName</code> is a recognized reference type. |
| * @param typeName the thing that we can lookup |
| * @return true if we can, false if we cannot |
| */ |
| |
| public static boolean isSchemaType(String typeName) |
| { |
| return typeName == null ? false : |
| XSD_TYPE_DEFINITION.equals(typeName) |
| || XSD_ELEMENT_DECLARATION.equals(typeName); |
| } |
| |
| /** |
| * Resolve with the given schema the QName passed, given the hint on its refType |
| * |
| * @param schema the schema |
| * @param qname the QName to resolve |
| * @param name currently null |
| * @param refType the refType to resolve. |
| * |
| * @return the resolved object, or null |
| */ |
| |
| public static EObject resolve(XSDSchema schema, QName qname, String name, String refType) |
| { |
| EObject resolvedObject = null; |
| if (XSD_TYPE_DEFINITION.equals(refType)) |
| { |
| resolvedObject = resolveTypeDefinition(schema, qname); |
| } |
| else if (XSD_ELEMENT_DECLARATION.equals(refType)) |
| { |
| resolvedObject = resolveElementDeclaration(schema, qname); |
| } |
| else if (XSD_SCHEMA.equals(refType)) |
| { |
| return schema; |
| } |
| else |
| { |
| System.err.println(XSDUtil.class.getName() + ": unrecognized refType: " + refType); |
| } |
| return resolvedObject; |
| } |
| |
| |
| /** |
| * Find the element declaration pointed by the QName in the schema passed. |
| * |
| * @param schema the schema |
| * @param qname the QName of the element declaration to find |
| * @return the element declaration or null |
| */ |
| |
| public static XSDElementDeclaration resolveElementDeclaration(XSDSchema schema, QName qname) |
| { |
| // Bug 120110 - just bulletproofing :) |
| if (schema==null) |
| return null; |
| return schema.resolveElementDeclaration(XSDNamespaceAdjust (qname.getNamespaceURI()) , qname.getLocalPart()); |
| } |
| |
| |
| /** |
| * Find the type definition pointed by the QName in the schema passed. |
| * |
| * @param schema the schema |
| * @param qname the QName of the type definition to find |
| * @return the type definition or null |
| */ |
| public static XSDTypeDefinition resolveTypeDefinition(XSDSchema schema, QName qname) |
| { |
| // Bug 120110 - just bulletproofing :) |
| if (schema==null) |
| return null; |
| return schema.resolveTypeDefinition(XSDNamespaceAdjust ( qname.getNamespaceURI() ), qname.getLocalPart()); |
| } |
| |
| |
| |
| private static final String XSDNamespaceAdjust ( String nsURI ) { |
| if ("".equals(nsURI)) { |
| return null; |
| } |
| return nsURI; |
| } |
| } |