Add some checks to prevent #13 happen.
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.config.Config;
29 import org.sonews.util.io.Resource;
32 * Database setup utility class.
33 * @author Christian Lins
36 public final class DatabaseSetup
39 private static final Map<String, String> templateMap
40 = new HashMap<String, String>();
41 private static final Map<String, StringTemplate> urlMap
42 = new HashMap<String, StringTemplate>();
43 private static final Map<String, String> driverMap
44 = new HashMap<String, String>();
48 templateMap.put("1", "helpers/database_mysql5_tmpl.sql");
49 templateMap.put("2", "helpers/database_postgresql8_tmpl.sql");
51 urlMap.put("1", new StringTemplate("jdbc:mysql://%HOSTNAME/%DB"));
52 urlMap.put("2", new StringTemplate("jdbc:postgresql://%HOSTNAME/%DB"));
54 driverMap.put("1", "com.mysql.jdbc.Driver");
55 driverMap.put("2", "org.postgresql.Driver");
58 public static void main(String[] args)
61 System.out.println("sonews Database setup helper");
62 System.out.println("This program will create a initial database table structure");
63 System.out.println("for the sonews Newsserver.");
64 System.out.println("You need to create a database and a db user manually before!");
66 System.out.println("Select DBMS type:");
67 System.out.println("[1] MySQL 5.x or higher");
68 System.out.println("[2] PostgreSQL 8.x or higher");
69 System.out.print("Your choice: ");
71 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
72 String dbmsType = in.readLine();
73 String tmplName = templateMap.get(dbmsType);
76 System.err.println("Invalid choice. Try again you fool!");
81 // Load JDBC Driver class
82 Class.forName(driverMap.get(dbmsType));
84 String tmpl = Resource.getAsString(tmplName, true);
86 System.out.print("Database server hostname (e.g. localhost): ");
87 String dbHostname = in.readLine();
89 System.out.print("Database name: ");
90 String dbName = in.readLine();
92 System.out.print("Give name of DB user that can create tables: ");
93 String dbUser = in.readLine();
95 System.out.print("Password: ");
96 String dbPassword = in.readLine();
98 String url = urlMap.get(dbmsType)
99 .set("HOSTNAME", dbHostname)
100 .set("DB", dbName).toString();
103 DriverManager.getConnection(url, dbUser, dbPassword);
104 conn.setAutoCommit(false);
106 String[] tmplChunks = tmpl.split(";");
108 for(String chunk : tmplChunks)
110 if(chunk.trim().equals(""))
115 Statement stmt = conn.createStatement();
120 conn.setAutoCommit(true);
122 // Create config file
124 System.out.println("Ok");