1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model.transform.pull;
20
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Objects;
25 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
26 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
27
28
29
30
31
32
33
34 public abstract class NodeBufferingParser extends BufferingParser {
35
36 private final List<Event> buffer = new ArrayList<>();
37
38 private final String nodeName;
39
40 private boolean buffering;
41
42 public NodeBufferingParser(XmlPullParser xmlPullParser, String nodeName) {
43 super(xmlPullParser);
44 this.nodeName = Objects.requireNonNull(nodeName);
45 }
46
47 @Override
48 protected boolean accept() throws XmlPullParserException, IOException {
49 if (nodeName.equals(xmlPullParser.getName())) {
50 if (xmlPullParser.getEventType() == START_TAG && !buffering) {
51 buffer.add(bufferEvent());
52 buffering = true;
53 return false;
54 }
55 if (xmlPullParser.getEventType() == END_TAG && buffering) {
56 buffer.add(bufferEvent());
57 process(buffer);
58 buffering = false;
59 buffer.clear();
60 return false;
61 }
62 } else if (buffering) {
63 buffer.add(bufferEvent());
64 return false;
65 }
66 return true;
67 }
68
69 protected abstract void process(List<Event> buffer);
70 }