/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.xml;
import gw.internal.xml.xsd.typeprovider.XmlSchemaTypeSchemaInfo;
import gw.internal.xml.xsd.typeprovider.simplevaluefactory.IDREFSimpleValueFactory;
import gw.internal.xml.xsd.typeprovider.xmlmatcher.XmlMatchHandler;
import gw.util.Pair;
import gw.util.ScopedMap;
import gw.xml.XmlElement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.XMLConstants;
/**
* Context for parsing XML.
*/
public class XmlDeserializationContext {
private XmlElement _currentElement;
private final List<Pair<String,IDREFSimpleValueFactory.Value>> _idrefs;
private final Map<String,XmlElement> _ids;
private final StringBuilder _allText = new StringBuilder();
private final XmlDeserializationContext _parent;
private XmlSchemaTypeSchemaInfo _schemaInfo;
private XmlMatchHandler _matchHandler;
private ScopedMap<String, String> _namespaces;
private boolean _mixed;
public XmlDeserializationContext( XmlDeserializationContext parent ) {
_parent = parent;
if ( parent == null ) {
_idrefs = new ArrayList<Pair<String, IDREFSimpleValueFactory.Value>>( );
_ids = new HashMap<String, XmlElement>();
_namespaces = new ScopedMap<String, String>();
_namespaces.put( XMLConstants.DEFAULT_NS_PREFIX, XMLConstants.NULL_NS_URI );
_namespaces.put( XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI );
_namespaces.put( XMLConstants.XMLNS_ATTRIBUTE, XMLConstants.XMLNS_ATTRIBUTE_NS_URI );
}
else {
_idrefs = parent._idrefs;
_ids = parent._ids;
_namespaces = parent._namespaces.pushScope();
_mixed = parent._mixed;
}
}
public void addNamespace( String prefix, String uri ) {
_namespaces.put( prefix, uri );
}
public Map<String, String> getNamespaces() {
return Collections.unmodifiableMap( _namespaces );
}
public void addIdref( String stringValue, IDREFSimpleValueFactory.Value value ) {
_idrefs.add( new Pair<String, IDREFSimpleValueFactory.Value>( stringValue, value ) );
}
public XmlElement getCurrentElement() {
return _currentElement;
}
public void setCurrentElement( XmlElement currentElement ) {
_currentElement = currentElement;
}
public void addId( String id, XmlElement element ) {
_ids.put( id, element );
}
public List<Pair<String, IDREFSimpleValueFactory.Value>> getIdrefs() {
return _idrefs;
}
public Map<String, XmlElement> getIds() {
return _ids;
}
public StringBuilder getAllText() {
return _allText;
}
public XmlDeserializationContext getParent() {
return _parent;
}
public void setSchemaInfo( XmlSchemaTypeSchemaInfo schemaInfo ) {
_schemaInfo = schemaInfo;
}
public XmlSchemaTypeSchemaInfo getSchemaInfo() {
return _schemaInfo;
}
public void setMatchHandler( XmlMatchHandler matchHandler ) {
_matchHandler = matchHandler;
}
public XmlMatchHandler getMatchHandler() {
return _matchHandler;
}
public void setMixed( boolean mixed ) {
_mixed = mixed;
}
public boolean isMixed() {
return _mixed;
}
}