1 package net.sf.saxon.xom; 2 3 import net.sf.saxon.Configuration; 4 import net.sf.saxon.om.DocumentInfo; 5 import net.sf.saxon.om.NamePool; 6 import net.sf.saxon.om.NodeInfo; 7 import net.sf.saxon.om.VirtualNode; 8 import net.sf.saxon.type.Type; 9 import nu.xom.Attribute; 10 import nu.xom.Document; 11 import nu.xom.Element; 12 import nu.xom.Node; 13 14 import java.util.HashMap ; 15 16 26 27 public class DocumentWrapper extends NodeWrapper implements DocumentInfo { 28 29 protected Configuration config; 30 31 protected String baseURI; 32 33 protected int documentNumber; 34 35 private HashMap idIndex; 36 37 48 49 public DocumentWrapper(Document doc, String baseURI, Configuration config) { 50 super(doc, null, 0); 51 this.node = doc; 52 this.nodeKind = Type.DOCUMENT; 53 this.baseURI = baseURI; 54 this.docWrapper = this; 55 setConfiguration(config); 56 XOMObjectModel model = (XOMObjectModel)config.findExternalObjectModel(doc); 57 model.addToDocumentMap(doc, this); 58 } 59 60 68 69 public VirtualNode wrap(Node node) { 70 if (node == this.node) { 71 return this; 72 } 73 return makeWrapper(node, this); 74 } 75 76 87 88 public void setConfiguration(Configuration config) { 89 this.config = config; 90 this.documentNumber = config.getDocumentNumberAllocator().allocateDocumentNumber(); 91 } 92 93 96 97 public Configuration getConfiguration() { 98 return config; 99 } 100 101 107 108 public NamePool getNamePool() { 109 return config.getNamePool(); 110 } 111 112 118 119 public int getDocumentNumber() { 120 return documentNumber; 121 } 122 123 134 135 public NodeInfo selectID(String id) { 136 if (idIndex == null) { 137 idIndex = new HashMap (50); 138 Document doc = (Document) node; 139 buildIDIndex(doc.getRootElement()); 140 } 141 return (NodeInfo)idIndex.get(id); 142 } 143 144 145 private void buildIDIndex(Element elem) { 146 for (int i=elem.getChildCount(); --i >= 0 ; ) { 149 Node child = elem.getChild(i); 150 if (child instanceof Element) { 151 buildIDIndex((Element)child); 152 } 153 } 154 for (int i=elem.getAttributeCount(); --i >= 0 ; ) { 155 Attribute att = elem.getAttribute(i); 156 if (att.getType() == Attribute.Type.ID) { 157 idIndex.put(att.getValue(), wrap(elem)); 158 } 159 } 160 } 161 162 173 174 public String [] getUnparsedEntity(String name) { 175 return null; 176 } 177 178 } 179 180 | Popular Tags |