Author: solomax
Date: Wed Apr 25 10:35:08 2012
New Revision: 1330188
URL: http://svn.apache.org/viewvc?rev=1330188&view=rev
Log:
OPENMEETINGS-111 tz issues was fixed; options to install OM from backup
provided is added.
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/servlet/outputhandler/Install.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/utils/ImportHelper.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java?rev=1330188&r1=1330187&r2=1330188&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
Wed Apr 25 10:35:08 2012
@@ -768,8 +768,7 @@ public class ImportInitvalues {
List<OmTimeZone> omTimeZones = new LinkedList<OmTimeZone>();
SAXReader reader = new SAXReader();
- Document document = reader.read(filePath
- + ImportInitvalues.nameOfTimeZoneFile);
+ Document document = reader.read(new File(filePath,
ImportInitvalues.nameOfTimeZoneFile));
Element root = document.getRootElement();
@@ -960,8 +959,7 @@ public class ImportInitvalues {
}
//
------------------------------------------------------------------------------
- public void loadAll(String filePath, InstallationConfig cfg, String
username,
- String userpass, String useremail, String groupame,
String timeZone) throws Exception {
+ public void loadSystem(String filePath, InstallationConfig cfg) throws
Exception {
loadMainMenu();
loadErrorMappingsFromXML(filePath);
loadInitLanguages(filePath);
@@ -974,7 +972,12 @@ public class ImportInitvalues {
loadPollTypes();
loadConfiguration(cfg);
+ }
+
+ public void loadAll(String filePath, InstallationConfig cfg, String
username,
+ String userpass, String useremail, String groupame,
String timeZone) throws Exception {
+ loadSystem(filePath, cfg);
loadInitUserAndOrganisation(username,
userpass, useremail, groupame, timeZone,
cfg.defaultLangId);
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=1330188&r1=1330187&r2=1330188&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
Wed Apr 25 10:35:08 2012
@@ -9,6 +9,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.Enumeration;
+import java.util.Map;
import java.util.Set;
import javax.mail.internet.AddressException;
@@ -27,15 +28,14 @@ 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;
import org.openmeetings.app.documents.InstallationDocumentHandler;
import org.openmeetings.app.installation.ImportInitvalues;
import org.openmeetings.app.installation.InstallationConfig;
-import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.servlet.outputhandler.BackupExport;
import org.openmeetings.servlet.outputhandler.BackupImportController;
+import org.openmeetings.utils.ImportHelper;
import org.openmeetings.utils.OMContextListener;
import org.openmeetings.utils.mail.MailUtil;
import org.openmeetings.utils.math.CalendarPatterns;
@@ -49,6 +49,8 @@ public class Admin {
private boolean verbose = false;
private InstallationConfig cfg = null;
private Options opts = null;
+ private CommandLine cmdl = null;
+ File omHome = null;
private Admin() {
cfg = new InstallationConfig();
@@ -69,12 +71,12 @@ public class Admin {
options.addOption(new OmOption(null, "v", "verbose", false,
"verbose error messages"));
//backup/restore
options.addOption(new OmOption("b", null, "exclude-files",
false, "should backup exclude files [default: include]", true));
- options.addOption(new OmOption("b,r", "file", null, true, "file
used for backup/restore", "b"));
+ options.addOption(new OmOption("b,r,i", "file", null, true,
"file used for backup/restore/install", "b"));
//install
- options.addOption(new OmOption("i", "user", null, true, "Login
name of the default user, minimum " +
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH + " characters"));
- options.addOption(new OmOption("i", "email", null, true, "Email
of the default user"));
- options.addOption(new OmOption("i", "group", null, true, "The
name of the default user group"));
- options.addOption(new OmOption("i", "tz", null, true, "Default
server time zone, and time zone for the selected user [for ex: 'GMT+10', '-2',
'Chicago']"));
+ options.addOption(new OmOption("i", "user", null, true, "Login
name of the default user, minimum " +
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH + " characters (mutually exclusive
with 'file')"));
+ options.addOption(new OmOption("i", "email", null, true, "Email
of the default user (mutually exclusive with 'file')"));
+ options.addOption(new OmOption("i", "group", null, true, "The
name of the default user group (mutually exclusive with 'file')"));
+ options.addOption(new OmOption("i", "tz", null, true, "Default
server time zone, and time zone for the selected user (mutually exclusive with
'file')"));
options.addOption(new OmOption("i", null, "password", true,
"Password of the default user, minimum " +
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH + " characters (will be prompted
if not set)", true));
options.addOption(new OmOption("i", null,
"system-email-address", true, "System e-mail address [default: " +
cfg.mailReferer + "]", true));
options.addOption(new OmOption("i", null, "smtp-server", true,
"SMTP server for outgoing e-mails [default: " + cfg.smtpServer + "]", true));
@@ -242,11 +244,10 @@ public class Admin {
private void process(String[] args) {
String ctxName = System.getProperty("context", "openmeetings");
File home = new File(System.getenv("RED5_HOME"));
- File omHome = new File(new File(home, "webapps"), ctxName);
+ omHome = new File(new File(home, "webapps"), ctxName);
File omUploadTemp = new File(omHome,
OpenmeetingsVariables.UPLOAD_TEMP_DIR);
Parser parser = new PosixParser();
- CommandLine cmdl = null;
try {
cmdl = parser.parse(opts, args);
} catch (ParseException e) {
@@ -271,9 +272,10 @@ public class Admin {
switch(cmd) {
case install:
try {
- String login =
cmdl.getOptionValue("user");
- String email =
cmdl.getOptionValue("email");
- String group =
cmdl.getOptionValue("group");
+ if (cmdl.hasOption("file") &&
(cmdl.hasOption("user") || cmdl.hasOption("email") || cmdl.hasOption("group")))
{
+ System.out.println("Please
specify even 'file' option or 'admin user'.");
+ System.exit(1);
+ }
//TODO commented for now, since not in
use boolean force = cmdl.hasOption("force");
if
(cmdl.hasOption("skip-default-rooms")) {
cfg.createDefaultRooms = "0";
@@ -299,33 +301,7 @@ public class Admin {
if (cmdl.hasOption("email-use-tls")) {
cfg.mailUseTls = "1";
}
- if (login == null || login.length() <
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH) {
- 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 (!MailUtil.matches(email)) {
- throw new
AddressException("Invalid address");
- }
- new InternetAddress(email,
true);
- } catch (AddressException ae) {
- System.out.println("Please
provide non-empty valid email: '" + email + "' is not valid.");
- System.exit(1);
- }
- if (group == null || login.length() <
1) {
- System.out.println("User group
was not provided, or too short, should be at least 1 character long.");
- System.exit(1);
- }
- String pass =
cmdl.getOptionValue("password");
- if (pass == null || pass.length() <
InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH) {
- System.out.print("Please enter
password:");
- pass = new BufferedReader(new
InputStreamReader(System.in)).readLine();
- if (pass == null ||
pass.length() < InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH) {
-
System.out.println("Password was not provided, or too short, should be at least
" + InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH + " character long.");
- System.exit(1);
- }
- }
+ String langPath = new File(omHome,
ImportInitvalues.languageFolderName).getAbsolutePath(); //FIXME need to be
moved to helper
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");
@@ -342,30 +318,18 @@ public class Admin {
,
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);
- String tz = null;
- if (cmdl.hasOption("tz")) {
- tz = cmdl.getOptionValue("tz");
- tz = tzDao.getOmTimeZone(tz) ==
null ? null : tz;
- }
- if (tz == null) {
- System.out.println("Please
enter timezone, Possible timezones are:");
- for (OmTimeZone omTz :
tzDao.getOmTimeZones()) {
-
System.out.println(omTz.getJname());
- }
- System.exit(1);
- }
ImportInitvalues importInit =
ctx.getBean(ImportInitvalues.class);
- importInit.loadAll(new File(omHome,
ImportInitvalues.languageFolderName).getAbsolutePath(), cfg, login, pass,
email, group, tz);
+ if (cmdl.hasOption("file")) {
+ File backup =
checkRestoreFile(file);
+ dropDB(connectionProperties);
+ importInit.loadSystem(langPath,
cfg);
+ restoreOm(ctxName, backup);
+ } else {
+ AdminUserDetails admin =
checkAdminDetails(importInit, langPath);
+ dropDB(connectionProperties);
+ importInit.loadAll(langPath,
cfg, admin.login, admin.pass, admin.email, admin.group, admin.tz);
+ }
File installerFile = new File(new
File(home, ScopeApplicationAdapter.configDirName),
InstallationDocumentHandler.installFileName);
InstallationDocumentHandler.getInstance().createDocument(installerFile.getAbsolutePath(),
1);
@@ -392,19 +356,7 @@ public class Admin {
}
break;
case restore:
- try {
- File backup = new File(file);
- if (!cmdl.hasOption("file") ||
!backup.exists() || !backup.isFile()) {
- System.out.println("File should
be specified, and point the existent zip file");
- usage();
- System.exit(1);
- }
-
- BackupImportController importCtrl =
getApplicationContext(ctxName).getBean(BackupImportController.class);
- importCtrl.performImport(new
FileInputStream(backup), omHome.getAbsolutePath());
- } catch (Exception e) {
- handleError("Restore failed", e);
- }
+ restoreOm(ctxName, checkRestoreFile(file));
break;
case files:
try {
@@ -451,6 +403,95 @@ public class Admin {
System.exit(0);
}
+ private class AdminUserDetails {
+ String login = null;
+ String email = null;
+ String group = null;
+ String pass = null;
+ String tz = null;
+ }
+
+ private AdminUserDetails checkAdminDetails(ImportInitvalues importInit,
String langPath) throws Exception {
+ AdminUserDetails admin = new AdminUserDetails();
+ admin.login = cmdl.getOptionValue("user");
+ admin.email = cmdl.getOptionValue("email");
+ admin.group = cmdl.getOptionValue("group");
+ if (admin.login == null || admin.login.length() <
InstallationConfig.USER_LOGIN_MINIMUM_LENGTH) {
+ 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 (!MailUtil.matches(admin.email)) {
+ throw new AddressException("Invalid address");
+ }
+ new InternetAddress(admin.email, true);
+ } catch (AddressException ae) {
+ System.out.println("Please provide non-empty valid
email: '" + admin.email + "' is not valid.");
+ System.exit(1);
+ }
+ if (admin.group == null || admin.group.length() < 1) {
+ System.out.println("User group was not provided, or too
short, should be at least 1 character long: " + admin.group);
+ System.exit(1);
+ }
+ admin.pass = cmdl.getOptionValue("password");
+ if (checkPassword(admin.pass)) {
+ System.out.print("Please enter password:");
+ admin.pass = new BufferedReader(new
InputStreamReader(System.in)).readLine();
+ if (checkPassword(admin.pass)) {
+ System.out.println("Password was not provided,
or too short, should be at least " +
InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH + " character long.");
+ System.exit(1);
+ }
+ }
+ Map<String, String> tzMap =
ImportHelper.getAllTimeZones(importInit.getTimeZones(langPath));
+ admin.tz = null;
+ if (cmdl.hasOption("tz")) {
+ admin.tz = cmdl.getOptionValue("tz");
+ admin.tz = tzMap.containsKey(admin.tz) ? admin.tz :
null;
+ }
+ if (admin.tz == null) {
+ System.out.println("Please enter timezone, Possible
timezones are:");
+ for (String tzJname : tzMap.keySet()) {
+ System.out.println(tzJname);
+ }
+ System.exit(1);
+ }
+ return admin;
+ }
+
+ private boolean checkPassword(String pass) {
+ return (pass == null || pass.length() <
InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH);
+ }
+
+ private void dropDB(ConnectionProperties props) throws Exception {
+ if(cmdl.hasOption("drop")) {
+ String[] mappingToolArgs = {"-sa", "drop", "-p",
omHome.getAbsolutePath() + "/WEB-INF/classes/META-INF/persistence.xml",
+ "-connectionDriverName",
props.getDriverName(), "-connectionURL", props.getConnectionURL(),
+ "-connectionUserName",
props.getConnectionLogin(), "-connectionPassword", props.getConnectionPass()};
+ MappingTool.main(mappingToolArgs);
+ }
+ }
+
+ private File checkRestoreFile(String file) {
+ File backup = new File(file);
+ if (!cmdl.hasOption("file") || !backup.exists() ||
!backup.isFile()) {
+ System.out.println("File should be specified, and point
the existent zip file");
+ usage();
+ System.exit(1);
+ }
+
+ return backup;
+ }
+
+ private void restoreOm(String ctxName, File backup) {
+ try {
+ BackupImportController importCtrl =
getApplicationContext(ctxName).getBean(BackupImportController.class);
+ importCtrl.performImport(new FileInputStream(backup),
omHome.getAbsolutePath());
+ } catch (Exception e) {
+ handleError("Restore failed", e);
+ }
+ }
+
public static void main(String[] args) {
new Admin().process(args);
}
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/servlet/outputhandler/Install.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/servlet/outputhandler/Install.java?rev=1330188&r1=1330187&r2=1330188&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/servlet/outputhandler/Install.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/servlet/outputhandler/Install.java
Wed Apr 25 10:35:08 2012
@@ -38,6 +38,7 @@ import org.openmeetings.app.installation
import org.openmeetings.app.installation.InstallationConfig;
import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
+import org.openmeetings.utils.ImportHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.context.ApplicationContext;
@@ -117,22 +118,14 @@ public class Install extends VelocityVie
allFonts.put("Verdana", "Verdana");
allFonts.put("Arial", "Arial");
- LinkedHashMap<String, String> allTimeZones = new
LinkedHashMap<String, String>();
List<OmTimeZone> omTimeZoneList = getImportInitvalues()
.getTimeZones(filePath);
- log.debug("omTimeZoneList :: " + omTimeZoneList.size());
- for (OmTimeZone omTimeZone : omTimeZoneList) {
- String labelName = omTimeZone.getJname() + " ("
- + omTimeZone.getLabel() + ")";
- log.debug("labelName :: " + labelName);
- allTimeZones.put(omTimeZone.getJname(), labelName);
- }
Template tpl = super.getTemplate("install_step1_"
+ lang + ".vm");
ctx.put("allLanguages", allLanguages);
ctx.put("allFonts", allFonts);
- ctx.put("allTimeZones", allTimeZones);
+ ctx.put("allTimeZones",
ImportHelper.getAllTimeZones(omTimeZoneList));
StringWriter writer = new StringWriter();
tpl.merge(ctx, writer);
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/utils/ImportHelper.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/utils/ImportHelper.java?rev=1330188&r1=1330187&r2=1330188&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/utils/ImportHelper.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/utils/ImportHelper.java
Wed Apr 25 10:35:08 2012
@@ -18,9 +18,13 @@
*/
package org.openmeetings.utils;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
import org.openmeetings.app.OpenmeetingsVariables;
import org.openmeetings.app.data.basic.Configurationmanagement;
-import org.openmeetings.app.persistence.beans.basic.Configuration;
+import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -31,22 +35,27 @@ public class ImportHelper {
public static final int getMaxUploadSize(
Configurationmanagement cfgManagement) {
- return getMaxUploadSize(cfgManagement, 3L);
- }
-
- public static final int getMaxUploadSize(
- Configurationmanagement cfgManagement, Long userLevel) {
- Configuration cfg = cfgManagement.getConfKey(userLevel,
- "DEFAULT_MAX_UPLOAD_SIZE");
int result = DEFAULT_MAX_UPLOAD_SIZE;
- if (cfg != null) {
- String val = cfg.getConf_value();
- try {
- result = (int) Math.min(Long.parseLong(val),
Integer.MAX_VALUE);
- } catch (Exception e) {
- log.error("Invalid value saved for
maxUploadSize: " + val, e);
- }
+ String maxSize =
cfgManagement.getConfValue("DEFAULT_MAX_UPLOAD_SIZE", String.class, "" +
result);
+ try {
+ result = (int) Math.min(Long.parseLong(maxSize),
Integer.MAX_VALUE);
+ } catch (Exception e) {
+ log.error("Invalid value saved for maxUploadSize: " +
maxSize, e);
+ }
+ return result;
+ }
+
+ public static Map<String, String> getAllTimeZones(List<OmTimeZone>
tzList) {
+ Map<String, String> result = new LinkedHashMap<String,
String>();
+
+ log.debug("omTimeZoneList :: " + tzList.size());
+ for (OmTimeZone omTimeZone : tzList) {
+ String labelName = omTimeZone.getJname() + " ("
+ + omTimeZone.getLabel() + ")";
+ log.debug("labelName :: " + labelName);
+ result.put(omTimeZone.getJname(), labelName);
}
+
return result;
}
}