Project

General

Profile

1
/**
2
 *        Name: DBWriter.java
3
 *     Purpose: A Class that reads in an XML text document and
4
 *              write its contents to a database connection
5
 * Institution: National Center for Ecological Analysis and Synthesis
6
 *   Copyright: 1998 
7
 *     Authors: Matt Jones
8
 *     
9
 *     Version: '$Id: DBWriter.java 8 1999-09-13 07:23:05Z jones $'
10
 */
11

    
12
//package edu.ucsb.nceas.dbwriter;
13

    
14
import java.io.File;
15
import java.io.FileInputStream;
16
import java.io.IOException;
17
import java.io.InputStream;
18
import java.net.URL;
19
import java.util.Properties;
20
import java.sql.*;
21

    
22
import org.xml.sax.ErrorHandler;
23
import org.xml.sax.InputSource;
24
import org.xml.sax.SAXException;
25
import org.xml.sax.SAXParseException;
26

    
27
import org.w3c.dom.Element;
28
import org.w3c.dom.Node;
29
import org.w3c.dom.NodeList;
30

    
31
import com.sun.xml.tree.XmlDocument;
32
import com.sun.xml.tree.XmlDocumentBuilder;
33
import com.sun.xml.tree.SimpleElementFactory;
34
import com.sun.xml.parser.Resolver;
35
import com.sun.xml.parser.ValidatingParser;
36

    
37

    
38
public class DBWriter
39
{
40
    private XmlDocument			doc;
41
    private Connection			conn = null;
42

    
43
    // Constructer to init the class
44
    public DBWriter(String argv[]) 
45
	throws SAXException, SQLException, IOException, ClassNotFoundException {
46

    
47
        // Open a connection to the database
48
        conn = openDBConnection(
49
		"oracle.jdbc.driver.OracleDriver",
50
		"jdbc:oracle:thin:@penelope.nceas.ucsb.edu:1526:DEV",
51
		"jones", "kinkaj0u");
52

    
53
	// THIS IS TEMPORARY 
54
        // Prepare a statement to cleanup the emp table
55
/*
56
        Statement stmt = conn.createStatement ();
57
        try {
58
            	stmt.execute ("delete from xml_elements where nodeid = 1500");
59
        } catch (SQLException e) {
60
        	// Ignore an error here
61
        }
62
*/       
63
	// THIS IS TEMPORARY 
64
        // Prepare to insert new names in the Elements table
65
/*
66
        PreparedStatement pstmt = conn.prepareStatement(
67
	        "insert into xml_elements (nodeid, nodename) values (?, ?)");
68
        
69
        // Add an element as element number 1500
70
        pstmt.setInt (1, 1500);	// The first ? is for NODEID
71
        pstmt.setString (2, "eml-variable");// The second ? is for NODENAME
72
        // Do the insertion
73
        pstmt.execute ();
74
*/
75

    
76
	//
77
	// Load the document, using the appropriate custom
78
	// DOM elements.
79
	//
80
	XmlDocument	doc = createDocument (
81
		Resolver.createInputSource (new File (argv [1])),
82
		new FileInputStream (argv [0]),
83
		new ErrorPrinter ()
84
	);
85

    
86
	DBElement		root;
87

    
88
    	root = (DBElement)doc.getDocumentElement();
89
	root.normalize();
90
        root.writeXmlToDB(conn);
91
    }
92

    
93
    //
94
    // usage:  main someprops.props someplay.xml 
95
    //
96
    public static void main (String argv [])
97
    {
98
	try {
99
	    if (argv.length != 2) {
100
		System.err.println ("usage: java project.DBWriter "
101
		    + "someprops.props someplay.xml");
102
		System.exit (1);
103
	    }
104

    
105
            new DBWriter(argv);
106

    
107
	} catch (Throwable t) {
108
            t.printStackTrace (System.out);
109
	}
110
    }
111

    
112
    static private XmlDocument createDocument (
113
	InputSource	input,
114
	InputStream	propsStream,
115
	ErrorHandler	errorHandler
116
    ) throws SAXException, IOException
117
    {
118
	try {
119
	    XmlDocumentBuilder		builder = new XmlDocumentBuilder ();
120
	    ValidatingParser		parser = new ValidatingParser ();
121

    
122
	    //
123
	    // Configure the builder to create the right elements.
124
	    //
125
	    {
126
		Properties		props;
127
		SimpleElementFactory	factory;
128

    
129
		props = new Properties ();
130
		props.load (propsStream);
131
		factory = new SimpleElementFactory ();
132
		factory.addMapping (props, DBWriter.class.getClassLoader ());
133
		builder.setElementFactory (factory);
134
	    }
135

    
136
	    //
137
	    // Configure the parser
138
	    //
139
	    parser.setErrorHandler (errorHandler);
140
	    parser.setEntityResolver (new Resolver ());
141
	    parser.setDocumentHandler (builder);
142
	    parser.parse (input);
143

    
144
	    // Look at how the different versions print themselvs...
145
	    if (false) {
146
		builder.getDocument ().write (System.out);
147
		System.exit (0);
148
	    }
149

    
150
	    return builder.getDocument ();
151
	    
152
	} catch (SAXParseException e) {
153
	    // already reported
154
	    throw e;
155

    
156
	} catch (SAXException e) {
157
	    e.printStackTrace (System.out);
158
	    throw e;
159

    
160
	} catch (IOException e) {
161
	    e.printStackTrace (System.out);
162
	    throw e;
163
	}
164
    }
165
    
166
    private Connection openDBConnection(String dbDriver, String connection, 
167
		String user, String password) 
168
		throws SQLException, ClassNotFoundException {
169
      // Load the Oracle JDBC driver
170
      Class.forName ("oracle.jdbc.driver.OracleDriver");
171

    
172
      // Connect to the database
173
      // You can put a database name after the @ sign in the connection URL.
174
      Connection conn = DriverManager.getConnection(
175
	"jdbc:oracle:thin:@penelope.nceas.ucsb.edu:1526:DEV", 
176
	"jones", "kinkaj0u");
177
      return conn;
178
    }
179

    
180
    static class ErrorPrinter implements ErrorHandler
181
    {
182
	private void message (String level, SAXParseException e)
183
	{
184
	    System.out.print ("** ");
185
	    System.out.println (level);
186
	    System.out.print ("   URI = ");
187
	    System.out.print (e.getSystemId ());
188
	    System.out.print (" Line = ");
189
	    System.out.println (e.getLineNumber ());
190
	    System.out.print ("   Message = ");
191
	    System.out.println (e.getMessage ());
192

    
193
	    /*
194
	    if (e.getException () != null)
195
		e.getException ().printStackTrace (System.out);
196
	    else
197
		e.printStackTrace (System.out);
198
	    */
199
	}
200

    
201
	public void error (SAXParseException e)
202
	{
203
	    // normally a validity error
204
	    message ("Error (recoverable)", e);
205
	}
206

    
207
	public void warning (SAXParseException e)
208
	{
209
	    message ("Warning", e);
210
	}
211

    
212
	public void fatalError (SAXParseException e)
213
	{
214
	    message ("FATAL ERROR", e);
215
	}
216
    }
217

    
218
}
219

    
(3-3/5)