1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.mavibot.btree;
21
22
23 import java.io.IOException;
24 import java.nio.ByteBuffer;
25
26 import org.apache.directory.mavibot.btree.serializer.AbstractElementSerializer;
27 import org.apache.directory.mavibot.btree.serializer.BufferHandler;
28 import org.apache.directory.mavibot.btree.serializer.ByteArraySerializer;
29 import org.apache.directory.mavibot.btree.serializer.IntSerializer;
30 import org.apache.directory.mavibot.btree.serializer.LongSerializer;
31 import org.apache.directory.mavibot.btree.serializer.StringSerializer;
32 import org.apache.directory.mavibot.btree.util.Strings;
33
34
35
36
37
38
39
40
41 public class RevisionNameSerializer extends AbstractElementSerializer<RevisionName>
42 {
43
44
45
46 public RevisionNameSerializer()
47 {
48 super( new RevisionNameComparator() );
49 }
50
51
52
53
54
55
56
57
58 public static RevisionName deserialize( byte[] in )
59 {
60 return deserialize( in, 0 );
61 }
62
63
64
65
66
67
68
69
70
71 public static RevisionName deserialize( byte[] in, int start )
72 {
73
74 if ( ( in == null ) || ( in.length < 12 + start ) )
75 {
76 throw new RuntimeException( "Cannot extract a RevisionName from a buffer with not enough bytes" );
77 }
78
79 long revision = LongSerializer.deserialize( in, start );
80 String name = StringSerializer.deserialize( in, 8 + start );
81
82 RevisionName revisionName = new RevisionName( revision, name );
83
84 return revisionName;
85 }
86
87
88
89
90
91
92
93
94 public RevisionName fromBytes( byte[] in )
95 {
96 return deserialize( in, 0 );
97 }
98
99
100
101
102
103
104
105
106
107 public RevisionName fromBytes( byte[] in, int start )
108 {
109
110 if ( ( in == null ) || ( in.length < 12 + start ) )
111 {
112 throw new RuntimeException( "Cannot extract a RevisionName from a buffer with not enough bytes" );
113 }
114
115 long revision = LongSerializer.deserialize( in, start );
116 String name = StringSerializer.deserialize( in, 8 + start );
117
118 RevisionName revisionName = new RevisionName( revision, name );
119
120 return revisionName;
121 }
122
123
124
125
126
127 @Override
128 public byte[] serialize( RevisionName revisionName )
129 {
130 if ( revisionName == null )
131 {
132 throw new RuntimeException( "The revisionName instance should not be null " );
133 }
134
135 byte[] result = null;
136
137 if ( revisionName.getName() != null )
138 {
139 byte[] stringBytes = Strings.getBytesUtf8( revisionName.getName() );
140 int stringLen = stringBytes.length;
141 result = new byte[8 + 4 + stringBytes.length];
142 LongSerializer.serialize( result, 0, revisionName.getRevision() );
143
144 if ( stringLen > 0 )
145 {
146 ByteArraySerializer.serialize( result, 8, stringBytes );
147 }
148 }
149 else
150 {
151 result = new byte[8 + 4];
152 LongSerializer.serialize( result, 0, revisionName.getRevision() );
153 StringSerializer.serialize( result, 8, null );
154 }
155
156 return result;
157 }
158
159
160
161
162
163
164
165
166
167
168 public static byte[] serialize( byte[] buffer, int start, RevisionName revisionName )
169 {
170 if ( revisionName.getName() != null )
171 {
172 byte[] stringBytes = Strings.getBytesUtf8( revisionName.getName() );
173 int stringLen = stringBytes.length;
174 LongSerializer.serialize( buffer, start, revisionName.getRevision() );
175 IntSerializer.serialize( buffer, 8 + start, stringLen );
176 ByteArraySerializer.serialize( buffer, 12 + start, stringBytes );
177 }
178 else
179 {
180 LongSerializer.serialize( buffer, start, revisionName.getRevision() );
181 StringSerializer.serialize( buffer, 8, null );
182 }
183
184 return buffer;
185 }
186
187
188
189
190
191 @Override
192 public RevisionName deserialize( BufferHandler bufferHandler ) throws IOException
193 {
194 byte[] revisionBytes = bufferHandler.read( 8 );
195 long revision = LongSerializer.deserialize( revisionBytes );
196
197 byte[] lengthBytes = bufferHandler.read( 4 );
198
199 int len = IntSerializer.deserialize( lengthBytes );
200
201 switch ( len )
202 {
203 case 0:
204 return new RevisionName( revision, "" );
205
206 case -1:
207 return new RevisionName( revision, null );
208
209 default:
210 byte[] nameBytes = bufferHandler.read( len );
211
212 return new RevisionName( revision, Strings.utf8ToString( nameBytes ) );
213 }
214 }
215
216
217
218
219
220 @Override
221 public RevisionName deserialize( ByteBuffer buffer ) throws IOException
222 {
223
224 long revision = buffer.getLong();
225
226
227 int len = buffer.getInt();
228
229 switch ( len )
230 {
231 case 0:
232 return new RevisionName( revision, "" );
233
234 case -1:
235 return new RevisionName( revision, null );
236
237 default:
238 byte[] nameBytes = new byte[len];
239 buffer.get( nameBytes );
240
241 return new RevisionName( revision, Strings.utf8ToString( nameBytes ) );
242 }
243 }
244 }