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.factory;
21
22 import org.apache.directory.api.asn1.ber.tlv.BerValue;
23 import org.apache.directory.api.asn1.util.Asn1Buffer;
24 import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
25 import org.apache.directory.api.ldap.codec.api.LdapApiService;
26 import org.apache.directory.api.ldap.codec.api.LdapCodecConstants;
27 import org.apache.directory.api.ldap.model.message.ExtendedRequest;
28 import org.apache.directory.api.ldap.model.message.Message;
29 import org.apache.directory.api.util.Strings;
30
31
32
33
34
35
36 public final class ExtendedRequestFactory implements Messagefactory
37 {
38
39 public static final ExtendedRequestFactory INSTANCE = new ExtendedRequestFactory();
40
41 private ExtendedRequestFactory()
42 {
43 super();
44 }
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 @Override
63 public void encodeReverse( LdapApiService codec, Asn1Buffer buffer, Message message )
64 {
65 int start = buffer.getPos();
66 ExtendedRequest extendedRequest = ( ExtendedRequest ) message;
67
68
69 ExtendedOperationFactory factory = codec.getExtendedRequestFactories().
70 get( extendedRequest.getRequestName() );
71
72 if ( factory != null )
73 {
74 factory.encodeValue( buffer, extendedRequest );
75
76 if ( buffer.getPos() > start )
77 {
78 BerValue.encodeSequence( buffer,
79 ( byte ) LdapCodecConstants.EXTENDED_REQUEST_VALUE_TAG,
80 start );
81 }
82 }
83
84
85 if ( !Strings.isEmpty( extendedRequest.getRequestName() ) )
86 {
87 BerValue.encodeOctetString( buffer,
88 ( byte ) LdapCodecConstants.EXTENDED_REQUEST_NAME_TAG,
89 extendedRequest.getRequestName() );
90 }
91
92
93 BerValue.encodeSequence( buffer, LdapCodecConstants.EXTENDED_REQUEST_TAG, start );
94 }
95 }