diff options
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/wsitools/org/eclipse/wst/wsi/internal/xml/schema/TargetNamespaceProcessor.java')
-rw-r--r-- | bundles/org.eclipse.wst.wsi/wsitools/org/eclipse/wst/wsi/internal/xml/schema/TargetNamespaceProcessor.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.wsi/wsitools/org/eclipse/wst/wsi/internal/xml/schema/TargetNamespaceProcessor.java b/bundles/org.eclipse.wst.wsi/wsitools/org/eclipse/wst/wsi/internal/xml/schema/TargetNamespaceProcessor.java new file mode 100644 index 000000000..95a61a5ea --- /dev/null +++ b/bundles/org.eclipse.wst.wsi/wsitools/org/eclipse/wst/wsi/internal/xml/schema/TargetNamespaceProcessor.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2002-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 - Initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.wsi.internal.xml.schema; + +import java.util.List; + +import org.eclipse.wst.wsi.internal.WSIException; +import org.eclipse.wst.wsi.internal.util.TestUtils; +import org.eclipse.wst.wsi.internal.xml.XMLDocumentCache; +import org.eclipse.wst.wsi.internal.xml.XMLUtils; + +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +/** + * This class processes target namespaces. Note this class is a specialization + * of org.wsi.xml.schema.XMLSchemaProcessor. + * + * @author Peter Brittenham (peterbr@us.ibm.com) + * @version 1.0.1 + */ +public class TargetNamespaceProcessor extends XMLSchemaProcessor +{ + + /** + * Constructor for TargetNamespaceProcess. + * + * @param context + * document context + * @param documentList + * cache of previously parsed documents + */ + public TargetNamespaceProcessor( + String context, + XMLDocumentCache documentList) + { + super(context, documentList, false); + } + + protected void processSchema(Element element) + { + String tns = null; + Attr attr = XMLUtils.getAttribute(element, ATTR_XSD_TARGETNAMESPACE); + + // If the attribute was found and value is not null, then add it to the list + if ((attr != null) && ((tns = attr.getValue()) != null)) + { + // Add the targetNamespace to the return list + returnList.add(tns); + } + } + + /** + * Search for all schema elements, load the xsd documents, and then process + * them. + * + * @param node + * node. + * @return a list. + * @throws WSIException + * if the XML schema file is not found or if it is not formatted + * correctly. + */ + public List processAllSchema(Node node) throws WSIException + { + return processAllSchema(node, context); + } + + /** + * Search for all schema elements, load the xsd documents, and then process + * them. + * + * @param node + * node. + * @return a list. + * @throws WSIException + * if the XML schema file is not found or if it is not formatted + * correctly. + */ + private List processAllSchema(Node node, String ctx) throws WSIException + { + // if xsd:schema element is found -> process schema + if (XMLUtils.equals(node, ELEM_XSD_SCHEMA)) + { + processSchema((Element) node); + + Node n = node.getFirstChild(); + while (n != null) + { + if (Node.ELEMENT_NODE == n.getNodeType()&& XMLUtils.equals(n, ELEM_XSD_IMPORT)) + { + Attr schemaLocation = XMLUtils.getAttribute((Element) n, ATTR_XSD_SCHEMALOCATION); + + // Try to parse imported XSD + if (schemaLocation != null && schemaLocation.getValue() != null) + { + if (!schemaLocations.contains(schemaLocation.getValue())) + { + schemaLocations.add(schemaLocation.getValue()); + try + { + // Read and pParse the XML schema document + Document document = parseXMLDocumentURL(schemaLocation.getValue(), ctx, TestUtils.getXMLSchemaLocation()); + processAllSchema(document.getDocumentElement(), XMLUtils.createURLString(schemaLocation.getValue(), ctx)); + } + catch (WSIException e) + { + if (throwException) throw e; + } + catch (Throwable t) + { + // NOTE: An exception will occur if the XML schema file is not + // found or if it is not formatted correctly + if (throwException) throw new WSIException(t.getMessage(), t); + } + } + } + } + n = n.getNextSibling(); + } + } + + // Return list created by the class that extends this class + return returnList; + } +} |