History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/rowset/WebRowSetImpl.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/rowset/WebRowSetImpl.java+291−0
@@ -0,0 +1,291 @@
1/*
2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.rowset;
27
28import java.sql.*;
29import javax.sql.*;
30import java.io.*;
31import java.math.*;
32import java.util.*;
33import java.text.*;
34
35import org.xml.sax.*;
36
37import javax.sql.rowset.*;
38import javax.sql.rowset.spi.*;
39
40import com.sun.rowset.providers.*;
41import com.sun.rowset.internal.*;
42
43/**
44 * The standard implementation of the <code>WebRowSet</code> interface. See the interface
45 * defintion for full behaviour and implementation requirements.
46 *
47 * @author Jonathan Bruce, Amit Handa
48 */
49public class WebRowSetImpl extends CachedRowSetImpl implements WebRowSet {
50
51 /**
52 * The <code>WebRowSetXmlReader</code> object that this
53 * <code>WebRowSet</code> object will call when the method
54 * <code>WebRowSet.readXml</code> is invoked.
55 */
56 private WebRowSetXmlReader xmlReader;
57
58 /**
59 * The <code>WebRowSetXmlWriter</code> object that this
60 * <code>WebRowSet</code> object will call when the method
61 * <code>WebRowSet.writeXml</code> is invoked.
62 */
63 private WebRowSetXmlWriter xmlWriter;
64
65 /* This stores the cursor position prior to calling the writeXML.
66 * This variable is used after the write to restore the position
67 * to the point where the writeXml was called.
68 */
69 private int curPosBfrWrite;
70
71 private SyncProvider provider;
72
73 /**
74 * Constructs a new <code>WebRowSet</code> object initialized with the
75 * default values for a <code>CachedRowSet</code> object instance. This
76 * provides the <code>RIOptimistic</code> provider to deliver
77 * synchronization capabilities to relational datastores and a default
78 * <code>WebRowSetXmlReader</code> object and a default
79 * <code>WebRowSetXmlWriter</code> object to enable XML output
80 * capabilities.
81 *
82 * @throws SQLException if an error occurs in configuring the default
83 * synchronization providers for relational and XML providers.
84 */
85 public WebRowSetImpl() throws SQLException {
86 super();
87
88 // %%%
89 // Needs to use to SPI XmlReader,XmlWriters
90 //
91 xmlReader = new WebRowSetXmlReader();
92 xmlWriter = new WebRowSetXmlWriter();
93 }
94
95 /**
96 * Constructs a new <code>WebRowSet</code> object initialized with the the
97 * synchronization SPI provider properties as specified in the <code>Hashtable</code>. If
98 * this hashtable is empty or is <code>null</code> the default constructor is invoked.
99 *
100 * @throws SQLException if an error occurs in configuring the specified
101 * synchronization providers for the relational and XML providers; or
102 * if the Hashtanle is null
103 */
104 public WebRowSetImpl(Hashtable env) throws SQLException {
105
106 try {
107 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
108 } catch(IOException ioe) {
109 throw new RuntimeException(ioe);
110 }
111
112 if ( env == null) {
113 throw new SQLException(resBundle.handleGetObject("webrowsetimpl.nullhash").toString());
114 }
115
116 String providerName =
117 (String)env.get(javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER);
118
119 // set the Reader, this maybe overridden latter
120 provider = (SyncProvider)SyncFactory.getInstance(providerName);
121
122 // xmlReader = provider.getRowSetReader();
123 // xmlWriter = provider.getRowSetWriter();
124 }
125
126 /**
127 * Populates this <code>WebRowSet</code> object with the
128 * data in the given <code>ResultSet</code> object and writes itself
129 * to the given <code>java.io.Writer</code> object in XML format.
130 * This includes the rowset's data, properties, and metadata.
131 *
132 * @throws SQLException if an error occurs writing out the rowset
133 * contents to XML
134 */
135 public void writeXml(ResultSet rs, java.io.Writer writer)
136 throws SQLException {
137 // WebRowSetImpl wrs = new WebRowSetImpl();
138 this.populate(rs);
139
140 // Store the cursor position before writing
141 curPosBfrWrite = this.getRow();
142
143 this.writeXml(writer);
144 }
145
146 /**
147 * Writes this <code>WebRowSet</code> object to the given
148 * <code>java.io.Writer</code> object in XML format. This
149 * includes the rowset's data, properties, and metadata.
150 *
151 * @throws SQLException if an error occurs writing out the rowset
152 * contents to XML
153 */
154 public void writeXml(java.io.Writer writer) throws SQLException {
155 // %%%
156 // This will change to a XmlReader, which over-rides the default
157 // Xml that is used when a WRS is instantiated.
158 // WebRowSetXmlWriter xmlWriter = getXmlWriter();
159 if (xmlWriter != null) {
160
161 // Store the cursor position before writing
162 curPosBfrWrite = this.getRow();
163
164 xmlWriter.writeXML(this, writer);
165 } else {
166 throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
167 }
168 }
169
170 /**
171 * Reads this <code>WebRowSet</code> object in its XML format.
172 *
173 * @throws SQLException if a database access error occurs
174 */
175 public void readXml(java.io.Reader reader) throws SQLException {
176 // %%%
177 // This will change to a XmlReader, which over-rides the default
178 // Xml that is used when a WRS is instantiated.
179 //WebRowSetXmlReader xmlReader = getXmlReader();
180 try {
181 if (reader != null) {
182 xmlReader.readXML(this, reader);
183
184 // Position is before the first row
185 // The cursor position is to be stored while serializng
186 // and deserializing the WebRowSet Object.
187 if(curPosBfrWrite == 0) {
188 this.beforeFirst();
189 }
190
191 // Return the position back to place prior to callin writeXml
192 else {
193 this.absolute(curPosBfrWrite);
194 }
195
196 } else {
197 throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
198 }
199 } catch (Exception e) {
200 throw new SQLException(e.getMessage());
201 }
202 }
203
204 // Stream based methods
205 /**
206 * Reads a stream based XML input to populate this <code>WebRowSet</code>
207 * object.
208 *
209 * @throws SQLException if a data source access error occurs
210 * @throws IOException if a IO exception occurs
211 */
212 public void readXml(java.io.InputStream iStream) throws SQLException, IOException {
213 if (iStream != null) {
214 xmlReader.readXML(this, iStream);
215
216 // Position is before the first row
217 // The cursor position is to be stored while serializng
218 // and deserializing the WebRowSet Object.
219 if(curPosBfrWrite == 0) {
220 this.beforeFirst();
221 }
222
223 // Return the position back to place prior to callin writeXml
224 else {
225 this.absolute(curPosBfrWrite);
226 }
227
228 } else {
229 throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
230 }
231 }
232
233 /**
234 * Writes this <code>WebRowSet</code> object to the given <code> OutputStream</code>
235 * object in XML format.
236 * Creates an an output stream of the internal state and contents of a
237 * <code>WebRowSet</code> for XML proceessing
238 *
239 * @throws SQLException if a datasource access error occurs
240 * @throws IOException if an IO exception occurs
241 */
242 public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException {
243 if (xmlWriter != null) {
244
245 // Store the cursor position before writing
246 curPosBfrWrite = this.getRow();
247
248 xmlWriter.writeXML(this, oStream);
249 } else {
250 throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
251 }
252
253 }
254
255 /**
256 * Populates this <code>WebRowSet</code> object with the
257 * data in the given <code>ResultSet</code> object and writes itself
258 * to the given <code>java.io.OutputStream</code> object in XML format.
259 * This includes the rowset's data, properties, and metadata.
260 *
261 * @throws SQLException if a datasource access error occurs
262 * @throws IOException if an IO exception occurs
263 */
264 public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException {
265 this.populate(rs);
266
267 // Store the cursor position before writing
268 curPosBfrWrite = this.getRow();
269
270 this.writeXml(oStream);
271 }
272
273 /**
274 * This method re populates the resBundle
275 * during the deserialization process
276 *
277 */
278 private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
279 // Default state initialization happens here
280 ois.defaultReadObject();
281 // Initialization of transient Res Bundle happens here .
282 try {
283 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
284 } catch(IOException ioe) {
285 throw new RuntimeException(ioe);
286 }
287
288 }
289
290 static final long serialVersionUID = -8771775154092422943L;
291}