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.extras.extended.ads_impl.whoAmI;
21
22
23 import java.io.PrintWriter;
24 import java.io.StringWriter;
25 import java.nio.ByteBuffer;
26
27 import org.apache.directory.api.asn1.DecoderException;
28 import org.apache.directory.api.asn1.ber.Asn1Decoder;
29 import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
30 import org.apache.directory.api.ldap.codec.api.ExtendedResponseDecorator;
31 import org.apache.directory.api.ldap.codec.api.LdapApiService;
32 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIRequest;
33 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIRequestImpl;
34 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIResponse;
35 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIResponseImpl;
36 import org.apache.directory.api.ldap.model.message.ExtendedRequest;
37 import org.apache.directory.api.ldap.model.message.ExtendedResponse;
38 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
39
40
41
42
43
44
45
46
47 public class WhoAmIFactory implements ExtendedOperationFactory
48 {
49 private LdapApiService codec;
50
51
52 public WhoAmIFactory( LdapApiService codec )
53 {
54 this.codec = codec;
55 }
56
57
58
59
60
61 public String getOid()
62 {
63 return WhoAmIRequest.EXTENSION_OID;
64 }
65
66
67
68
69
70 public WhoAmIResponse newResponse( byte[] encodedValue ) throws DecoderException
71 {
72 WhoAmIResponseDecorator response = new WhoAmIResponseDecorator( codec,
73 new WhoAmIResponseImpl() );
74 response.setResponseValue( encodedValue );
75 return response;
76 }
77
78
79
80
81
82 public WhoAmIRequest newRequest( byte[] value )
83 {
84 WhoAmIRequestDecorator req = new WhoAmIRequestDecorator( codec, new WhoAmIRequestImpl() );
85
86 if ( value != null )
87 {
88 req.setRequestValue( value );
89 }
90
91 return req;
92 }
93
94
95
96
97
98 public WhoAmIRequestDecorator decorate( ExtendedRequest modelRequest )
99 {
100 if ( modelRequest instanceof WhoAmIRequestDecorator )
101 {
102 return ( WhoAmIRequestDecorator ) modelRequest;
103 }
104
105 return new WhoAmIRequestDecorator( codec, ( WhoAmIRequest ) modelRequest );
106 }
107
108
109
110
111
112 public WhoAmIResponseDecorator decorate( ExtendedResponse decoratedResponse )
113 {
114 if ( decoratedResponse instanceof WhoAmIResponseDecorator )
115 {
116 return ( WhoAmIResponseDecorator ) decoratedResponse;
117 }
118
119 if ( decoratedResponse instanceof WhoAmIResponse )
120 {
121 return new WhoAmIResponseDecorator( codec, ( WhoAmIResponse ) decoratedResponse );
122 }
123
124
125 @SuppressWarnings("unchecked")
126 ExtendedResponseDecorator<ExtendedResponse> response = ( ExtendedResponseDecorator<ExtendedResponse> ) decoratedResponse;
127
128
129 Asn1Decoder decoder = new Asn1Decoder();
130
131 byte[] value = response.getResponseValue();
132 ByteBuffer buffer = ByteBuffer.wrap( value );
133
134 WhoAmIResponseContainer container = new WhoAmIResponseContainer();
135 WhoAmIResponse whoAmIResponse = null;
136
137 try
138 {
139 decoder.decode( buffer, container );
140
141 whoAmIResponse = container.getWhoAmIResponse();
142
143
144 whoAmIResponse.getLdapResult().setResultCode( response.getLdapResult().getResultCode() );
145 whoAmIResponse.getLdapResult().setDiagnosticMessage( response.getLdapResult().getDiagnosticMessage() );
146 whoAmIResponse.getLdapResult().setMatchedDn( response.getLdapResult().getMatchedDn() );
147 whoAmIResponse.getLdapResult().setReferral( response.getLdapResult().getReferral() );
148 }
149 catch ( DecoderException de )
150 {
151 StringWriter sw = new StringWriter();
152 de.printStackTrace( new PrintWriter( sw ) );
153 String stackTrace = sw.toString();
154
155
156 whoAmIResponse = new WhoAmIResponseImpl(
157 decoratedResponse.getMessageId(),
158 ResultCodeEnum.OPERATIONS_ERROR,
159 stackTrace );
160 }
161
162 WhoAmIResponseDecorator decorated = new WhoAmIResponseDecorator( codec, whoAmIResponse );
163
164 return decorated;
165 }
166 }