1 25 26 package com.j2biz.blogunity.installer; 27 28 import java.io.ByteArrayOutputStream ; 29 import java.io.File ; 30 import java.io.FileInputStream ; 31 import java.io.FileOutputStream ; 32 import java.sql.Connection ; 33 import java.sql.Statement ; 34 import java.util.Properties ; 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 [] 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 [] 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 blogunityDir; 69 70 private static String blogunityDataDir; 71 72 private static String blogunityTempDir; 73 74 private static String blogunityLogsDir; 75 76 private static String driverClass; 77 78 private static String dbUrl; 79 80 private static String dbUser; 81 82 private static String dbPass; 83 84 private static String sqlDialect; 85 86 private static String adminUser; 87 88 private static String adminPass; 89 90 private static String adminEmail; 91 92 private static String passwordEncryptionType; 93 94 public static void main(String [] args) throws Exception { 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 _blogunityDir, String _blogunityDataDir, 132 String _blogunityTempDir, String _blogunityLogsDir, String _dbUrl, String _dbUser, 133 String _dbPass, String _driverClass, String _sqlDialect, String _adminUser, 134 String _adminPass, String _adminEmail, String _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 System.out.println("Writing hibernate properties..."); 171 File f = new File (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 in = new FileInputStream (f); 178 179 Properties hibernateProps = new Properties (); 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 if (dbUrl.toLowerCase().indexOf("mysql") > 0) { 189 if (dbUrl.toLowerCase().indexOf("characterencoding=utf8") < 0) { 190 191 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 out = new FileOutputStream (f); 215 hibernateProps.store(out, "Hibernate Properties. Created by Blogunity Installer"); 216 out.close(); 217 218 System.out.println("Writing log4j properties..."); 220 File log4j = new File (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 inLog4j = new FileInputStream (log4j); 227 228 Properties log4jProps = new Properties (); 229 log4jProps.load(inLog4j); 230 inLog4j.close(); 231 232 log4jProps.setProperty("log4j.rootLogger", "WARN, file"); 233 log4jProps.setProperty("log4j.appender.file.File", new File (blogunityLogsDir, 234 "blogunity.log").getAbsolutePath()); 235 236 FileOutputStream outLog4j = new FileOutputStream (log4j); 237 log4jProps.store(outLog4j, "Log4J Properties. Created by Blogunity Installer"); 238 outLog4j.close(); 239 240 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 System.out.println("Execute SHUTDOWN for HsqlDB"); 266 Connection conn = session.connection(); 267 Statement stmt = conn.createStatement(); 268 stmt.executeUpdate("SHUTDOWN"); 269 stmt.close(); 270 conn.close(); 271 } 272 273 session.close(); 274 275 } catch (Exception 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 289 private static void saveSystemAdministrator(Session session) throws Exception { 290 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 327 private static void saveSystemConfiguration(Session session) throws Exception { 328 System.out.print("Creating system properties..."); 329 Transaction tx = session.beginTransaction(); 330 331 Properties props = new Properties (); 332 props.setProperty("resource.loader", "file, class"); 333 334 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 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 props.setProperty("runtime.log", new File (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.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 outx = new ByteArrayOutputStream (); 373 props.store(outx, "Created by Blogunity Installer"); 374 375 config.setVelocityProperties(new String (outx.toByteArray())); 376 session.save(config); 377 tx.commit(); 378 System.out.println("Success."); 379 } 380 } | Popular Tags |