Author: solomax
Date: Thu Apr 19 06:58:47 2012
New Revision: 1327842
URL: http://svn.apache.org/viewvc?rev=1327842&view=rev
Log:
OPENMEETINGS-111 Cli Admin updated with optional options to set DB parameters
Added:
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
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=1327842&r1=1327841&r2=1327842&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
Thu Apr 19 06:58:47 2012
@@ -83,6 +83,13 @@ public class Admin {
options.addOption(new OmOption("i", null, "email-use-tls",
false, "Is secure e-mail connection [default: no]", true));
options.addOption(new OmOption("i", null, "skip-default-rooms",
false, "Do not create default rooms [created by default]", true));
options.addOption(new OmOption("i", null,
"disable-frontend-register", false, "Do not allow front end register [allowed
by default]", true));
+
+ options.addOption(new OmOption("i", null, "db-type", true, "The
type of the DB to be used", true));
+ options.addOption(new OmOption("i", null, "db-host", true, "DNS
name or IP address of database", true));
+ options.addOption(new OmOption("i", null, "db-port", true,
"Database port", true));
+ 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));
return options;
}
@@ -292,6 +299,7 @@ public class Admin {
System.out.println("User login
was not provided, or too short, should be at least " +
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH + " character long.");
System.exit(1);
}
+
try {
if
(!rfc2822.matcher(email).matches()) {
throw new
AddressException("Invalid address");
@@ -314,6 +322,21 @@ public class Admin {
System.exit(1);
}
}
+ 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");
+ File destConf = new
File(omHome, "WEB-INF/classes/META-INF/persistence.xml");
+
ConnectionPropertiesPatcher.getPatcher(dbType).patch(
+ srcConf
+ , destConf
+ ,
cmdl.getOptionValue("db-host", "localhost")
+ ,
cmdl.getOptionValue("db-port", null)
+ ,
cmdl.getOptionValue("db-name", null)
+ ,
cmdl.getOptionValue("db-user", null)
+ ,
cmdl.getOptionValue("db-pass", null)
+ );
+ }
+
ClassPathXmlApplicationContext ctx =
getApplicationContext(ctxName);
ImportInitvalues importInit =
ctx.getBean(ImportInitvalues.class);
importInit.loadAll(new File(omHome,
ImportInitvalues.languageFolderName).getAbsolutePath(), cfg, login, pass,
email, group, tz);
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/ConnectionPropertiesPatcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,102 @@
+package org.openmeetings.cli;
+
+import java.io.File;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public abstract class ConnectionPropertiesPatcher {
+ public enum PatcherType {
+ db2
+ , derby
+ , mysql
+ , oracle
+ , postgres
+ }
+
+ static ConnectionPropertiesPatcher getPatcher(String _dbType) {
+ PatcherType dbType = PatcherType.valueOf(_dbType);
+ ConnectionPropertiesPatcher patcher = null;
+ switch (dbType) {
+ case db2:
+ patcher = new Db2Patcher();
+ break;
+ case mysql:
+ patcher = new MysqlPatcher();
+ break;
+ case oracle:
+ patcher = new OraclePatcher();
+ break;
+ case postgres:
+ patcher = new PostgresPatcher();
+ break;
+ case derby:
+ default:
+ patcher = new DerbyPatcher();
+ break;
+ }
+ return patcher;
+ }
+
+ public void patch(File srcXml, File destXml, String host, String port,
String db, String user, String pass) throws Exception {
+ DocumentBuilderFactory dbFactory =
DocumentBuilderFactory.newInstance();
+ //dbFactory.setNamespaceAware(true);
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ Document doc = dBuilder.parse(srcXml);
+
+ XPath xPath = XPathFactory.newInstance().newXPath();
+ XPathExpression expr =
xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']");
+
+ Element element = (Element)expr.evaluate(doc,
XPathConstants.NODE);
+ Attr val = element.getAttributeNode("value");
+ val = patchAttribute(val, host, port, db, user, pass);
+
+ TransformerFactory transformerFactory =
TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ DOMSource source = new DOMSource(doc);
+ transformer.transform(source, new StreamResult(destXml));
+ }
+
+ protected Attr patchAttribute(Attr attr, String host, String port,
String db, String user, String pass) {
+ String[] tokens = attr.getValue().split(",");
+ patchUser(tokens, user, pass);
+ patchDb(tokens, host, port, db);
+ attr.setValue(StringUtils.join(tokens, ","));
+ return attr;
+ }
+
+ protected void patchProp(String[] tokens, int idx, String name, String
value) {
+ String prop = tokens[idx].trim();
+ if (prop.startsWith(name)) {
+ prop = name + "=" + StringEscapeUtils.escapeXml(value);
+ tokens[idx] = prop;
+ }
+ }
+
+ protected void patchUser(String[] tokens, String user, String pass) {
+ for (int i = 0; i < tokens.length; ++i) {
+ if (user != null) {
+ patchProp(tokens, i, "Username", user);
+ }
+ if (pass != null) {
+ patchProp(tokens, i, "Password", pass);
+ }
+ }
+ }
+
+ protected abstract void patchDb(String[] tokens, String host, String
port, String db);
+}
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Db2Patcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,16 @@
+package org.openmeetings.cli;
+
+public class Db2Patcher extends ConnectionPropertiesPatcher {
+ @Override
+ protected void patchDb(String[] tokens, String host, String _port,
String _db) {
+ String port = (_port == null) ? "50000" : _port;
+ String db = (_db == null) ? "openmeet" : _db;
+ 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;
+ tokens[i] = url;
+ }
+ }
+ }
+}
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/DerbyPatcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,16 @@
+package org.openmeetings.cli;
+
+public class DerbyPatcher extends ConnectionPropertiesPatcher {
+ @Override
+ protected void patchDb(String[] tokens, String host, String _port,
String _db) {
+ String db = (_db == null) ? "openmeetings" : _db;
+ for (int i = 0; i < tokens.length; ++i) {
+ String prop = tokens[i].trim();
+ if (prop.startsWith("Url")) {
+ String suffix =
prop.substring(prop.indexOf(';'));
+ String url = "Url=jdbc:derby" + ":" + db +
suffix;
+ tokens[i] = url;
+ }
+ }
+ }
+}
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/MysqlPatcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,17 @@
+package org.openmeetings.cli;
+
+public class MysqlPatcher extends ConnectionPropertiesPatcher {
+ @Override
+ protected void patchDb(String[] tokens, String host, String _port,
String _db) {
+ String port = (_port == null) ? "3306" : _port;
+ String db = (_db == null) ? "openmeetings" : _db;
+ for (int i = 0; i < tokens.length; ++i) {
+ String prop = tokens[i].trim();
+ if (prop.startsWith("Url")) {
+ String suffix =
prop.substring(prop.indexOf('?'));
+ String url = "Url=jdbc:mysql://" + host + ":" +
port + "/" + db + suffix;
+ tokens[i] = url;
+ }
+ }
+ }
+}
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/OraclePatcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,16 @@
+package org.openmeetings.cli;
+
+public class OraclePatcher extends ConnectionPropertiesPatcher {
+ @Override
+ protected void patchDb(String[] tokens, String host, String _port,
String _db) {
+ String port = (_port == null) ? "1521" : _port;
+ String db = (_db == null) ? "openmeetings" : _db;
+ 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;
+ tokens[i] = url;
+ }
+ }
+ }
+}
Added:
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=1327842&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/PostgresPatcher.java
Thu Apr 19 06:58:47 2012
@@ -0,0 +1,16 @@
+package org.openmeetings.cli;
+
+public class PostgresPatcher extends ConnectionPropertiesPatcher {
+ @Override
+ protected void patchDb(String[] tokens, String host, String _port,
String _db) {
+ String port = (_port == null) ? "5432" : _port;
+ String db = (_db == null) ? "openmeetings" : _db;
+ 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;
+ tokens[i] = url;
+ }
+ }
+ }
+}