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.search.subentries;
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.asn1.ber.tlv.TLV;
32 import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
33 import org.apache.directory.api.i18n.I18n;
34 import org.apache.directory.api.util.Strings;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38
39
40
41
42
43
44
45 public final class SubentriesGrammar extends AbstractGrammar<SubentriesContainer>
46 {
47
48 static final Logger LOG = LoggerFactory.getLogger( SubentriesGrammar.class );
49
50
51 private static Grammar<SubentriesContainer> instance = new SubentriesGrammar();
52
53
54
55
56
57 @SuppressWarnings("unchecked")
58 private SubentriesGrammar()
59 {
60 setName( SubentriesGrammar.class.getName() );
61
62
63 super.transitions = new GrammarTransition[SubentriesStates.LAST_SUB_ENTRY_STATE.ordinal()][256];
64
65 super.transitions[SubentriesStates.START_STATE.ordinal()][UniversalTag.BOOLEAN.getValue()] =
66 new GrammarTransition<SubentriesContainer>( SubentriesStates.START_STATE,
67 SubentriesStates.SUB_ENTRY_VISIBILITY_STATE, UniversalTag.BOOLEAN.getValue(),
68 new GrammarAction<SubentriesContainer>( "SubEntryControl visibility" )
69 {
70 public void action( SubentriesContainer container ) throws DecoderException
71 {
72 TLV tlv = container.getCurrentTLV();
73
74
75
76
77
78
79
80 BerValue value = tlv.getValue();
81
82 try
83 {
84 container.getSubentriesControl().setVisibility( BooleanDecoder.parse( value ) );
85
86
87 container.setGrammarEndAllowed( true );
88 }
89 catch ( BooleanDecoderException bde )
90 {
91 LOG.error( I18n.err( I18n.ERR_04054, Strings.dumpBytes( value.getData() ), bde.getMessage() ) );
92
93
94 throw new DecoderException( bde.getMessage() );
95 }
96 }
97 } );
98 }
99
100
101
102
103
104
105
106 public static Grammar<SubentriesContainer> getInstance()
107 {
108 return instance;
109 }
110 }