1 package org.codehaus.xfire.util.stax;
2
3 import javax.xml.stream.XMLStreamException;
4 import javax.xml.stream.XMLStreamReader;
5
6
7 public class FragmentStreamReader
8 extends DepthXMLStreamReader
9 {
10 private boolean startDoc = false;
11 private boolean startElement = false;
12 private boolean middle = true;
13 private boolean endDoc = false;
14
15 private int depth;
16 private int current = -1;
17
18 public FragmentStreamReader(XMLStreamReader reader)
19 {
20 super(reader);
21 }
22
23 public int getEventType()
24 {
25 return current;
26 }
27
28 public boolean hasNext()
29 throws XMLStreamException
30 {
31 if (!startDoc)
32 {
33 return true;
34 }
35
36 if (endDoc)
37 {
38 return false;
39 }
40
41 return reader.hasNext();
42 }
43
44 public int next()
45 throws XMLStreamException
46 {
47 if (!startDoc)
48 {
49 startDoc = true;
50 current = START_DOCUMENT;
51 }
52 else if (!startElement)
53 {
54 depth = getDepth();
55 startElement = true;
56 current = START_ELEMENT;
57 }
58 else if (middle)
59 {
60 current = super.next();
61
62 if (current == END_ELEMENT && depth < getDepth())
63 {
64 middle = false;
65 }
66 }
67 else if (!endDoc)
68 {
69 endDoc = true;
70 current = END_DOCUMENT;
71 }
72 else
73 {
74 throw new XMLStreamException("Already at the end of the document.");
75 }
76
77 return current;
78 }
79 }