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.dsmlv2.response;
21
22
23 import org.apache.directory.api.asn1.util.Oid;
24 import org.apache.directory.api.dsmlv2.ParserUtils;
25 import org.apache.directory.api.ldap.codec.api.LdapApiService;
26 import org.apache.directory.api.ldap.model.message.ExtendedResponse;
27 import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
28 import org.apache.directory.api.ldap.model.message.MessageTypeEnum;
29 import org.apache.directory.api.util.Strings;
30 import org.dom4j.Element;
31 import org.dom4j.Namespace;
32 import org.dom4j.QName;
33 import org.dom4j.tree.DefaultElement;
34
35
36
37
38
39
40
41 public class ExtendedResponseDsml extends AbstractResultResponseDsml<ExtendedResponse>
42 implements ExtendedResponse
43 {
44 private static final String EXTENDED_RESPONSE_TAG = "extendedResponse";
45 private byte[] response;
46
47
48
49
50
51
52
53 public ExtendedResponseDsml( LdapApiService codec )
54 {
55 super( codec, new ExtendedResponseImpl( "" ) );
56 }
57
58
59
60
61
62
63
64
65 public ExtendedResponseDsml( LdapApiService codec, ExtendedResponse ldapMessage )
66 {
67 super( codec, ldapMessage );
68 }
69
70
71
72
73
74 public MessageTypeEnum getType()
75 {
76 return getDecorated().getType();
77 }
78
79
80
81
82
83 public Element toDsml( Element root )
84 {
85 Element element = null;
86
87 if ( root != null )
88 {
89 element = root.addElement( EXTENDED_RESPONSE_TAG );
90 }
91 else
92 {
93 element = new DefaultElement( EXTENDED_RESPONSE_TAG );
94 }
95
96 ExtendedResponse extendedResponse = getDecorated();
97
98
99 LdapResultDsml ldapResultDsml = new LdapResultDsml( getCodecService(),
100 getDecorated().getLdapResult(), getDecorated() );
101 ldapResultDsml.toDsml( element );
102
103
104 String responseName = extendedResponse.getResponseName();
105 if ( responseName != null )
106 {
107 element.addElement( "responseName" ).addText( responseName );
108 }
109
110
111 Object responseValue = getResponseValue();
112
113 if ( responseValue != null )
114 {
115 if ( ParserUtils.needsBase64Encoding( responseValue ) )
116 {
117 Namespace xsdNamespace = new Namespace( ParserUtils.XSD, ParserUtils.XML_SCHEMA_URI );
118 Namespace xsiNamespace = new Namespace( ParserUtils.XSI, ParserUtils.XML_SCHEMA_INSTANCE_URI );
119 element.getDocument().getRootElement().add( xsdNamespace );
120 element.getDocument().getRootElement().add( xsiNamespace );
121
122 Element responseElement = element.addElement( "response" )
123 .addText( ParserUtils.base64Encode( responseValue ) );
124 responseElement.addAttribute( new QName( "type", xsiNamespace ), ParserUtils.XSD + ":"
125 + ParserUtils.BASE64BINARY );
126 }
127 else
128 {
129 element.addElement( "response" ).addText( Strings.utf8ToString( ( byte[] ) responseValue ) );
130 }
131 }
132
133 return element;
134 }
135
136
137
138
139
140 public void setResponseName( String oid )
141 {
142 getDecorated().setResponseName( oid );
143 }
144
145
146
147
148
149
150
151 public String getResponseName()
152 {
153 return getDecorated().getResponseName();
154 }
155
156
157
158
159
160
161
162 public void setResponseName( Oid responseName )
163 {
164 getDecorated().setResponseName( responseName.toString() );
165 }
166
167
168
169
170
171
172
173 public byte[] getResponseValue()
174 {
175 return this.response;
176 }
177
178
179
180
181
182
183
184 public void setResponseValue( byte[] responseValue )
185 {
186 this.response = responseValue;
187 }
188 }