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 this.parser.init();
62
63 this.isNormalizing = false;
64 }
65
66
67
68
69
70
71
72 public TriggerSpecificationParser( NormalizerMappingResolver<Normalizer> resolver )
73 {
74 this.lexer = new ReusableAntlrTriggerSpecificationLexer( new StringReader( "" ) );
75 this.parser = new ReusableAntlrTriggerSpecificationParser( lexer );
76
77 this.parser.setNormalizerMappingResolver( resolver );
78 this.parser.init();
79
80 this.isNormalizing = true;
81 }
82
83
84
85
86
87
88
89
90
91 private synchronized void reset( String spec )
92 {
93 StringReader in = new StringReader( spec );
94 this.lexer.prepareNextInput( in );
95 this.parser.resetState();
96 }
97
98
99
100
101
102
103
104
105
106
107
108 public synchronized TriggerSpecification parse( String spec ) throws ParseException
109 {
110 TriggerSpecification triggerSpecification = null;
111
112 if ( spec == null || spec.trim().equals( "" ) )
113 {
114 return null;
115 }
116
117 reset( spec );
118
119 try
120 {
121 triggerSpecification = this.parser.wrapperEntryPoint();
122 }
123 catch ( TokenStreamException e )
124 {
125 String msg = I18n.err( I18n.ERR_04333, spec, e.getLocalizedMessage() );
126 throw new ParseException( msg, 0 );
127 }
128 catch ( RecognitionException e )
129 {
130 String msg = I18n.err( I18n.ERR_04333, spec, e.getLocalizedMessage() );
131 throw new ParseException( msg, e.getColumn() );
132 }
133
134 return triggerSpecification;
135
136 }
137
138
139
140
141
142
143
144 public boolean isNormizing()
145 {
146 return this.isNormalizing;
147 }
148 }