01: package org.apache.ojb.broker.accesslayer.conversions;
02:
03: /* Copyright 2002-2005 The Apache Software Foundation
04: *
05: * Licensed under the Apache License, Version 2.0 (the "License");
06: * you may not use this file except in compliance with the License.
07: * You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: import java.io.ByteArrayInputStream;
19: import java.io.ByteArrayOutputStream;
20: import java.io.ObjectInputStream;
21: import java.io.ObjectOutputStream;
22: import java.util.zip.GZIPInputStream;
23: import java.util.zip.GZIPOutputStream;
24:
25: import org.apache.ojb.broker.util.Base64;
26:
27: /**
28: * this implementation of the FieldConversion interface converts
29: * between java.lang.Objects values and char[] values in the rdbms.
30: * This conversion is useful to store serialized objects in database
31: * columns. For an example have a look at the mapping of
32: * org.apache.ojb.odmg.collections.DlistEntry.
33: *
34: * @author Thomas Mahler, Scott C. Gray
35: * @version $Id: Object2Base64StringFieldConversion.java,v 1.8.2.1 2005/12/21 22:23:38 tomdz Exp $
36: */
37: public class Object2Base64StringFieldConversion implements
38: FieldConversion {
39: private ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
40: private Base64.OutputStream uuOut = new Base64.OutputStream(
41: byteOut, Base64.ENCODE, false);
42: private GZIPOutputStream gzipOut;
43: private ObjectOutputStream objOut;
44:
45: /*
46: ** @see FieldConversion#javaToSql(Object)
47: */
48: public Object javaToSql(Object source) {
49: synchronized (byteOut) {
50: try {
51: if (gzipOut == null) {
52: gzipOut = new GZIPOutputStream(uuOut);
53: objOut = new ObjectOutputStream(gzipOut);
54: }
55:
56: /*
57: ** Clear out the byte array
58: */
59: byteOut.reset();
60:
61: objOut.writeObject(source);
62: objOut.flush();
63: gzipOut.finish();
64: gzipOut.flush();
65:
66: return (byteOut.toString());
67: } catch (Throwable t) {
68: throw new ConversionException(t);
69: }
70: }
71: }
72:
73: /*
74: ** @see FieldConversion#sqlToJava(Object)
75: */
76: public Object sqlToJava(Object source) {
77: try {
78: ByteArrayInputStream stringIn = new ByteArrayInputStream(
79: ((String) source).getBytes());
80: Base64.InputStream uuIn = new Base64.InputStream(stringIn,
81: Base64.DECODE, false);
82: GZIPInputStream gzipIn = new GZIPInputStream(uuIn);
83: ObjectInputStream objIn = new ObjectInputStream(gzipIn);
84: Object result = objIn.readObject();
85:
86: objIn.close();
87: return result;
88: } catch (Throwable t) {
89: throw new ConversionException(t);
90: }
91: }
92:
93: }
|