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
53
54
55
56
57 public WhoAmIFactory( LdapApiService codec )
58 {
59 this.codec = codec;
60 }
61
62
63
64
65
66 @Override
67 public String getOid()
68 {
69 return WhoAmIRequest.EXTENSION_OID;
70 }
71
72
73
74
75
76 @Override
77 public WhoAmIResponse newResponse( byte[] encodedValue ) throws DecoderException
78 {
79 WhoAmIResponseDecorator response = new WhoAmIResponseDecorator( codec,
80 new WhoAmIResponseImpl() );
81 response.setResponseValue( encodedValue );
82 return response;
83 }
84
85
86
87
88
89 @Override
90 public WhoAmIRequest newRequest( byte[] value )
91 {
92 WhoAmIRequestDecorator req = new WhoAmIRequestDecorator( codec, new WhoAmIRequestImpl() );
93
94 if ( value != null )
95 {
96 req.setRequestValue( value );
97 }
98
99 return req;
100 }
101
102
103
104
105
106 @Override
107 public WhoAmIRequestDecorator decorate( ExtendedRequest modelRequest )
108 {
109 if ( modelRequest instanceof WhoAmIRequestDecorator )
110 {
111 return ( WhoAmIRequestDecorator ) modelRequest;
112 }
113
114 return new WhoAmIRequestDecorator( codec, ( WhoAmIRequest ) modelRequest );
115 }
116
117
118
119
120
121 @Override
122 public WhoAmIResponseDecorator decorate( ExtendedResponse decoratedResponse )
123 {
124 if ( decoratedResponse instanceof WhoAmIResponseDecorator )
125 {
126 return ( WhoAmIResponseDecorator ) decoratedResponse;
127 }
128
129 if ( decoratedResponse instanceof WhoAmIResponse )
130 {
131 return new WhoAmIResponseDecorator( codec, ( WhoAmIResponse ) decoratedResponse );
132 }
133
134
135 @SuppressWarnings("unchecked")
136 ExtendedResponseDecorator<ExtendedResponse> response = ( ExtendedResponseDecorator<ExtendedResponse> ) decoratedResponse;
137
138
139 Asn1Decoder decoder = new Asn1Decoder();
140
141 byte[] value = response.getResponseValue();
142 ByteBuffer buffer = ByteBuffer.wrap( value );
143
144 WhoAmIResponseContainer container = new WhoAmIResponseContainer();
145 WhoAmIResponse whoAmIResponse = null;
146
147 try
148 {
149 decoder.decode( buffer, container );
150
151 whoAmIResponse = container.getWhoAmIResponse();
152
153
154 whoAmIResponse.getLdapResult().setResultCode( response.getLdapResult().getResultCode() );
155 whoAmIResponse.getLdapResult().setDiagnosticMessage( response.getLdapResult().getDiagnosticMessage() );
156 whoAmIResponse.getLdapResult().setMatchedDn( response.getLdapResult().getMatchedDn() );
157 whoAmIResponse.getLdapResult().setReferral( response.getLdapResult().getReferral() );
158 }
159 catch ( DecoderException de )
160 {
161 StringWriter sw = new StringWriter();
162 de.printStackTrace( new PrintWriter( sw ) );
163 String stackTrace = sw.toString();
164
165
166 whoAmIResponse = new WhoAmIResponseImpl(
167 decoratedResponse.getMessageId(),
168 ResultCodeEnum.OPERATIONS_ERROR,
169 stackTrace );
170 }
171
172 return new WhoAmIResponseDecorator( codec, whoAmIResponse );
173 }
174 }