blob: 2781c080446424ae69b105e1b0a7aff8198146bf [file] [log] [blame]
/*
* Portions Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package com.sun.tools.internal.ws.wsdl.framework;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.namespace.QName;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import com.sun.xml.internal.ws.util.NamespaceSupport;
import com.sun.xml.internal.ws.util.xml.XmlUtil;
/**
* The context used by parser classes.
*
* @author WS Development Team
*/
public class ParserContext {
private final static String PREFIX_XMLNS = "xmlns";
public ParserContext(AbstractDocument doc, ArrayList listeners) {
_document = doc;
_listeners = listeners;
_nsSupport = new NamespaceSupport();
_wsdlLocation = new WSDLLocation();
}
public AbstractDocument getDocument() {
return _document;
}
public boolean getFollowImports() {
return _followImports;
}
public void setFollowImports(boolean b) {
_followImports = b;
}
public void push() {
_nsSupport.pushContext();
}
public void pop() {
_nsSupport.popContext();
}
public String getNamespaceURI(String prefix) {
return _nsSupport.getURI(prefix);
}
public Iterator getPrefixes() {
return _nsSupport.getPrefixes();
}
public String getDefaultNamespaceURI() {
return getNamespaceURI("");
}
public void registerNamespaces(Element e) {
for (Iterator iter = XmlUtil.getAllAttributes(e); iter.hasNext();) {
Attr a = (Attr) iter.next();
if (a.getName().equals(PREFIX_XMLNS)) {
// default namespace declaration
_nsSupport.declarePrefix("", a.getValue());
} else {
String prefix = XmlUtil.getPrefix(a.getName());
if (prefix != null && prefix.equals(PREFIX_XMLNS)) {
String nsPrefix = XmlUtil.getLocalPart(a.getName());
String uri = a.getValue();
_nsSupport.declarePrefix(nsPrefix, uri);
}
}
}
}
public QName translateQualifiedName(String s) {
if (s == null)
return null;
String prefix = XmlUtil.getPrefix(s);
String uri = null;
if (prefix == null) {
uri = getDefaultNamespaceURI();
} else {
uri = getNamespaceURI(prefix);
if (uri == null) {
throw new ParseException(
"parsing.unknownNamespacePrefix",
prefix);
}
}
return new QName(uri, XmlUtil.getLocalPart(s));
}
public void fireIgnoringExtension(QName name, QName parent) {
List _targets = null;
synchronized (this) {
if (_listeners != null) {
_targets = (List) _listeners.clone();
}
}
if (_targets != null) {
for (Iterator iter = _targets.iterator(); iter.hasNext();) {
ParserListener l = (ParserListener) iter.next();
l.ignoringExtension(name, parent);
}
}
}
public void fireDoneParsingEntity(QName element, Entity entity) {
List _targets = null;
synchronized (this) {
if (_listeners != null) {
_targets = (List) _listeners.clone();
}
}
if (_targets != null) {
for (Iterator iter = _targets.iterator(); iter.hasNext();) {
ParserListener l = (ParserListener) iter.next();
l.doneParsingEntity(element, entity);
}
}
}
//bug fix: 4856674, WSDLLocation context maintainence
//and utility funcitons
public void pushWSDLLocation() {
_wsdlLocation.push();
}
public void popWSDLLocation() {
_wsdlLocation.pop();
}
public void setWSDLLocation(String loc) {
_wsdlLocation.setLocation(loc);
}
public String getWSDLLocation() {
return _wsdlLocation.getLocation();
}
private boolean _followImports;
private AbstractDocument _document;
private NamespaceSupport _nsSupport;
private ArrayList _listeners;
//bug fix:4856674
private WSDLLocation _wsdlLocation;
}