Author: solomax
Date: Mon Apr 23 11:15:46 2012
New Revision: 1329184

URL: http://svn.apache.org/viewvc?rev=1329184&view=rev
Log:
OPENMEETINGS-194 patch proposed by Dmitry Zamula implementing --drop 
command-line installer option is commited

Added:
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionProperties.java
Modified:
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java 
(original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java 
Mon Apr 23 11:15:46 2012
@@ -25,6 +25,7 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.Parser;
 import org.apache.commons.cli.PosixParser;
+import org.apache.openjpa.jdbc.meta.MappingTool;
 import org.openmeetings.app.OpenmeetingsVariables;
 import org.openmeetings.app.data.basic.dao.OmTimeZoneDaoImpl;
 import org.openmeetings.app.data.file.FileUtils;
@@ -90,6 +91,8 @@ public class Admin {
                options.addOption(new OmOption("i", null, "db-name", true, "The 
name of Openmeetings database", true));
                options.addOption(new OmOption("i", null, "db-user", true, 
"User with write access to the DB specified", true));
                options.addOption(new OmOption("i", null, "db-pass", true, 
"Password of the user with write access to the DB specified", true));
+               options.addOption(new OmOption("i", null, "drop", false, "Drop 
database before installation", true));
+               options.addOption(new OmOption("i", null, "force", false, 
"Install without checking the existence of old data in the database.", true));
                
                return options;
        }
@@ -271,6 +274,7 @@ public class Admin {
                                        String login = 
cmdl.getOptionValue("user");
                                        String email = 
cmdl.getOptionValue("email");
                                        String group = 
cmdl.getOptionValue("group");
+                                       //TODO commented for now, since not in 
use boolean force = cmdl.hasOption("force");
                                        if 
(cmdl.hasOption("skip-default-rooms")) {
                                                cfg.createDefaultRooms = "0";
                                        }
@@ -322,6 +326,7 @@ public class Admin {
                                                        System.exit(1);
                                                }
                                        }
+                                       ConnectionProperties 
connectionProperties = new ConnectionProperties();
                                        if (cmdl.hasOption("db-type") || 
cmdl.hasOption("db-host") || cmdl.hasOption("db-port") || 
cmdl.hasOption("db-name") || cmdl.hasOption("db-user") || 
cmdl.hasOption("db-pass")) {
                                                String dbType = 
cmdl.getOptionValue("db-type", "derby");
                                                File srcConf = new File(omHome, 
"WEB-INF/classes/META-INF/" + dbType + "_persistence.xml");
@@ -334,8 +339,16 @@ public class Admin {
                                                                , 
cmdl.getOptionValue("db-name", null)
                                                                , 
cmdl.getOptionValue("db-user", null)
                                                                , 
cmdl.getOptionValue("db-pass", null)
+                                                               , 
connectionProperties
                                                                );
                                        }
+                                       
+                                       if(cmdl.hasOption("drop")) {    
+                                               String[] mappingToolArgs = 
{"-sa", "drop", "-p", omHome.getPath() + 
"/WEB-INF/classes/META-INF/persistence.xml",
+                                                               
"-connectionDriverName", connectionProperties.getDriverName(), 
"-connectionURL", connectionProperties.getConnectionURL(),
+                                                               
"-connectionUserName", connectionProperties.getConnectionLogin(), 
"-connectionPassword", connectionProperties.getConnectionPass()};
+                                               
MappingTool.main(mappingToolArgs);
+                                       }
 
                                        ClassPathXmlApplicationContext ctx = 
getApplicationContext(ctxName);
                                        OmTimeZoneDaoImpl tzDao =  
ctx.getBean(OmTimeZoneDaoImpl.class);

Added: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionProperties.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionProperties.java?rev=1329184&view=auto
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionProperties.java
 (added)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionProperties.java
 Mon Apr 23 11:15:46 2012
@@ -0,0 +1,41 @@
+package org.openmeetings.cli;
+
+public class ConnectionProperties {
+
+       private String driverName = "org.apache.derby.jdbc.ClientDriver";
+       private String connectionURL = "jdbc:derby:openmeetings";
+       private String connectionLogin = "user";
+       private String connectionPass = "secret";
+
+       public String getDriverName() {
+               return driverName;
+       }
+
+       public void setDriverName(String driverName) {
+               this.driverName = driverName;
+       }
+
+       public String getConnectionURL() {
+               return connectionURL;
+       }
+
+       public void setConnectionURL(String connectionURL) {
+               this.connectionURL = connectionURL;
+       }
+
+       public String getConnectionLogin() {
+               return connectionLogin;
+       }
+
+       public void setConnectionLogin(String connectionLogin) {
+               this.connectionLogin = connectionLogin;
+       }
+
+       public String getConnectionPass() {
+               return connectionPass;
+       }
+
+       public void setConnectionPass(String connectionPass) {
+               this.connectionPass = connectionPass;
+       }
+}

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
 Mon Apr 23 11:15:46 2012
@@ -20,6 +20,9 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 public abstract class ConnectionPropertiesPatcher {
+       
+       ConnectionProperties connectionProperties;
+       
        public enum PatcherType {
                db2
                , derby
@@ -52,7 +55,8 @@ public abstract class ConnectionProperti
                return patcher;
        }
        
-       public void patch(File srcXml, File destXml, String host, String port, 
String db, String user, String pass) throws Exception {
+       public void patch(File srcXml, File destXml, String host, String port, 
String db, String user, String pass, ConnectionProperties connectionProperties) 
throws Exception {
+               this.connectionProperties = connectionProperties;
                DocumentBuilderFactory dbFactory = 
DocumentBuilderFactory.newInstance();
                //dbFactory.setNamespaceAware(true);
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
@@ -73,7 +77,7 @@ public abstract class ConnectionProperti
        
        protected Attr patchAttribute(Attr attr, String host, String port, 
String db, String user, String pass) {
                String[] tokens = attr.getValue().split(",");
-               patchUser(tokens, user, pass);
+               patchUserPassDriver(tokens, user, pass);
                patchDb(tokens, host, port, db);
                attr.setValue(StringUtils.join(tokens, ","));
                return attr;
@@ -87,16 +91,42 @@ public abstract class ConnectionProperti
                }
        }
        
-       protected void patchUser(String[] tokens, String user, String pass) {
+       protected void patchUserPassDriver(String[] tokens, String user,
+                       String pass) {
+               String prop;
                for (int i = 0; i < tokens.length; ++i) {
+                       prop = getPropFromPersistence(tokens, i, 
"DriverClassName");
+                       if (prop != null)
+                               connectionProperties.setDriverName(prop);
+                       
                        if (user != null) {
                                patchProp(tokens, i, "Username", user);
+                               connectionProperties.setConnectionLogin(user);
+                       } else {
+                               prop = getPropFromPersistence(tokens, i, 
"Username");
+                               if (prop != null)
+                                       
connectionProperties.setConnectionLogin(prop);
                        }
+                       
                        if (pass != null) {
                                patchProp(tokens, i, "Password", pass);
+                               connectionProperties.setConnectionPass(pass);
+                       } else {
+                               prop = getPropFromPersistence(tokens, i, 
"Password");
+                               if (prop != null)
+                                       
connectionProperties.setConnectionPass(prop);
                        }
                }
        }
        
+       protected String getPropFromPersistence(String[] tokens, int idx, 
String name){
+               String prop = tokens[idx].trim();
+               if (prop.startsWith(name)) {
+                       //From "Username=root" getting only "root"
+                       return prop.substring(prop.indexOf("=") + 1);
+               }
+               return null;
+       }
+       
        protected abstract void patchDb(String[] tokens, String host, String 
port, String db);
 }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
 Mon Apr 23 11:15:46 2012
@@ -8,7 +8,9 @@ public class Db2Patcher extends Connecti
                for (int i = 0; i < tokens.length; ++i) {
                        String prop = tokens[i].trim();
                        if (prop.startsWith("Url")) {
-                               String url = "Url=jdbc:db2://" + host + ":" + 
port + "/" + db;
+                               String connectionURL = "jdbc:db2://" + host + 
":" + port + "/" + db; 
+                               
connectionProperties.setConnectionURL(connectionURL);
+                               String url = "Url=" + connectionURL;
                                tokens[i] = url;
                        }
                }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
 Mon Apr 23 11:15:46 2012
@@ -8,7 +8,9 @@ public class DerbyPatcher extends Connec
                        String prop = tokens[i].trim();
                        if (prop.startsWith("Url")) {
                                String suffix = 
prop.substring(prop.indexOf(';'));
-                               String url = "Url=jdbc:derby" + ":" + db + 
suffix;
+                               String connectionURL = "jdbc:derby" + ":" + db; 
+                               
connectionProperties.setConnectionURL(connectionURL);
+                               String url = "Url=" + connectionURL + suffix;
                                tokens[i] = url;
                        }
                }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
 Mon Apr 23 11:15:46 2012
@@ -9,7 +9,9 @@ public class MysqlPatcher extends Connec
                        String prop = tokens[i].trim();
                        if (prop.startsWith("Url")) {
                                String suffix = 
prop.substring(prop.indexOf('?'));
-                               String url = "Url=jdbc:mysql://" + host + ":" + 
port + "/" + db + suffix;
+                               String connectionURL = "jdbc:mysql://" + host + 
":" + port + "/" + db;
+                               
connectionProperties.setConnectionURL(connectionURL);
+                               String url = "Url=" + connectionURL + suffix;
                                tokens[i] = url;
                        }
                }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
 Mon Apr 23 11:15:46 2012
@@ -8,7 +8,9 @@ public class OraclePatcher extends Conne
                for (int i = 0; i < tokens.length; ++i) {
                        String prop = tokens[i].trim();
                        if (prop.startsWith("Url")) {
-                               String url = "Url=jdbc:oracle:thin:@" + host + 
":" + port + ":" + db;
+                               String connectionURL = "jdbc:oracle:thin:@" + 
host + ":" + port + ":" + db; 
+                               
connectionProperties.setConnectionURL(connectionURL);
+                               String url = "Url=" + connectionURL;
                                tokens[i] = url;
                        }
                }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java?rev=1329184&r1=1329183&r2=1329184&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java
 Mon Apr 23 11:15:46 2012
@@ -8,7 +8,9 @@ public class PostgresPatcher extends Con
                for (int i = 0; i < tokens.length; ++i) {
                        String prop = tokens[i].trim();
                        if (prop.startsWith("Url")) {
-                               String url = "Url=jdbc:postgresql://" + host + 
":" + port + "/" + db;
+                               String connectionURL = "jdbc:postgresql://" + 
host + ":" + port + "/" + db; 
+                               
connectionProperties.setConnectionURL(connectionURL);
+                               String url = "Url=" + connectionURL;
                                tokens[i] = url;
                        }
                }


Reply via email to