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.decorators;
21
22
23 import java.nio.BufferOverflowException;
24 import java.nio.ByteBuffer;
25
26 import org.apache.directory.api.asn1.EncoderException;
27 import org.apache.directory.api.asn1.ber.tlv.TLV;
28 import org.apache.directory.api.i18n.I18n;
29 import org.apache.directory.api.ldap.codec.api.LdapApiService;
30 import org.apache.directory.api.ldap.codec.api.LdapCodecConstants;
31 import org.apache.directory.api.ldap.model.message.AddResponse;
32
33
34
35
36
37
38
39 public class AddResponseDecorator extends ResponseDecorator<AddResponse> implements AddResponse
40 {
41
42 private int addResponseLength;
43
44
45
46
47
48
49
50 public AddResponseDecorator( LdapApiService codec, AddResponse decoratedMessage )
51 {
52 super( codec, decoratedMessage );
53 }
54
55
56
57
58
59 public AddResponse getAddResponse()
60 {
61 return ( AddResponse ) getDecorated();
62 }
63
64
65
66
67
68
69 public void setAddResponseLength( int addResponseLength )
70 {
71 this.addResponseLength = addResponseLength;
72 }
73
74
75
76
77
78 public int getAddResponseLength()
79 {
80 return addResponseLength;
81 }
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 public int computeLength()
101 {
102 AddResponse addResponse = getAddResponse();
103 setLdapResult( new LdapResultDecorator( addResponse.getLdapResult() ) );
104 int addResponseLength = ( ( LdapResultDecorator ) getLdapResult() ).computeLength();
105
106 setAddResponseLength( addResponseLength );
107
108 return 1 + TLV.getNbBytes( addResponseLength ) + addResponseLength;
109 }
110
111
112
113
114
115
116
117
118 public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
119 {
120 try
121 {
122
123 buffer.put( LdapCodecConstants.ADD_RESPONSE_TAG );
124 buffer.put( TLV.getBytes( getAddResponseLength() ) );
125
126
127 ( ( LdapResultDecorator ) getLdapResult() ).encode( buffer );
128
129 return buffer;
130 }
131 catch ( BufferOverflowException boe )
132 {
133 throw new EncoderException( I18n.err( I18n.ERR_04005 ) );
134 }
135 }
136 }