KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > client > RecordSetUpdateable


1 package com.daffodilwoods.daffodildb.client;
2
3 import java.sql.*;
4
5 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*;
6 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata.*;
7 import com.daffodilwoods.database.resource.*;
8
9 /**
10  * <p>Title: </p>
11  * <p>Description: </p>
12  * <p>Copyright: Copyright (c) 2003</p>
13  * <p>Company: </p>
14  * @author unascribed
15  * @version 1.0
16  */

17 public class RecordSetUpdateable extends RecordSet {
18
19    _Record insertedRecord;
20    _AllColumnRowReader allColumnRowReader;
21    DataOperationListener dataOperationListener;
22    public RecordSetUpdateable() throws SQLException {
23       super();
24       isUpdateable = true;
25    }
26
27    public _Record getInsertedRecord() throws DException {
28       Object JavaDoc row = selectIterator.moveToInsertRow();
29       JDBCRecord record = new JDBCRecord(true);
30       record.setBuffer(this);
31       try {
32          record.setValues(row);
33       } catch (SQLException ex) {
34          throw new DException("DSE5032", new Object JavaDoc[] {ex.getMessage()});
35       }
36       insertedRecord = record;
37       return record;
38    }
39
40    public Object JavaDoc insertRow() throws DException {
41       if (insertedRecord == null)
42          throw new DException("DSE7053", null);
43       JDBCRecord dpRecord = (JDBCRecord) insertedRecord;
44       dpRecord.setInserted(true);
45       int[] columns = dpRecord.getUpdatedColumns();
46       Object JavaDoc[] columnValues = dpRecord.getValuesForUpdation();
47       dpRecord.flushUpdateColumnsAndValues();
48       Object JavaDoc row = selectIterator.insert(columns, columnValues);
49       insertedRecord = null;
50       updateBottomFetched();
51       /**
52        * no return required in this case. As this is specially for JDBC
53        * and the movemnet to inserted record is not required.
54        */

55       return null;
56    }
57
58    private void fireDataOperationForInsert(Object JavaDoc row) throws DException {
59       try {
60          JDBCRecord record = new JDBCRecord(isUpdateable);
61          record.setBuffer(this);
62          record.setValues(row);
63          DataOperation dataOperation = new DataOperation(this, DataOperation.INSERT, record.getIdentity(), null, null, null, null);
64          dataOperation.record = record;
65          dataOperationListener.operationPerformed(dataOperation);
66       } catch (SQLException ex) {
67          throw new DException("DSE5030", new Object JavaDoc[] {ex.getMessage()});
68       }
69    }
70
71    public void loadRecordForIdentity(_Record record, Object JavaDoc identity) throws SQLException {
72       if (identity == null)
73          throw new SQLException(new DException("DSE550", null).getMessage());
74       int index = identity.hashCode();
75       if (index < 0 && index > recordList.size())
76          throw new SQLException(new DException("DSE552", new Object JavaDoc[] {identity}).getMessage());
77       Object JavaDoc row = recordList.get(index);
78       JDBCRecord drecord = (JDBCRecord) record;
79       drecord.setBuffer(this);
80       drecord.setValues(row);
81       drecord.setKey(identity);
82    }
83
84    public Object JavaDoc locateNearestKey(Object JavaDoc key) throws SQLException {
85       if (key == null)
86          throw new DException("DSE550", null).getSqlException(null);
87       int index = ( (Integer JavaDoc) key).hashCode();
88       int size = recordList.size();
89       return index < size ? key : (size == 0 ? null : new Integer JavaDoc(size - 1));
90    }
91
92    public void updateRow(_Record record) throws DException, SQLException {
93       if (insertedRecord != null)
94          throw new DException("DSE7054", null);
95       JDBCRecord dpRecord = (JDBCRecord) record;
96       Object JavaDoc updateKey = dpRecord.getKey();
97       int index = ( (Integer JavaDoc) updateKey).hashCode();
98       int[] columns = dpRecord.getUpdatedColumns();
99       Object JavaDoc[] columnValues = dpRecord.getValuesForUpdation();
100       Object JavaDoc values = dpRecord.getValues();
101       Object JavaDoc row = selectIterator.update(allColumnRowReader.getKey(values), columns, columnValues, values);
102       recordList.set(index, row);
103       dpRecord.flushUpdateColumnsAndValues();
104       fireDataOperationListenerForUpdate(new Integer JavaDoc(index), columns, columnValues, null, row);
105    }
106
107    private void fireDataOperationListenerForUpdate(Object JavaDoc rsKey, int[] columnIndexes, Object JavaDoc[] newValues, Object JavaDoc[] oldValues, Object JavaDoc newRow) throws DException {
108       try {
109          JDBCRecord record = new JDBCRecord(isUpdateable);
110          record.setBuffer(this);
111          record.setKey(rsKey);
112          record.setValues(newRow);
113          DataOperation dataOperation = new DataOperation(this, DataOperation.UPDATE,
114              record.getIdentity(), rsKey, columnIndexes, oldValues, newValues);
115          dataOperation.record = record;
116          dataOperationListener.operationPerformed(dataOperation);
117       } catch (SQLException sq) {
118          throw new RuntimeException JavaDoc(sq.getMessage());
119       }
120    }
121
122    public Object JavaDoc deleteRow(_Record deleteRecord) throws DException {
123       JDBCRecord record = (JDBCRecord) deleteRecord;
124       Object JavaDoc values = record.getValues();
125       Object JavaDoc deleteKey = record.getKey();
126       int index = ( (Integer JavaDoc) deleteKey).hashCode();
127       int size = recordList.size();
128
129       Object JavaDoc keys = allColumnRowReader.getKey(values); //rowReader.getKey(values);
130
selectIterator.delete(keys);
131       Object JavaDoc oldRow = recordList.get(index);
132       recordList.remove(index);
133       decrementNumberOfRecodsMoved();
134       try {
135          fireDataOperationForDelete(deleteRecord);
136       } catch (SQLException ex) {
137          throw new DException("DSE5029", new Object JavaDoc[] {ex.getMessage()});
138       }
139       Object JavaDoc nearestKey = size == 1 ? null : (index == (size - 1) ? new Integer JavaDoc(index - 1) : new Integer JavaDoc(index));
140       return nearestKey;
141    }
142
143    private void fireDataOperationForDelete(_Record deletedRecord) throws SQLException, DException {
144       DataOperation dataOperation = new DataOperation(this, DataOperation.DELETE, deletedRecord.getIdentity(),
145           null, null, null, null);
146       dataOperation.record = deletedRecord;
147       dataOperationListener.operationPerformed(dataOperation);
148    }
149
150    public void addDataOperationListener(DataOperationListener listener) {
151       dataOperationListener = listener;
152    }
153
154    public void removeDataOperationListener(DataOperationListener listener) {
155       dataOperationListener = null;
156    }
157
158    public void setSelectIterator(_SelectIterator selectIterator0) throws DException {
159       super.setSelectIterator(selectIterator0);
160       allColumnRowReader = (_AllColumnRowReader) selectIterator0.getRowReader();
161    }
162 }
163
Popular Tags