KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > j2biz > blogunity > installer > Installer


1 /*
2  * $Id: Installer.java,v 1.11 2005/01/16 14:19:26 michelson Exp $
3  *
4  * Copyright (c) 2004 j2biz Group, http://www.j2biz.com Koeln / Duesseldorf ,
5  * Germany
6  *
7  * @author Max Kalina
8  *
9  *
10  * This program is free software; you can redistribute it and/or modify it under
11  * the terms of the GNU General Public License as published by the Free Software
12  * Foundation; either version 2 of the License, or (at your option) any later
13  * version.
14  *
15  * This program is distributed in the hope that it will be useful, but WITHOUT
16  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License along with
21  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
22  * Place, Suite 330, Boston, MA 02111-1307 USA
23  *
24  */

25
26 package com.j2biz.blogunity.installer;
27
28 import java.io.ByteArrayOutputStream JavaDoc;
29 import java.io.File JavaDoc;
30 import java.io.FileInputStream JavaDoc;
31 import java.io.FileOutputStream JavaDoc;
32 import java.sql.Connection JavaDoc;
33 import java.sql.Statement JavaDoc;
34 import java.util.Properties JavaDoc;
35
36 import net.sf.hibernate.Session;
37 import net.sf.hibernate.SessionFactory;
38 import net.sf.hibernate.Transaction;
39 import net.sf.hibernate.cfg.Configuration;
40 import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
41
42 import com.j2biz.blogunity.IConstants;
43 import com.j2biz.blogunity.pojo.SystemConfiguration;
44 import com.j2biz.blogunity.pojo.User;
45 import com.j2biz.blogunity.util.BlogUtils;
46 import com.j2biz.blogunity.util.PasswordEncryptionService;
47
48 public class Installer {
49
50     public static String JavaDoc[] SQL_DIALECT_NAMES = {"DB2", "DB2 AS/400", "DB2 OS390", "PostgreSQL",
51             "MySQL", "Oracle (any version)", "Oracle 9/10g", "Sybase", "Sybase Anywhere",
52             "Microsoft SQL Server", "SAP DB", "Informix", "HypersonicSQL", "Ingres", "Progress",
53             "Mckoi SQL", "Interbase", "Pointbase", "FrontBase", "Firebird"};
54
55     public static String JavaDoc[] SQL_DIALECT_CLASSES = {"net.sf.hibernate.dialect.DB2Dialect",
56             "net.sf.hibernate.dialect.DB2400Dialect", "net.sf.hibernate.dialect.DB2390Dialect",
57             "net.sf.hibernate.dialect.PostgreSQLDialect", "net.sf.hibernate.dialect.MySQLDialect",
58             "net.sf.hibernate.dialect.OracleDialect", "net.sf.hibernate.dialect.Oracle9Dialect",
59             "net.sf.hibernate.dialect.SybaseDialect",
60             "net.sf.hibernate.dialect.SybaseAnywhereDialect",
61             "net.sf.hibernate.dialect.SQLServerDialect", "net.sf.hibernate.dialect.SAPDBDialect",
62             "net.sf.hibernate.dialect.InformixDialect", "net.sf.hibernate.dialect.HSQLDialect",
63             "net.sf.hibernate.dialect.IngresDialect", "net.sf.hibernate.dialect.ProgressDialect",
64             "net.sf.hibernate.dialect.MckoiDialect", "net.sf.hibernate.dialect.InterbaseDialect",
65             "net.sf.hibernate.dialect.PointbaseDialect",
66             "net.sf.hibernate.dialect.FrontbaseDialect", "net.sf.hibernate.dialect.FirebirdDialect"};
67
68     private static String JavaDoc blogunityDir;
69
70     private static String JavaDoc blogunityDataDir;
71
72     private static String JavaDoc blogunityTempDir;
73
74     private static String JavaDoc blogunityLogsDir;
75
76     private static String JavaDoc driverClass;
77
78     private static String JavaDoc dbUrl;
79
80     private static String JavaDoc dbUser;
81
82     private static String JavaDoc dbPass;
83
84     private static String JavaDoc sqlDialect;
85
86     private static String JavaDoc adminUser;
87
88     private static String JavaDoc adminPass;
89
90     private static String JavaDoc adminEmail;
91
92     private static String JavaDoc passwordEncryptionType;
93
94     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
95
96         if (args.length != 13) {
97             System.out.println("Not enougth arguments found! Required: 13, found: " + args.length);
98             System.exit(-1);
99         }
100
101         blogunityDir = args[0];
102
103         blogunityDataDir = args[1];
104
105         blogunityTempDir = args[2];
106
107         blogunityLogsDir = args[3];
108
109         dbUrl = args[4];
110
111         dbUser = args[5];
112
113         dbPass = args[6];
114
115         driverClass = args[7];
116
117         sqlDialect = args[8];
118
119         adminUser = args[9];
120
121         adminPass = args[10];
122
123         adminEmail = args[11];
124
125         passwordEncryptionType = args[12];
126
127         execute();
128
129     }
130
131     public static void install(String JavaDoc _blogunityDir, String JavaDoc _blogunityDataDir,
132             String JavaDoc _blogunityTempDir, String JavaDoc _blogunityLogsDir, String JavaDoc _dbUrl, String JavaDoc _dbUser,
133             String JavaDoc _dbPass, String JavaDoc _driverClass, String JavaDoc _sqlDialect, String JavaDoc _adminUser,
134             String JavaDoc _adminPass, String JavaDoc _adminEmail, String JavaDoc _passwordEncryptionType) {
135
136         blogunityDir = _blogunityDir;
137
138         blogunityDataDir = _blogunityDataDir;
139
140         blogunityTempDir = _blogunityTempDir;
141
142         blogunityLogsDir = _blogunityLogsDir;
143
144         dbUrl = _dbUrl;
145
146         dbUser = _dbUser;
147
148         dbPass = _dbPass;
149
150         driverClass = _driverClass;
151
152         sqlDialect = _sqlDialect;
153
154         adminUser = _adminUser;
155
156         adminPass = _adminPass;
157
158         adminEmail = _adminEmail;
159
160         passwordEncryptionType = _passwordEncryptionType;
161
162         execute();
163
164     }
165
166     private static final void execute() {
167
168         try {
169             // overwrite hibernate.properties
170
System.out.println("Writing hibernate properties...");
171             File JavaDoc f = new File JavaDoc(blogunityDir, "WEB-INF/classes/hibernate.properties");
172             if (!f.exists()) {
173                 System.out.println("File '" + f.getAbsolutePath() + "' not found!");
174                 System.out.println("Installation canceled!");
175                 System.exit(-1);
176             }
177             FileInputStream JavaDoc in = new FileInputStream JavaDoc(f);
178
179             Properties JavaDoc hibernateProps = new Properties JavaDoc();
180             hibernateProps.load(in);
181             in.close();
182
183             hibernateProps.setProperty("hibernate.connection.driver_class", driverClass);
184             System.out.println("set hibernate.connection.driver_class=" + driverClass);
185
186             //check here is unicode-suport enabled, if mysql-driver is
187
// selected.
188
if (dbUrl.toLowerCase().indexOf("mysql") > 0) {
189                 if (dbUrl.toLowerCase().indexOf("characterencoding=utf8") < 0) {
190
191                     // check, if already some url-parameter exists?
192
if (dbUrl.indexOf('?') < 0) {
193                         dbUrl += "?useUnicode=true&characterEncoding=UTF8";
194                     } else {
195                         dbUrl += "&useUnicode=true&characterEncoding=UTF8";
196                     }
197                 }
198             }
199
200             hibernateProps.setProperty("hibernate.connection.url", dbUrl);
201             System.out.println("set hibernate.connection.url=" + dbUrl);
202
203             hibernateProps.setProperty("hibernate.connection.username", dbUser);
204             System.out.println("set hibernate.connection.username=" + dbUser);
205
206             hibernateProps.setProperty("hibernate.connection.password", dbPass);
207             System.out.println("set hibernate.connection.password=" + dbPass);
208
209             hibernateProps.setProperty("hibernate.dialect", sqlDialect);
210             System.out.println("set hibernate.dialects=" + sqlDialect);
211
212             hibernateProps.setProperty("hibernate.show_sql", "false");
213
214             FileOutputStream JavaDoc out = new FileOutputStream JavaDoc(f);
215             hibernateProps.store(out, "Hibernate Properties. Created by Blogunity Installer");
216             out.close();
217
218             // overwrite log4j.properties
219
System.out.println("Writing log4j properties...");
220             File JavaDoc log4j = new File JavaDoc(blogunityDir, "WEB-INF/classes/log4j.properties");
221             if (!log4j.exists()) {
222                 System.out.println("File '" + log4j.getAbsolutePath() + "' not found!");
223                 System.out.println("Installation canceled!");
224                 System.exit(-1);
225             }
226             FileInputStream JavaDoc inLog4j = new FileInputStream JavaDoc(log4j);
227
228             Properties JavaDoc log4jProps = new Properties JavaDoc();
229             log4jProps.load(inLog4j);
230             inLog4j.close();
231
232             log4jProps.setProperty("log4j.rootLogger", "WARN, file");
233             log4jProps.setProperty("log4j.appender.file.File", new File JavaDoc(blogunityLogsDir,
234                     "blogunity.log").getAbsolutePath());
235
236             FileOutputStream JavaDoc outLog4j = new FileOutputStream JavaDoc(log4j);
237             log4jProps.store(outLog4j, "Log4J Properties. Created by Blogunity Installer");
238             outLog4j.close();
239
240             // export schema
241
System.out.print("Creating database tables...");
242             Configuration cfg = new Configuration();
243             cfg.setProperties(hibernateProps);
244
245             for (int i = 0; i < IConstants.PERSISTENT_CLASSES.length; i++) {
246                 cfg.addClass(IConstants.PERSISTENT_CLASSES[i]);
247             }
248
249             SchemaExport export = new SchemaExport(cfg, hibernateProps);
250             export.create(false, true);
251             System.out.println("Success.");
252
253             System.out.println("Building hibernate's session factory....");
254             SessionFactory sessionFactory = cfg.buildSessionFactory();
255             Session session = sessionFactory.openSession();
256
257             saveSystemConfiguration(session);
258             saveSystemAdministrator(session);
259
260             System.out.println("Execute flush...");
261             session.flush();
262
263             if (dbUrl.indexOf("jdbc:hsqldb:") > 0) {
264                 // try to write out manually
265
System.out.println("Execute SHUTDOWN for HsqlDB");
266                 Connection JavaDoc conn = session.connection();
267                 Statement JavaDoc stmt = conn.createStatement();
268                 stmt.executeUpdate("SHUTDOWN");
269                 stmt.close();
270                 conn.close();
271             }
272
273             session.close();
274
275         } catch (Exception JavaDoc e1) {
276             System.out.println("Installation failed!");
277             e1.printStackTrace();
278             System.exit(-1);
279         }
280
281         System.out.println("Installation complete...");
282
283     }
284
285     /**
286      * @throws Exception
287      *
288      */

