3 * see AUTHORS for the list of contributors
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 package org.sonews.util;
21 import java.io.BufferedReader;
22 import java.io.InputStreamReader;
23 import java.sql.Connection;
24 import java.sql.DriverManager;
25 import java.sql.Statement;
26 import java.util.HashMap;
28 import org.sonews.util.io.Resource;
31 * Database setup utility class.
32 * @author Christian Lins
35 public final class DatabaseSetup
38 private static final Map<String, String> templateMap = new HashMap<String, String>();
39 private static final Map<String, StringTemplate> urlMap = new HashMap<String, StringTemplate>();
40 private static final Map<String, String> driverMap = new HashMap<String, String>();
43 templateMap.put("1", "helpers/database_mysql5_tmpl.sql");
44 templateMap.put("2", "helpers/database_postgresql8_tmpl.sql");
46 urlMap.put("1", new StringTemplate("jdbc:mysql://%HOSTNAME/%DB"));
47 urlMap.put("2", new StringTemplate("jdbc:postgresql://%HOSTNAME/%DB"));
49 driverMap.put("1", "com.mysql.jdbc.Driver");
50 driverMap.put("2", "org.postgresql.Driver");
53 public static void main(String[] args)
56 System.out.println("sonews Database setup helper");
57 System.out.println("This program will create a initial database table structure");
58 System.out.println("for the sonews Newsserver.");
59 System.out.println("You need to create a database and a db user manually before!");
61 System.out.println("Select DBMS type:");
62 System.out.println("[1] MySQL 5.x or higher");
63 System.out.println("[2] PostgreSQL 8.x or higher");
64 System.out.print("Your choice: ");
66 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
67 String dbmsType = in.readLine();
68 String tmplName = templateMap.get(dbmsType);
69 if (tmplName == null) {
70 System.err.println("Invalid choice. Try again you fool!");
75 // Load JDBC Driver class
76 Class.forName(driverMap.get(dbmsType));
78 String tmpl = Resource.getAsString(tmplName, true);
80 System.out.print("Database server hostname (e.g. localhost): ");
81 String dbHostname = in.readLine();
83 System.out.print("Database name: ");
84 String dbName = in.readLine();
86 System.out.print("Give name of DB user that can create tables: ");
87 String dbUser = in.readLine();
89 System.out.print("Password: ");
90 String dbPassword = in.readLine();
92 String url = urlMap.get(dbmsType).set("HOSTNAME", dbHostname).set("DB", dbName).toString();
95 DriverManager.getConnection(url, dbUser, dbPassword);
96 conn.setAutoCommit(false);
98 String[] tmplChunks = tmpl.split(";");
100 for (String chunk : tmplChunks) {
101 if (chunk.trim().equals("")) {
105 Statement stmt = conn.createStatement();
110 conn.setAutoCommit(true);
112 // Create config file
114 System.out.println("Ok");