1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.jsieve.util;
20
21 import org.apache.jsieve.exception.SieveException;
22 import org.apache.jsieve.parser.generated.ASTargument;
23 import org.apache.jsieve.parser.generated.ASTarguments;
24 import org.apache.jsieve.parser.generated.ASTblock;
25 import org.apache.jsieve.parser.generated.ASTcommand;
26 import org.apache.jsieve.parser.generated.ASTcommands;
27 import org.apache.jsieve.parser.generated.ASTstart;
28 import org.apache.jsieve.parser.generated.ASTstring;
29 import org.apache.jsieve.parser.generated.ASTstring_list;
30 import org.apache.jsieve.parser.generated.ASTtest;
31 import org.apache.jsieve.parser.generated.ASTtest_list;
32 import org.apache.jsieve.parser.generated.Node;
33 import org.apache.jsieve.parser.generated.SieveParserVisitor;
34 import org.apache.jsieve.parser.generated.SimpleNode;
35
36
37
38
39
40 public class NodeTraverser {
41
42
43
44
45
46
47
48
49
50 public void traverse(final NodeHandler handler, final Node root) throws SieveException {
51 final TraversalWorker worker = new TraversalWorker(handler);
52 handler.start();
53 root.jjtAccept(worker, null);
54 handler.end();
55 }
56
57
58
59
60
61
62
63
64
65 public void traverse(final SieveHandler handler, final Node root) throws SieveException {
66 traverse(new NodeToSieveAdapter(handler), root);
67 }
68
69
70
71
72
73
74
75
76
77
78
79 private static final class TraversalWorker implements SieveParserVisitor {
80
81 private final NodeHandler handler;
82
83
84
85
86
87 public TraversalWorker(final NodeHandler handler) {
88 super();
89 this.handler = handler;
90 }
91
92 public Object visit(SimpleNode node, Object data) throws SieveException {
93 handler.start(node);
94 node.childrenAccept(this, null);
95 handler.end(node);
96 return null;
97 }
98
99 public Object visit(ASTstart node, Object data) throws SieveException {
100 handler.start(node);
101 node.childrenAccept(this, null);
102 handler.end(node);
103 return null;
104 }
105
106 public Object visit(ASTcommands node, Object data) throws SieveException {
107 handler.start(node);
108 node.childrenAccept(this, null);
109 handler.end(node);
110 return null;
111 }
112
113 public Object visit(ASTcommand node, Object data) throws SieveException {
114 handler.start(node);
115 node.childrenAccept(this, null);
116 handler.end(node);
117 return null;
118 }
119
120 public Object visit(ASTblock node, Object data) throws SieveException {
121 handler.start(node);
122 node.childrenAccept(this, null);
123 handler.end(node);
124 return null;
125 }
126
127 public Object visit(ASTarguments node, Object data) throws SieveException {
128 handler.start(node);
129 node.childrenAccept(this, null);
130 handler.end(node);
131 return null;
132 }
133
134 public Object visit(ASTargument node, Object data) throws SieveException {
135 handler.start(node);
136 node.childrenAccept(this, null);
137 handler.end(node);
138 return null;
139 }
140
141 public Object visit(ASTtest node, Object data) throws SieveException {
142 handler.start(node);
143 node.childrenAccept(this, null);
144 handler.end(node);
145 return null;
146 }
147
148 public Object visit(ASTtest_list node, Object data) throws SieveException {
149 handler.start(node);
150 node.childrenAccept(this, null);
151 handler.end(node);
152 return null;
153 }
154
155 public Object visit(ASTstring node, Object data) throws SieveException {
156 handler.start(node);
157 node.childrenAccept(this, null);
158 handler.end(node);
159 return null;
160 }
161
162 public Object visit(ASTstring_list node, Object data) throws SieveException {
163 handler.start(node);
164 node.childrenAccept(this, null);
165 handler.end(node);
166 return null;
167 }
168 }
169 }