1 4 5 28 29 30 package com.sun.org.apache.xerces.internal.impl; 31 32 import javax.xml.XMLConstants ; 33 import javax.xml.stream.Location; 34 import javax.xml.stream.XMLStreamReader; 35 import javax.xml.stream.StreamFilter; 36 import javax.xml.stream.XMLStreamException; 37 import javax.xml.namespace.QName ; 38 import javax.xml.stream.events.XMLEvent; 39 40 41 51 52 public class XMLStreamFilterImpl implements javax.xml.stream.XMLStreamReader { 53 54 private StreamFilter fStreamFilter = null; 55 private XMLStreamReader fStreamReader = null; 56 private int fCurrentEvent; 57 private boolean fEventAccepted = false; 58 59 62 private boolean fStreamAdvancedByHasNext = false; 63 64 65 66 public XMLStreamFilterImpl(XMLStreamReader reader,StreamFilter filter){ 67 fStreamReader = reader; 68 this.fStreamFilter = filter; 69 70 try { 73 if (fStreamFilter.accept(fStreamReader)) { 74 fEventAccepted = true; 75 } else { 76 findNextEvent(); 77 } 78 }catch(XMLStreamException xs){ 79 System.err.println("Error while creating a stream Filter"+xs); 80 } 81 } 82 83 87 protected void setStreamFilter(StreamFilter sf){ 88 this.fStreamFilter = sf; 89 } 90 91 96 public int next() throws XMLStreamException { 97 if (fStreamAdvancedByHasNext && fEventAccepted) { 98 fStreamAdvancedByHasNext = false; 99 return fCurrentEvent; 100 } 101 int event = findNextEvent(); 102 if (event != -1) { 103 return event; 104 } 105 106 throw new IllegalStateException ("The stream reader has reached the end of the document, or there are no more "+ 107 " items to return"); 108 } 109 114 public int nextTag() throws XMLStreamException { 115 if (fStreamAdvancedByHasNext && fEventAccepted && 116 (fCurrentEvent == XMLEvent.START_ELEMENT || fCurrentEvent == XMLEvent.START_ELEMENT)) { 117 fStreamAdvancedByHasNext = false; 118 return fCurrentEvent; 119 } 120 121 int event = findNextTag(); 122 if (event != -1) { 123 return event; 124 } 125 throw new IllegalStateException ("The stream reader has reached the end of the document, or there are no more "+ 126 " items to return"); 127 } 128 129 134 public boolean hasNext() throws XMLStreamException { 135 if (fStreamReader.hasNext()) { 136 if (!fEventAccepted) { 137 if ((fCurrentEvent = findNextEvent()) == -1) { 138 return false; 139 } else { 140 fStreamAdvancedByHasNext = true; 141 } 142 } 143 return true; 144 } 145 return false; 146 } 147 148 private int findNextEvent() throws XMLStreamException { 149 fStreamAdvancedByHasNext = false; 150 while(fStreamReader.hasNext()){ 151 fCurrentEvent = fStreamReader.next(); 152 if(fStreamFilter.accept(fStreamReader)){ 153 fEventAccepted = true; 154 return fCurrentEvent; 155 } 156 } 157 if (fCurrentEvent == XMLEvent.END_DOCUMENT) 161 return fCurrentEvent; 162 else 163 return -1; 164 } 165 private int findNextTag() throws XMLStreamException { 166 fStreamAdvancedByHasNext = false; 167 while(fStreamReader.hasNext()){ 168 fCurrentEvent = fStreamReader.nextTag(); 169 if(fStreamFilter.accept(fStreamReader)){ 170 fEventAccepted = true; 171 return fCurrentEvent; 172 } 173 } 174 if (fCurrentEvent == XMLEvent.END_DOCUMENT) 175 return fCurrentEvent; 176 else 177 return -1; 178 } 179 183 public void close() throws XMLStreamException { 184 fStreamReader.close(); 185 } 186 187 191 public int getAttributeCount() { 192 return fStreamReader.getAttributeCount(); 193 } 194 195 200 public QName getAttributeName(int index) { 201 return fStreamReader.getAttributeName(index); 202 } 203 204 209 public String getAttributeNamespace(int index) { 210 return fStreamReader.getAttributeNamespace(index); 211 } 212 213 218 public String getAttributePrefix(int index) { 219 return fStreamReader.getAttributePrefix(index); 220 } 221 222 227 public String getAttributeType(int index) { 228 return fStreamReader.getAttributeType(index); 229 } 230 231 236 public String getAttributeValue(int index) { 237 return fStreamReader.getAttributeValue(index); 238 } 239 240 246 public String getAttributeValue(String namespaceURI, String localName) { 247 return fStreamReader.getAttributeValue(namespaceURI,localName); 248 } 249 250 254 public String getCharacterEncodingScheme() { 255 return fStreamReader.getCharacterEncodingScheme(); 256 } 257 258 263 public String getElementText() throws XMLStreamException { 264 return fStreamReader.getElementText(); 265 } 266 267 271 public String getEncoding() { 272 return fStreamReader.getEncoding(); 273 } 274 275 279 public int getEventType() { 280 return fStreamReader.getEventType(); 281 } 282 283 287 public String getLocalName() { 288 return fStreamReader.getLocalName(); 289 } 290 291 295 public javax.xml.stream.Location getLocation() { 296 return fStreamReader.getLocation(); 297 } 298 299 303 public javax.xml.namespace.QName getName() { 304 return fStreamReader.getName(); 305 } 306 307 311 public javax.xml.namespace.NamespaceContext getNamespaceContext() { 312 return fStreamReader.getNamespaceContext(); 313 } 314 315 319 public int getNamespaceCount() { 320 return fStreamReader.getNamespaceCount(); 321 } 322 323 328 public String getNamespacePrefix(int index) { 329 return fStreamReader.getNamespacePrefix(index); 330 } 331 332 336 public String getNamespaceURI() { 337 return fStreamReader.getNamespaceURI(); 338 } 339 340 345 public String getNamespaceURI(int index) { 346 return fStreamReader.getNamespaceURI(index); 347 } 348 349 354 public String getNamespaceURI(String prefix) { 355 return fStreamReader.getNamespaceURI(prefix); 356 } 357 358 362 public String getPIData() { 363 return fStreamReader.getPIData(); 364 } 365 366 370 public String getPITarget() { 371 return fStreamReader.getPITarget(); 372 } 373 374 378 public String getPrefix() { 379 return fStreamReader.getPrefix(); 380 } 381 382 388 public Object getProperty(java.lang.String name) throws java.lang.IllegalArgumentException { 389 return fStreamReader.getProperty(name); 390 } 391 392 396 public String getText() { 397 return fStreamReader.getText(); 398 } 399 400 404 public char[] getTextCharacters() { 405 return fStreamReader.getTextCharacters(); 406 } 407 408 417 public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException { 418 return fStreamReader.getTextCharacters(sourceStart, target,targetStart,length); 419 } 420 421 425 public int getTextLength() { 426 return fStreamReader.getTextLength(); 427 } 428 429 433 public int getTextStart() { 434 return fStreamReader.getTextStart(); 435 } 436 437 441 public String getVersion() { 442 return fStreamReader.getVersion(); 443 444 } 445 446 450 public boolean hasName() { 451 return fStreamReader.hasName(); 452 } 453 454 458 public boolean hasText() { 459 return fStreamReader.hasText(); 460 } 461 462 467 public boolean isAttributeSpecified(int index) { 468 return fStreamReader.isAttributeSpecified(index); 469 } 470 471 475 public boolean isCharacters() { 476 return fStreamReader.isCharacters(); 477 } 478 479 483 public boolean isEndElement() { 484 return fStreamReader.isEndElement(); 485 } 486 487 491 public boolean isStandalone() { 492 return fStreamReader.isStandalone(); 493 } 494 495 499 public boolean isStartElement() { 500 return fStreamReader.isStartElement(); 501 } 502 503 507 public boolean isWhiteSpace() { 508 return fStreamReader.isWhiteSpace(); 509 } 510 511 512 519 public void require(int type, String namespaceURI, String localName) throws XMLStreamException { 520 fStreamReader.require(type,namespaceURI,localName); 521 } 522 523 527 public boolean standaloneSet() { 528 return fStreamReader.standaloneSet(); 529 } 530 531 536 public String getAttributeLocalName(int index){ 537 return fStreamReader.getAttributeLocalName(index); 538 } 539 540 } 541 | Popular Tags |