KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snipsnap > util > JDBCDatabaseExport


1 /*
2  * This file is part of "SnipSnap Wiki/Weblog".
3  *
4  * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel
5  * All Rights Reserved.
6  *
7  * Please visit http://snipsnap.org/ for updates and contact.
8  *
9  * --LICENSE NOTICE--
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  * --LICENSE NOTICE--
24  */

25 package org.snipsnap.util;
26
27 import org.dom4j.DocumentHelper;
28 import org.dom4j.Element;
29 import org.dom4j.io.OutputFormat;
30 import org.dom4j.io.XMLWriter;
31 import org.snipsnap.config.Configuration;
32 import org.snipsnap.snip.storage.Serializer;
33 import org.snipsnap.snip.storage.SnipDataSerializer;
34
35 import java.io.File JavaDoc;
36 import java.io.FileInputStream JavaDoc;
37 import java.io.IOException JavaDoc;
38 import java.io.OutputStream JavaDoc;
39 import java.sql.Connection JavaDoc;
40 import java.sql.DriverManager JavaDoc;
41 import java.sql.PreparedStatement JavaDoc;
42 import java.sql.ResultSet JavaDoc;
43 import java.sql.ResultSetMetaData JavaDoc;
44 import java.sql.SQLException JavaDoc;
45 import java.sql.Timestamp JavaDoc;
46 import java.util.HashMap JavaDoc;
47 import java.util.Iterator JavaDoc;
48 import java.util.Map JavaDoc;
49 import java.util.Properties JavaDoc;
50
51 public class JDBCDatabaseExport {
52   private final static Map JavaDoc DBSER = new HashMap JavaDoc();
53
54   static {
55     DBSER.put("name", SnipDataSerializer.SNIP_NAME);
56     DBSER.put("applicationOid",SnipDataSerializer.SNIP_APPLICATION);
57     DBSER.put("content", SnipDataSerializer.SNIP_CONTENT);
58     DBSER.put("cTime", SnipDataSerializer.SNIP_CTIME);
59     DBSER.put("mTime", SnipDataSerializer.SNIP_MTIME);
60     DBSER.put("cUser", SnipDataSerializer.SNIP_CUSER);
61     DBSER.put("mUser", SnipDataSerializer.SNIP_MUSER);
62     DBSER.put("oUser", SnipDataSerializer.SNIP_OUSER);
63     DBSER.put("backLinks", SnipDataSerializer.SNIP_BACKLINKS);
64     DBSER.put("snipLinks", SnipDataSerializer.SNIP_SNIPLINKS);
65     DBSER.put("labels", SnipDataSerializer.SNIP_LABELS);
66     DBSER.put("attachments", SnipDataSerializer.SNIP_ATTACHMENTS);
67     DBSER.put("viewCount", SnipDataSerializer.SNIP_VIEWCOUNT);
68     DBSER.put("permissions", SnipDataSerializer.SNIP_PERMISSIONS);
69     DBSER.put("version", SnipDataSerializer.SNIP_VERSION);
70
71     DBSER.put("parentSnip", SnipDataSerializer.SNIP_PARENT);
72     DBSER.put("commentSnip", SnipDataSerializer.SNIP_COMMENTED);
73   }
74   public static void main(String JavaDoc[] args) {
75     Properties JavaDoc configData = new Properties JavaDoc();
76     try {
77       configData.load(new FileInputStream JavaDoc(args[0]));
78     } catch (IOException JavaDoc e) {
79       System.err.println("JDBCDatabaseExport: missing configuration file: " + e.getMessage());
80       System.exit(1);
81     }
82
83     export(configData, args[1], new File JavaDoc(args[0]).getParent());
84     System.exit(0);
85   }
86
87   private static String JavaDoc replaceTokens(String JavaDoc value, String JavaDoc webInf) {
88     if (value != null) {
89       int idx = value.indexOf("%WEBINF%");
90       if (idx != -1) {
91         StringBuffer JavaDoc replaced = new StringBuffer JavaDoc();
92         if (idx > 0) {
93           replaced.append(value.substring(0, idx));
94         }
95         replaced.append(webInf);
96         int endIdx = idx + "%WEBINF%".length();
97         if (endIdx < value.length()) {
98           replaced.append(value.substring(endIdx));
99         }
100         return replaced.toString();
101       }
102     }
103
104     return value;
105   }
106
107   public static void export(Properties JavaDoc config, String JavaDoc appOid, String JavaDoc webInf) {
108     Iterator JavaDoc configIt = config.keySet().iterator();
109     while(configIt.hasNext()) {
110       String JavaDoc key = (String JavaDoc)configIt.next();
111       String JavaDoc value = config.getProperty(key);
112       config.setProperty(key, replaceTokens(value, webInf));
113     }
114
115     try {
116       Class.forName(config.getProperty(Configuration.APP_JDBC_DRIVER));
117       Properties JavaDoc jdbcInfo = new Properties JavaDoc();
118       jdbcInfo.setProperty("user", config.getProperty(Configuration.APP_JDBC_USER));
119       jdbcInfo.setProperty("password", config.getProperty(Configuration.APP_JDBC_PASSWORD));
120       Connection JavaDoc connection = DriverManager.getConnection(config.getProperty(Configuration.APP_JDBC_URL), jdbcInfo);
121       store(System.out, appOid, connection);
122     } catch (Exception JavaDoc e) {
123       System.err.println("JDBCDatabaseExport: can't connect to database: " + e);
124       e.printStackTrace();
125     }
126   }
127
128   /**
129    * Store snips and users from the SnipSpace to an xml document into a stream.
130    * @param out outputstream to write to
131    */

132   public static void store(OutputStream JavaDoc out, String JavaDoc appOid, Connection JavaDoc connection) {
133     try {
134       OutputFormat outputFormat = new OutputFormat();
135       outputFormat.setEncoding("UTF-8");
136       outputFormat.setNewlines(true);
137
138       XMLWriter xmlWriter = new XMLWriter(out, outputFormat);
139       xmlWriter.startDocument();
140       Element root = DocumentHelper.createElement("snipspace");
141       xmlWriter.writeOpen(root);
142
143 // storeUsers(xmlWriter, connection);
144
storeSnips(xmlWriter, appOid, connection);
145
146       xmlWriter.writeClose(root);
147       xmlWriter.endDocument();
148       xmlWriter.flush();
149       xmlWriter.close();
150     } catch (Exception JavaDoc e) {
151       System.err.println("JDBCDatabaseExport: error while writing document: " + e.getMessage());
152     }
153   }
154
155   private static void storeSnips(XMLWriter xmlWriter, String JavaDoc appOid, Connection JavaDoc connection) {
156     try {
157       ResultSet JavaDoc results = readTable("Snip", appOid, connection);
158       serializeSnips(xmlWriter, results, connection, new SnipDataSerializer());
159     } catch (Exception JavaDoc e) {
160       System.err.println("JDBCDabaseExport: error serializing snips: " + e.getMessage());
161       e.printStackTrace();
162     }
163   }
164
165   /**
166    * Make an XML respresentation from a table.
167    */

168   private static ResultSet JavaDoc readTable(String JavaDoc table, String JavaDoc appOid, Connection JavaDoc connection) throws SQLException JavaDoc {
169     PreparedStatement JavaDoc prepStmt = connection.prepareStatement("SELECT * FROM " + table + " WHERE applicationOid='"+appOid+"'");
170     return prepStmt.executeQuery();
171   }
172
173   /**
174    * Make an XML representation from a result set.
175    */

176   private static void serializeSnips(XMLWriter xmlWriter, ResultSet JavaDoc results, Connection JavaDoc connection, Serializer serializer) throws IOException JavaDoc, SQLException JavaDoc {
177     ResultSetMetaData JavaDoc meta = results.getMetaData();
178
179     while (results.next()) {
180       // loop through columns and create map entries
181
Map JavaDoc elementMap = serializeData(results, meta);
182       // store map content entries and close element
183
Element snipElement = serializer.serialize(elementMap);
184       // store versions information
185
// Element versionsElement = snipElement.addElement("versions");
186
// PreparedStatement prepStmt = connection.prepareStatement("SELECT * FROM SnipVersion WHERE name='" + elementMap.get(SnipDataSerializer.SNIP_NAME)+"' AND applicationOid='" + appOid +"'" );
187

188       xmlWriter.write(snipElement);
189     }
190   }
191
192   private static Map JavaDoc serializeData(ResultSet JavaDoc results, ResultSetMetaData JavaDoc meta) throws SQLException JavaDoc {
193     Map JavaDoc elementMap = new HashMap JavaDoc();
194     int size = meta.getColumnCount();
195
196     for (int i = 1; i <= size; i++) {
197       Object JavaDoc object = results.getObject(i);
198       String JavaDoc name = meta.getColumnName(i);
199       if (null != object) {
200         if (object instanceof Timestamp JavaDoc) {
201           Timestamp JavaDoc time = (Timestamp JavaDoc) object;
202           elementMap.put(DBSER.get(name), "" + time.getTime());
203         } else {
204           elementMap.put(DBSER.get(name), object);
205         }
206       }
207     }
208     return elementMap;
209   }
210 }
211
Popular Tags