1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.directory.api.ldap.trigger;
22
23
24 import java.io.StringReader;
25 import java.text.ParseException;
26
27 import org.apache.directory.api.i18n.I18n;
28 import org.apache.directory.api.ldap.model.schema.Normalizer;
29 import org.apache.directory.api.ldap.model.schema.NormalizerMappingResolver;
30
31 import antlr.RecognitionException;
32 import antlr.TokenStreamException;
33
34
35
36
37
38
39
40
41
42 public class TriggerSpecificationParser
43 {
44
45 private ReusableAntlrTriggerSpecificationParser parser;
46
47
48 private ReusableAntlrTriggerSpecificationLexer lexer;
49
50 private final boolean isNormalizing;
51
52
53
54
55
56 public TriggerSpecificationParser()
57 {
58 this.lexer = new ReusableAntlrTriggerSpecificationLexer( new StringReader( "" ) );
59 this.parser = new ReusableAntlrTriggerSpecificationParser( lexer );
60
61
62
63 this.parser.init();
64 this.isNormalizing = false;
65 }
66
67
68
69
70
71
72
73 public TriggerSpecificationParser( NormalizerMappingResolver<Normalizer> resolver )
74 {
75 this.lexer = new ReusableAntlrTriggerSpecificationLexer( new StringReader( "" ) );
76 this.parser = new ReusableAntlrTriggerSpecificationParser( lexer );
77
78 this.parser.setNormalizerMappingResolver( resolver );
79
80
81 this.parser.init();
82 this.isNormalizing = true;
83 }
84
85
86
87
88
89
90
91
92
93 private synchronized void reset( String spec )
94 {
95 StringReader in = new StringReader( spec );
96 this.lexer.prepareNextInput( in );
97 this.parser.resetState();
98 }
99
100
101
102
103
104
105
106
107
108
109
110 public synchronized TriggerSpecification parse( String spec ) throws ParseException
111 {
112 TriggerSpecification triggerSpecification = null;
113
114 if ( spec == null || spec.trim().equals( "" ) )
115 {
116 return null;
117 }
118
119
120 reset( spec );
121
122 try
123 {
124 triggerSpecification = this.parser.wrapperEntryPoint();
125 }
126 catch ( TokenStreamException e )
127 {
128 String msg = I18n.err( I18n.ERR_04333, spec, e.getLocalizedMessage() );
129 throw new ParseException( msg, 0 );
130 }
131 catch ( RecognitionException e )
132 {
133 String msg = I18n.err( I18n.ERR_04333, spec, e.getLocalizedMessage() );
134 throw new ParseException( msg, e.getColumn() );
135 }
136
137 return triggerSpecification;
138
139 }
140
141
142
143
144
145
146
147 public boolean isNormizing()
148 {
149 return this.isNormalizing;
150 }
151 }