01: /*
02: * Copyright (c) 1998 - 2005 Versant Corporation
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * Versant Corporation - initial API and implementation
10: */
11: package com.versant.core.jdbc.sql.conv;
12:
13: import com.versant.core.jdbc.JdbcConverter;
14:
15: /**
16: * This converter converts boolean[] to and from SQL. It converts the boolean[]
17: * to and from a byte[] and delegates to a nested converter.
18: * TODO This could be done much faster with java.nio buffers.
19: * @keep-all
20: */
21: public class BooleanArrayConverter extends TypeAsBytesConverterBase {
22:
23: public static class Factory extends
24: TypeAsBytesConverterBase.Factory {
25:
26: protected JdbcConverter createConverter(JdbcConverter nested) {
27: return new BooleanArrayConverter(nested);
28: }
29:
30: }
31:
32: public BooleanArrayConverter(JdbcConverter nested) {
33: super (nested);
34: }
35:
36: /**
37: * Convert a byte[] into an instance of our value class.
38: */
39: protected Object fromByteArray(byte[] buf) {
40: int n = buf.length;
41: boolean[] a = new boolean[n];
42: for (int i = 0; i < n; i++) {
43: a[i] = buf[i] != 0;
44: }
45: return a;
46: }
47:
48: /**
49: * Convert an instance of our value class into a byte[].
50: */
51: protected byte[] toByteArray(Object value) {
52: if (value == null)
53: return null;
54: boolean[] a = (boolean[]) value;
55: int n = a.length;
56: byte[] buf = new byte[n];
57: for (int i = 0; i < n; i++) {
58: buf[i] = a[i] ? (byte) 1 : (byte) 0;
59: }
60: return buf;
61: }
62:
63: /**
64: * Get the type of our expected value objects (e.g. java.util.Locale
65: * for a converter for Locale's).
66: */
67: public Class getValueType() {
68: return boolean[].class;
69: }
70:
71: }
|