1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction;
21
22
23 import org.apache.directory.api.asn1.DecoderException;
24 import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
25 import org.apache.directory.api.asn1.ber.grammar.Grammar;
26 import org.apache.directory.api.asn1.ber.grammar.GrammarAction;
27 import org.apache.directory.api.asn1.ber.grammar.GrammarTransition;
28 import org.apache.directory.api.asn1.ber.tlv.BerValue;
29 import org.apache.directory.api.asn1.ber.tlv.BooleanDecoder;
30 import org.apache.directory.api.asn1.ber.tlv.BooleanDecoderException;
31 import org.apache.directory.api.i18n.I18n;
32 import org.apache.directory.api.util.Strings;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 import static org.apache.directory.api.asn1.ber.tlv.UniversalTag.BOOLEAN;
37 import static org.apache.directory.api.asn1.ber.tlv.UniversalTag.OCTET_STRING;
38 import static org.apache.directory.api.asn1.ber.tlv.UniversalTag.SEQUENCE;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class EndTransactionRequestGrammar extends AbstractGrammar<EndTransactionRequestContainer>
55 {
56
57
58 private static final Logger LOG = LoggerFactory.getLogger( EndTransactionRequestGrammar.class );
59
60
61 private static Grammar<EndTransactionRequestContainer> instance = new EndTransactionRequestGrammar();
62
63
64
65
66
67 @SuppressWarnings("unchecked")
68 public EndTransactionRequestGrammar()
69 {
70 setName( EndTransactionRequestGrammar.class.getName() );
71
72
73 super.transitions = new GrammarTransition[EndTransactionRequestStates.LAST_STATE
74 .ordinal()][256];
75
76
77
78
79
80
81
82
83
84 super.transitions[EndTransactionRequestStates.START_STATE.ordinal()][SEQUENCE.getValue()] =
85 new GrammarTransition<EndTransactionRequestContainer>(
86 EndTransactionRequestStates.START_STATE,
87 EndTransactionRequestStates.SEQUENCE_STATE,
88 SEQUENCE,
89 null );
90
91
92
93
94
95
96
97
98
99
100 super.transitions[EndTransactionRequestStates.SEQUENCE_STATE.ordinal()][BOOLEAN.getValue()] =
101 new GrammarTransition<EndTransactionRequestContainer>(
102 EndTransactionRequestStates.SEQUENCE_STATE,
103 EndTransactionRequestStates.COMMIT_STATE,
104 BOOLEAN,
105 new GrammarAction<EndTransactionRequestContainer>( "Set EndTransactionRequest commit flag" )
106 {
107 public void action( EndTransactionRequestContainer container ) throws DecoderException
108 {
109 BerValue value = container.getCurrentTLV().getValue();
110
111 try
112 {
113 container.getEndTransactionRequest().setCommit( BooleanDecoder.parse( value ) );
114 }
115 catch ( BooleanDecoderException bde )
116 {
117 LOG.error( I18n
118 .err( I18n.ERR_08221_BAD_END_TRANSACTION_COMMIT, Strings.dumpBytes( value.getData() ), bde.getMessage() ) );
119
120
121 throw new DecoderException( bde.getMessage(), bde );
122 }
123 }
124 } );
125
126
127
128
129
130
131
132
133
134 super.transitions[EndTransactionRequestStates.SEQUENCE_STATE.ordinal()][OCTET_STRING.getValue()] =
135 new GrammarTransition<EndTransactionRequestContainer>(
136 EndTransactionRequestStates.SEQUENCE_STATE,
137 EndTransactionRequestStates.IDENTFIER_STATE,
138 OCTET_STRING,
139 new GrammarAction<EndTransactionRequestContainer>( "Set EndTransactionRequest identifier" )
140 {
141 public void action( EndTransactionRequestContainer container )
142 {
143 BerValue value = container.getCurrentTLV().getValue();
144
145 byte[] identifier = value.getData();
146
147 if ( LOG.isDebugEnabled() )
148 {
149 LOG.debug( I18n.msg( I18n.MSG_08206_IDENTIFIER, Strings.dumpBytes( identifier ) ) );
150 }
151
152 if ( identifier == null )
153 {
154 identifier = Strings.EMPTY_BYTES;
155 }
156
157 container.getEndTransactionRequest().setTransactionId( identifier );
158
159
160 container.setGrammarEndAllowed( true );
161 }
162 } );
163
164
165
166
167
168
169
170
171
172
173 super.transitions[EndTransactionRequestStates.COMMIT_STATE.ordinal()][OCTET_STRING.getValue()] =
174 new GrammarTransition<EndTransactionRequestContainer>(
175 EndTransactionRequestStates.COMMIT_STATE,
176 EndTransactionRequestStates.IDENTFIER_STATE,
177 OCTET_STRING,
178 new GrammarAction<EndTransactionRequestContainer>( "Set EndTransactionRequest identifier" )
179 {
180 public void action( EndTransactionRequestContainer container )
181 {
182 BerValue value = container.getCurrentTLV().getValue();
183
184 byte[] identifier = value.getData();
185
186 if ( LOG.isDebugEnabled() )
187 {
188 LOG.debug( I18n.msg( I18n.MSG_08206_IDENTIFIER, Strings.dumpBytes( identifier ) ) );
189 }
190
191 if ( identifier == null )
192 {
193 identifier = Strings.EMPTY_BYTES;
194 }
195
196 container.getEndTransactionRequest().setTransactionId( identifier );
197
198
199 container.setGrammarEndAllowed( true );
200 }
201 } );
202 }
203
204
205
206
207
208
209
210 public static Grammar<EndTransactionRequestContainer> getInstance()
211 {
212 return instance;
213 }
214 }