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.storedProcedure;
21
22
23 import java.nio.ByteBuffer;
24 import java.util.Iterator;
25
26 import org.apache.directory.api.asn1.DecoderException;
27 import org.apache.directory.api.asn1.ber.Asn1Decoder;
28 import org.apache.directory.api.asn1.ber.tlv.BerValue;
29 import org.apache.directory.api.asn1.util.Asn1Buffer;
30 import org.apache.directory.api.ldap.codec.api.AbstractExtendedOperationFactory;
31 import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
32 import org.apache.directory.api.ldap.codec.api.LdapApiService;
33 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureParameter;
34 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureRequest;
35 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureRequestImpl;
36 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureResponse;
37 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureResponseImpl;
38 import org.apache.directory.api.ldap.model.message.ExtendedRequest;
39
40
41
42
43
44
45
46
47 public class StoredProcedureFactory extends AbstractExtendedOperationFactory
48 {
49
50
51
52
53
54 public StoredProcedureFactory( LdapApiService codec )
55 {
56 super( codec, StoredProcedureRequest.EXTENSION_OID );
57 }
58
59
60
61
62
63 @Override
64 public StoredProcedureRequest newRequest()
65 {
66 return new StoredProcedureRequestImpl();
67 }
68
69
70
71
72
73 @Override
74 public StoredProcedureRequest newRequest( byte[] value ) throws DecoderException
75 {
76 StoredProcedureRequest storedProcedureRequest = new StoredProcedureRequestImpl();
77
78 decodeValue( storedProcedureRequest, value );
79
80 return storedProcedureRequest;
81 }
82
83
84
85
86
87 @Override
88 public StoredProcedureResponse newResponse()
89 {
90 return new StoredProcedureResponseImpl();
91 }
92
93
94
95
96
97 @Override
98 public void decodeValue( ExtendedRequest extendedRequest, byte[] requestValue ) throws DecoderException
99 {
100 ByteBuffer bb = ByteBuffer.wrap( requestValue );
101 StoredProcedureRequestContainer container = new StoredProcedureRequestContainer();
102 container.setStoredProcedureRequest( ( StoredProcedureRequest ) extendedRequest );
103 Asn1Decoder.decode( bb, container );
104 }
105
106
107 private void encodeParameters( Asn1Buffer buffer, Iterator<StoredProcedureParameter> parameters )
108 {
109 if ( parameters.hasNext() )
110 {
111 StoredProcedureParameter parameter = parameters.next();
112
113 encodeParameters( buffer, parameters );
114
115 int start = buffer.getPos();
116
117
118 BerValue.encodeOctetString( buffer, parameter.getValue() );
119
120
121 BerValue.encodeOctetString( buffer, parameter.getType() );
122
123
124 BerValue.encodeSequence( buffer, start );
125 }
126 }
127
128
129
130
131
132 @Override
133 public void encodeValue( Asn1Buffer buffer, ExtendedRequest extendedRequest )
134 {
135 int start = buffer.getPos();
136
137 StoredProcedureRequest storedProcedureRequest = ( StoredProcedureRequest ) extendedRequest;
138
139 encodeParameters( buffer, storedProcedureRequest.getParameters().iterator() );
140
141
142 BerValue.encodeSequence( buffer, start );
143
144
145 BerValue.encodeOctetString( buffer, storedProcedureRequest.getProcedure() );
146
147
148 BerValue.encodeOctetString( buffer, storedProcedureRequest.getLanguage() );
149
150
151 BerValue.encodeSequence( buffer, start );
152 }
153 }