KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > rmi > server > SelectedRows


1 package com.daffodilwoods.rmi.server;
2
3 import java.io.*;
4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Datatype;
5 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.
6
    DBlobUpdatable;
7 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.
8
    DClobUpdatable;
9 import com.daffodilwoods.rmi.RmiBlob;
10 import com.daffodilwoods.rmi.interfaces._RmiBlob;
11 import com.daffodilwoods.rmi.RmiClob;
12 import com.daffodilwoods.rmi.interfaces._RmiClob;
13 import com.daffodilwoods.daffodildb.utils.field.FieldBase;
14 import com.daffodilwoods.daffodildb.utils.BufferRange;
15 import java.math.BigDecimal JavaDoc;
16 import com.daffodilwoods.daffodildb.utils.field.*;
17 import java.text.*;
18 import com.daffodilwoods.rmi.writers.*;
19 import com.daffodilwoods.rmi.readers.*;
20
21 public class SelectedRows
22     implements Externalizable {
23
24   private Object JavaDoc[] rows;
25   private int rowCount = -1;
26   private int columnCount;
27   private int[] dataTypes;
28
29   public SelectedRows() {
30   }
31
32   void setDataTypes(int[] dataTypes) {
33     this.dataTypes = dataTypes;
34   }
35
36   public void setRows(Object JavaDoc[] rows0) {
37     rows = rows0;
38     if (rows != null) {
39       rowCount = rows.length;
40       if (rowCount > 0)
41         columnCount = ( (Object JavaDoc[]) rows[0]).length;
42     }
43   }
44
45   public Object JavaDoc[] getRows() {
46     return rows;
47   }
48
49   public void writeExternal(ObjectOutput ou) {
50     try {
51       ou.writeInt(rowCount);
52       ou.writeInt(columnCount);
53       ou.writeInt(dataTypes.length);
54       for (int i = 0; i < dataTypes.length; i++) {
55         ou.writeByte(dataTypes[i]);
56       }
57       if (rowCount != -1) {
58         _ObjectWriter[] objectWrites = getObjectWriters();
59         for (int i = 0; i < rowCount; i++) {
60           Object JavaDoc[] row = (Object JavaDoc[]) rows[i];
61           for (int j = 0; j < columnCount; j++) {
62             boolean obj_null = ( (FieldBase) row[j]).getNull();
63             ou.writeBoolean(obj_null);
64             if (obj_null == false)
65               objectWrites[j].write(row[j], ou);
66           }
67         }
68       }
69     }
70     catch (IOException ex) {
71     }
72   }
73
74   private _ObjectWriter[] getObjectWriters() {
75     _ObjectWriter[] objectWrites = new _ObjectWriter[columnCount];
76     for (int j = 0; j < columnCount; j++) {
77       switch (dataTypes[j]) {
78         case Datatype.BYTE:
79         case Datatype.TINYINT:
80         case Datatype.SMALLINT:
81         case Datatype.SHORT:
82         case Datatype.INT:
83         case Datatype.INTEGER:
84         case Datatype.LONG:
85         case Datatype.BIGINT:
86         case Datatype.REAL:
87         case Datatype.FLOAT:
88         case Datatype.DOUBLE:
89         case Datatype.DOUBLEPRECISION:
90         case Datatype.BOOLEAN:
91         case Datatype.DATE:
92         case Datatype.TIME:
93         case Datatype.TIMESTAMP:
94           objectWrites[j] = NumberWriter.objectWriter;
95           break;
96        case Datatype.BIT:
97        case Datatype.BITVARYING:
98         case Datatype.CHAR:
99         case Datatype.CHARACTER:
100         case Datatype.CHARACTERVARYING:
101         case Datatype.CHARVARYING:
102         case Datatype.VARCHAR:
103           objectWrites[j] = CharacterWriter.objectWriter;
104           break;
105         case Datatype.BINARY:
106         case Datatype.VARBINARY:
107           objectWrites[j] = BinaryWriter.objectWriter;
108           break;
109         case Datatype.BIGDECIMAL:
110         case Datatype.DEC:
111         case Datatype.DECIMAL:
112         case Datatype.NUMERIC:
113           objectWrites[j] = BigDecimalWriter.objectWriter;
114           break;
115         case Datatype.BLOB:
116         case Datatype.BINARYLARGEOBJECT:
117         case Datatype.LONGVARBINARY:
118           objectWrites[j] = BlobWriter.objectWriter;
119           break;
120         case Datatype.CLOB:
121         case Datatype.CHARACTERLARGEOBJECT:
122         case Datatype.CHARLARGEOBJECT:
123         case Datatype.LONGVARCHAR:
124           objectWrites[j] = ClobWriter.objectWriter;
125           break;
126         default:
127           throw new RuntimeException JavaDoc(
128               " Handle the case of externalizable for the data type " +
129               dataTypes[j]);
130       }
131     }
132     return objectWrites;
133   }
134
135   public void readExternal(ObjectInput in) {
136     try {
137       rowCount = in.readInt();
138       columnCount = in.readInt();
139       dataTypes = new int[in.readInt()];
140       for (int i = 0; i < dataTypes.length; i++) {
141         dataTypes[i] = (int) in.readByte();
142       }
143
144       if (rowCount != -1) {
145         rows = new Object JavaDoc[rowCount];
146         _ObjectReader[] objectReaders = getObjectReaders();
147         for (int i = 0; i < rowCount; i++) {
148           Object JavaDoc[] row = new Object JavaDoc[columnCount];
149           for (int j = 0; j < columnCount; j++) {
150             if (!in.readBoolean())
151               row[j] = objectReaders[j].read(in);
152           }
153           rows[i] = row;
154         }
155       }
156     }
157     catch (IOException ex) {
158     }
159     catch (ClassNotFoundException JavaDoc ex1) {
160     }
161   }
162
163   private _ObjectReader[] getObjectReaders(){
164     _ObjectReader[] objectReaders= new _ObjectReader[columnCount];
165     for (int i = 0; i < columnCount; i++) {
166       switch (dataTypes[i]) {
167         case Datatype.BYTE:
168         case Datatype.TINYINT:
169           objectReaders[i] = ByteReader.objectReader;
170           break;
171         case Datatype.SMALLINT:
172         case Datatype.SHORT:
173           objectReaders[i] = ShortReader.objectReader;
174           break;
175         case Datatype.INT:
176         case Datatype.INTEGER:
177           objectReaders[i] = IntReader.objectReader;
178           break;
179         case Datatype.LONG:
180         case Datatype.BIGINT:
181           objectReaders[i] = LongReader.objectReader;
182           break;
183         case Datatype.REAL:
184           objectReaders[i] = FloatReader.objectReader;
185           break;
186         case Datatype.FLOAT:
187         case Datatype.DOUBLE:
188         case Datatype.DOUBLEPRECISION:
189           objectReaders[i] = DoubleReader.objectReader;
190           break;
191         case Datatype.BOOLEAN:
192           objectReaders[i] = BooleanReader.objectReader;
193           break;
194         case Datatype.DATE:
195           objectReaders[i] = DateReader.objectReader;
196           break;
197         case Datatype.TIME:
198           objectReaders[i] = TimeReader.objectReader;
199           break;
200         case Datatype.TIMESTAMP:
201           objectReaders[i] = TimestampReader.objectReader;
202           break;
203
204        case Datatype.BIT:
205        case Datatype.BITVARYING:
206         case Datatype.CHAR:
207         case Datatype.CHARACTER:
208         case Datatype.CHARACTERVARYING:
209         case Datatype.CHARVARYING:
210         case Datatype.VARCHAR:
211           objectReaders[i] = CharacterReader.objectReader;
212           break;
213         case Datatype.BIGDECIMAL:
214         case Datatype.DEC:
215         case Datatype.DECIMAL:
216         case Datatype.NUMERIC:
217           objectReaders[i] = BigDecimalReader.objectReader;
218           break;
219         case Datatype.BINARY:
220         case Datatype.VARBINARY:
221           objectReaders[i] = BinaryReader.objectReader;
222           break;
223         case Datatype.BLOB:
224         case Datatype.BINARYLARGEOBJECT:
225         case Datatype.LONGVARBINARY:
226           objectReaders[i] = BlobReader.objectReader;
227           break;
228         case Datatype.CLOB:
229         case Datatype.CHARACTERLARGEOBJECT:
230         case Datatype.CHARLARGEOBJECT:
231         case Datatype.LONGVARCHAR:
232           objectReaders[i] = ClobReader.objectReader;
233           break;
234         default:
235           throw new RuntimeException JavaDoc(
236               "Handle the read of the data Type in SelectedRows class " +
237               dataTypes[i]);
238       }
239     }
240     return objectReaders;
241   }
242 }
243
Popular Tags