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.codec.controls.sort;
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.UniversalTag;
30 import org.apache.directory.api.util.Strings;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public final class SortResponseGrammar extends AbstractGrammar<SortResponseContainer>
67 {
68
69 static final Logger LOG = LoggerFactory.getLogger( SortRequestGrammar.class );
70
71
72 static final boolean IS_DEBUG = LOG.isDebugEnabled();
73
74
75 private static Grammar<SortResponseContainer> instance = new SortResponseGrammar();
76
77
78 @SuppressWarnings("unchecked")
79 private SortResponseGrammar()
80 {
81 setName( SortResponseGrammar.class.getName() );
82
83
84 super.transitions = new GrammarTransition[SortResponseStates.END_STATE.ordinal()][256];
85
86 super.transitions[SortResponseStates.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
87 new GrammarTransition<SortResponseContainer>( SortResponseStates.START_STATE,
88 SortResponseStates.SEQUENCE_STATE,
89 UniversalTag.SEQUENCE.getValue(), null );
90
91 super.transitions[SortResponseStates.SEQUENCE_STATE.ordinal()][UniversalTag.ENUMERATED.getValue()] =
92 new GrammarTransition<SortResponseContainer>( SortResponseStates.SEQUENCE_STATE,
93 SortResponseStates.RESULT_CODE_STATE,
94 UniversalTag.ENUMERATED.getValue(), new StoreSortResponseResultCode<SortResponseContainer>() );
95
96 super.transitions[SortResponseStates.RESULT_CODE_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] =
97 new GrammarTransition<SortResponseContainer>( SortResponseStates.RESULT_CODE_STATE,
98 SortResponseStates.AT_DESC_STATE,
99 UniversalTag.OCTET_STRING.getValue(), new GrammarAction<SortResponseContainer>()
100 {
101
102 @Override
103 public void action( SortResponseContainer container ) throws DecoderException
104 {
105 BerValue value = container.getCurrentTLV().getValue();
106
107 String atType = Strings.utf8ToString( value.getData() );
108 if ( IS_DEBUG )
109 {
110 LOG.debug( "AttributeType = " + atType );
111 }
112
113 container.getControl().setAttributeName( atType );
114 container.setGrammarEndAllowed( true );
115 }
116 } );
117
118 }
119
120
121
122
123
124
125
126 public static Grammar<?> getInstance()
127 {
128 return instance;
129 }
130 }