289     private static void saveSystemAdministrator(Session session) throws Exception JavaDoc {
290         // system administrator
291

292         System.out.print("Creating system administrator...");
293         Transaction tx = session.beginTransaction();
294         User u = new User();
295
296         if (!BlogUtils.getInstance().isValidNickname(adminUser)) adminUser = "admin";
297
298         u.setNickname(adminUser);
299
300         if (passwordEncryptionType.equalsIgnoreCase("md5")) {
301             u.setPassword(PasswordEncryptionService.encrypt(adminPass,
302                     PasswordEncryptionService.MD5));
303         } else if (passwordEncryptionType.equalsIgnoreCase("sha")) {
304             u.setPassword(PasswordEncryptionService.encrypt(adminPass,
305                     PasswordEncryptionService.SHA));
306         } else
307             u.setPassword(adminPass);
308
309         if (!BlogUtils.getInstance().isValidEmailAddress(adminEmail))
310                 adminEmail = "admin@site.com";
311         u.setEmail(adminEmail);
312         u.setFirstname("System");
313         u.setLastname("Administrator");
314         u.setAdministrator(true);
315         u.setActive(true);
316         u.setShowEmail(false);
317         session.save(u);
318
319         tx.commit();
320
321         System.out.println("Success.");
322     }
323
324     /**
325      *
326      */

