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;
        }
 }


Reply via email to