KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > knowgate > dataobjs > DBSaxHandler


1 /*
2   Copyright (C) 2003 Know Gate S.L. All rights reserved.
3                       C/Oņa, 107 1š2 28050 Madrid (Spain)
4
5   Redistribution and use in source and binary forms, with or without
6   modification, are permitted provided that the following conditions
7   are met:
8
9   1. Redistributions of source code must retain the above copyright
10      notice, this list of conditions and the following disclaimer.
11
12   2. The end-user documentation included with the redistribution,
13      if any, must include the following acknowledgment:
14      "This product includes software parts from hipergate
15      (http://www.hipergate.org/)."
16      Alternately, this acknowledgment may appear in the software itself,
17      if and wherever such third-party acknowledgments normally appear.
18
19   3. The name hipergate must not be used to endorse or promote products
20      derived from this software without prior written permission.
21      Products derived from this software may not be called hipergate,
22      nor may hipergate appear in their name, without prior written
23      permission.
24
25   This library is distributed in the hope that it will be useful,
26   but WITHOUT ANY WARRANTY; without even the implied warranty of
27   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28
29   You should have received a copy of hipergate License with this code;
30   if not, visit http://www.hipergate.org or mail to info@hipergate.org
31 */

32
33 package com.knowgate.dataobjs;
34
35 import java.io.FileNotFoundException JavaDoc;
36
37 import java.util.LinkedList JavaDoc;
38 import java.util.ListIterator JavaDoc;
39 import java.io.IOException JavaDoc;
40
41 import java.sql.SQLException JavaDoc;
42
43 import java.lang.ClassNotFoundException JavaDoc;
44
45 import org.xml.sax.Attributes JavaDoc;
46 import org.xml.sax.Parser JavaDoc;
47 import org.xml.sax.SAXException JavaDoc;
48 import org.xml.sax.SAXNotRecognizedException JavaDoc;
49 import org.xml.sax.SAXNotSupportedException JavaDoc;
50 import org.xml.sax.SAXParseException JavaDoc;
51 import org.xml.sax.XMLReader JavaDoc;
52 import org.xml.sax.helpers.XMLReaderFactory JavaDoc;
53 import org.xml.sax.helpers.DefaultHandler JavaDoc;
54 import org.xml.sax.helpers.ParserAdapter JavaDoc;
55 import org.xml.sax.helpers.ParserFactory JavaDoc;
56
57 import com.knowgate.debug.DebugFile;
58 import com.knowgate.jdc.JDCConnection;
59
60 /**
61  * <p>SAX Parser Event Handler for loading XML formated data into a DBPersist object.</p>
62  * @author Sergio Montoro Ten
63  * @version 1.0
64  */