327     private static void saveSystemConfiguration(Session session) throws Exception JavaDoc {
328         System.out.print("Creating system properties...");
329         Transaction tx = session.beginTransaction();
330
331         Properties JavaDoc props = new Properties JavaDoc();
332         props.setProperty("resource.loader", "file, class");
333
334         // file resource loader
335
props.setProperty("file.resource.loader.path", blogunityDataDir);
336         props.setProperty("file.resource.loader.cache", "true");
337         props.setProperty("file.resource.loader.modificationCheckInterval", "2");
338         props.setProperty("velocimacro.library", "blogunity_macros.vm");
339
340         // classpath resource loader
341

342         props
343                 .setProperty("class.resource.loader.description",
344                         "Velocity Classpath Resource Loader");
345         props.setProperty("class.resource.loader.class",
346                 "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
347
348         // velocity.log
349
props.setProperty("runtime.log", new File JavaDoc(blogunityLogsDir, "velocity.log")
350                 .getAbsolutePath());
351         props.setProperty("input.encoding", "UTF-8");
352         props.setProperty("output.encoding", "UTF-8");
353
354         SystemConfiguration config = new SystemConfiguration();
355         config.setAllowNewUsers(true);
356         config.setDataDir(blogunityDataDir);
357         config.setTempDir(blogunityTempDir);
358         // config.setRenderEngineClass("org.radeox.engine.BaseRenderEngine");
359
config.setValidateNewUsers(true);
360
361         if (passwordEncryptionType.equalsIgnoreCase("md5")) {
362             config.setPasswordEncriptionEnabled(true);
363             config.setPasswordEncryptionType(PasswordEncryptionService.MD5);
364         } else if (passwordEncryptionType.equalsIgnoreCase("sha")) {
365             config.setPasswordEncriptionEnabled(true);
366             config.setPasswordEncryptionType(PasswordEncryptionService.SHA);
367
368         } else {
369             config.setPasswordEncriptionEnabled(false);
370         }
371
372         ByteArrayOutputStream JavaDoc outx = new ByteArrayOutputStream JavaDoc();
373         props.store(outx, "Created by Blogunity Installer");
374
375         config.setVelocityProperties(new String JavaDoc(outx.toByteArray()));
376         session.save(config);
377         tx.commit();
378         System.out.println("Success.");
379     }
380 }
Popular Tags