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.actions.searchRequest.filter;
21
22
23 import org.apache.directory.api.asn1.DecoderException;
24 import org.apache.directory.api.asn1.ber.grammar.GrammarAction;
25 import org.apache.directory.api.asn1.ber.tlv.TLV;
26 import org.apache.directory.api.ldap.codec.AttributeValueAssertion;
27 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
28 import org.apache.directory.api.ldap.codec.decorators.SearchRequestDecorator;
29 import org.apache.directory.api.ldap.codec.search.AttributeValueAssertionFilter;
30 import org.apache.directory.api.ldap.model.entry.BinaryValue;
31 import org.apache.directory.api.ldap.model.entry.StringValue;
32 import org.apache.directory.api.ldap.model.entry.Value;
33 import org.apache.directory.api.util.StringConstants;
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 public class InitAssertionValueFilter extends GrammarAction<LdapMessageContainer<SearchRequestDecorator>>
45 {
46
47 private static final Logger LOG = LoggerFactory.getLogger( InitAssertionValueFilter.class );
48
49
50 private static final boolean IS_DEBUG = LOG.isDebugEnabled();
51
52
53
54
55
56 public InitAssertionValueFilter()
57 {
58 super( "Initialize Assertion Value filter" );
59 }
60
61
62
63
64
65 public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
66 {
67 SearchRequestDecorator searchRequestDecorator = container.getMessage();
68
69 TLV tlv = container.getCurrentTLV();
70
71
72 Value<?> assertionValue = null;
73
74 if ( tlv.getLength() != 0 )
75 {
76 assertionValue = new BinaryValue( tlv.getValue().getData() );
77 }
78 else
79 {
80 assertionValue = new BinaryValue( StringConstants.EMPTY_BYTES );
81 }
82
83 AttributeValueAssertionFilter terminalFilter = ( AttributeValueAssertionFilter )
84 searchRequestDecorator.getTerminalFilter();
85 AttributeValueAssertion assertion = terminalFilter.getAssertion();
86
87 if ( container.isBinary( assertion.getAttributeDesc() ) )
88 {
89 if ( tlv.getLength() != 0 )
90 {
91 assertionValue = new BinaryValue( tlv.getValue().getData() );
92 }
93 else
94 {
95 assertionValue = new BinaryValue( StringConstants.EMPTY_BYTES );
96 }
97
98 assertion.setAssertionValue( assertionValue );
99 }
100 else
101 {
102 if ( tlv.getLength() != 0 )
103 {
104 assertionValue = new StringValue( Strings.utf8ToString( tlv.getValue().getData() ) );
105 }
106 else
107 {
108 assertionValue = new StringValue( "" );
109 }
110
111 assertion.setAssertionValue( assertionValue );
112 }
113
114
115
116 searchRequestDecorator.unstackFilters( container );
117
118 if ( IS_DEBUG )
119 {
120 LOG.debug( "Initialize Assertion Value filter" );
121 }
122 }
123 }