65
66 public class DBSaxHandler extends DefaultHandler JavaDoc {
67
68   /**
69    * Construct and set reference to DBPersist object that will hold the loaded data.
70    * @deprecated Use DBSaxHandler(DBPersist oPersist, JDCConnection) instead
71    */

72
73     public DBSaxHandler(DBPersist oPersist) {
74         oTarget = oPersist;
75         oTable = oPersist.getTable();
76         oColList = oTable.getColumns();
77         oColIter = oColList.listIterator();
78     }
79
80     public DBSaxHandler(DBPersist oPersist, JDCConnection oConn)
81       throws SQLException JavaDoc {
82         oTarget = oPersist;
83         oTable = oPersist.getTable(oConn);
84         oColList = oTable.getColumns();
85         oColIter = oColList.listIterator();
86     }
87
88     // Data
89

90     /** Number of elements. */
91     protected long fElements;
92     /** Number of characters. */
93     protected long fCharacters;
94
95     protected LinkedList JavaDoc oColList;
96     protected ListIterator JavaDoc oColIter;
97     protected DBColumn oColumn;
98     protected DBTable oTable;
99     protected DBPersist oTarget;
100
101     // -------------------------------------------------------------------------
102

103     // **********************
104
// ContentHandler methods
105
//
106

107     /**
108      * Start document.
109      */

110     public void startDocument() throws SAXException JavaDoc {
111
112         fElements = 0;
113         fCharacters = 0;
114     } // startDocument()
115

116     // -------------------------------------------------------------------------
117

118     /**
119      * Start element.
120      */

121
122     public void startElement(String JavaDoc uri, String JavaDoc local, String JavaDoc raw,
123                              Attributes JavaDoc attrs) throws SAXException JavaDoc {
124         fElements++;
125
126         if (null==oColumn) {
127           oColumn = oTable.getColumnByName(local);
128         }
129
130     } // startElement(String,String,StringAttributes)
131

132     // -------------------------------------------------------------------------
133

134     /**
135      * Characters.
136      */

137
138     public void characters(char ch[], int start, int length)
139         throws SAXException JavaDoc {
140
141         fCharacters += length;
142
143         if (null!=oColumn) {
144
145           if (DebugFile.trace)
146             DebugFile.writeln("DBSaxHendler.characters() parsing " + new String JavaDoc(ch,start,length) + " into " + oColumn.getName() + " as type " + oColumn.getSqlTypeName() );
147
148           try {
149             oTarget.put(oColumn.getName(), new String JavaDoc(ch,start,length), oColumn.getSqlType());
150           }
151           catch (FileNotFoundException JavaDoc fnfe) { /* never thrown */ }
152
153         oColumn = null;
154         } // fi (oColumn)
155
} // characters(char[],int,int);
156

157     // -------------------------------------------------------------------------
158

159     // ********************
160
// ErrorHandler methods
161
//
162

163     /**
164      * Warning.
165      */

166     public void warning(SAXParseException JavaDoc ex) throws SAXException JavaDoc {
167         if (DebugFile.trace) DebugFile.write(composeError("Warning", ex));
168     } // warning(SAXParseException)
169

170     /**
171      * Error.
172      */

173     public void error(SAXParseException JavaDoc ex) throws SAXException JavaDoc {
174         if (DebugFile.trace) DebugFile.write(composeError("Error", ex));
175         throw ex;
176     } // error(SAXParseException)
177

178     /**
179      * Fatal error.
180      * */

181     public void fatalError(SAXParseException JavaDoc ex) throws SAXException JavaDoc {
182       if (DebugFile.trace) DebugFile.write(composeError("Fatal Error", ex));
183       throw ex;
184     } // fatalError(SAXParseException)
185

186     // -------------------------------------------------------------------------
187

188     // *****************
189
// Protected methods
190
//
191

192     /**
193      * Compose the error message.
194      */

195     protected String JavaDoc composeError(String JavaDoc type, SAXParseException JavaDoc ex) {
196         String JavaDoc sErrDesc = "";
197         String JavaDoc systemId = null;
198         int index;
199
200         sErrDesc += "[SAX " + type + "] ";
201
202         if (ex==null)
203           sErrDesc += "!!!";
204         else
205           systemId = ex.getSystemId();
206
207         if (systemId != null) {
208             index = systemId.lastIndexOf('/');
209             if (index != -1) systemId = systemId.substring(index + 1);
210             sErrDesc += systemId;
211         }
212
213         sErrDesc += " Line:" + ex.getLineNumber();
214         sErrDesc += " Column:" + ex.getColumnNumber();
215         sErrDesc += " Cause: " + ex.getMessage();
216         sErrDesc += "\n";
217
218         return sErrDesc;
219     } // composeError(String,SAXParseException)
220

221     // -------------------------------------------------------------------------
222

223     // **************
224
// Public methods
225
//
226

227     /**
228      * Parses an XML document into a DBPersist instace
229      */

230
231     public void parse(String JavaDoc sXMLSource)
232         throws InstantiationException JavaDoc,IllegalAccessException JavaDoc,ClassNotFoundException JavaDoc,IOException JavaDoc,SAXException JavaDoc {
233
234         // local variables
235
XMLReader JavaDoc parser;
236         Parser JavaDoc sax1Parser;
237         long time, timeBefore=0, timeAfter=0, memory, memoryBefore=0, memoryAfter=0;
238
239         if (DebugFile.trace) {
240           timeBefore = System.currentTimeMillis();
241           memoryBefore = Runtime.getRuntime().freeMemory();
242         }
243
244         try {
245           if (DebugFile.trace)
246             DebugFile.writeln("XMLReaderFactory.createXMLReader(DEFAULT_PARSER_NAME)");
247
248           parser = XMLReaderFactory.createXMLReader(DEFAULT_PARSER_NAME);
249         }
250         catch (Exception JavaDoc e) {
251             sax1Parser = ParserFactory.makeParser(DEFAULT_PARSER_NAME);
252             parser = new ParserAdapter JavaDoc(sax1Parser);
253             if (DebugFile.trace)
254               DebugFile.writeln("warning: Features and properties not supported on SAX1 parsers.");
255         }
256
257       // parse file
258
parser.setContentHandler(this);
259       parser.setErrorHandler(this);
260
261       if (DebugFile.trace)
262         DebugFile.writeln("XMLReader.parse(" + sXMLSource + ")");
263
264       parser.parse(sXMLSource);
265
266       if (DebugFile.trace) {
267         memoryAfter = Runtime.getRuntime().freeMemory();
268         timeAfter = System.currentTimeMillis();
269
270         time = timeAfter - timeBefore;
271         memory = memoryBefore - memoryAfter;
272       }
273     } // parse
274

275     // -------------------------------------------------------------------------
276

277     // feature ids
278

279     protected static final String JavaDoc NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces";
280     protected static final String JavaDoc NAMESPACE_PREFIXES_FEATURE_ID = "http://xml.org/sax/features/namespace-prefixes";
281     protected static final String JavaDoc VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation";
282     protected static final String JavaDoc SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema";
283     protected static final String JavaDoc SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking";
284     protected static final String JavaDoc DYNAMIC_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/dynamic";
285
286     // default settings
287

288     protected static final String JavaDoc DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";
289     protected static final int DEFAULT_REPETITION = 1;
290     protected static final boolean DEFAULT_NAMESPACES = true;
291     protected static final boolean DEFAULT_NAMESPACE_PREFIXES = false;
292     protected static final boolean DEFAULT_VALIDATION = false;
293     protected static final boolean DEFAULT_SCHEMA_VALIDATION = false;
294     protected static final boolean DEFAULT_SCHEMA_FULL_CHECKING = false;
295     protected static final boolean DEFAULT_DYNAMIC_VALIDATION = false;
296     protected static final boolean DEFAULT_MEMORY_USAGE = false;
297     protected static final boolean DEFAULT_TAGGINESS = false;
298 }
Popular Tags