Author: solomax
Date: Wed May 22 17:40:44 2013
New Revision: 1485305

URL: http://svn.apache.org/r1485305
Log:
[OPENMEETINGS-639] installer works as expected

Added:
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html
      - copied unchanged from r1485172, 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
      - copied, changed from r1485172, 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.java
Removed:
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.java
Modified:
    openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css
    openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/cli/Admin.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentCategoryDao.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/AbstractOpenmeetingsSpringTest.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/admin/users/UserForm.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/GeneralUserForm.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/NotInitedPage.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.java

Modified: openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css 
(original)
+++ openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css Wed 
May 22 17:40:44 2013
@@ -580,7 +580,7 @@ div.tableWrapper {
        bottom: -20px;
        left: 0px;
        opacity: .7;
-       width: 100%;
+       width: 130px;
        padding: 5px;
        z-index: 50;
        font-size: 14px;
@@ -693,3 +693,18 @@ div.tableWrapper {
        background-image: url(images/world_link.png);
        background-repeat: no-repeat;
 }
+.error {
+       color: red;
+}
+.message {
+    margin: 50px;
+    border: 1px solid black;
+    padding: 15px;
+    -webkit-border-radius: 8px;
+    border-radius: 8px;
+}
+.ui-progressbar div { 
+       text-align: center;
+       padding-top: 7px;
+       font-weight: bold;
+}
\ No newline at end of file

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/cli/Admin.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/cli/Admin.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/cli/Admin.java 
(original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/cli/Admin.java 
Wed May 22 17:40:44 2013
@@ -265,11 +265,11 @@ public class Admin {
                                                importInit.loadSystem(cfg, 
force); 
                                                restoreOm(ctxName, backup);
                                        } else {
-                                               AdminUserDetails admin = 
checkAdminDetails(ctxName);
+                                               checkAdminDetails(ctxName);
                                                dropDB(connectionProperties);
                                                
                                                ImportInitvalues importInit = 
getApplicationContext(ctxName).getBean(ImportInitvalues.class);
-                                               importInit.loadAll(cfg, 
admin.login, admin.pass, admin.email, admin.group, admin.tz, force);
+                                               importInit.loadAll(cfg, force);
                                        }                                       
                                        
                                        
InstallationDocumentHandler.createDocument(3);
@@ -517,55 +517,46 @@ public class Admin {
                return result;
        }
        
-       private class AdminUserDetails {
-               String login = null;
-               String email = null;
-               String group = null;
-               String pass = null;
-               String tz = null;
-       }
-       
-       private AdminUserDetails checkAdminDetails(String ctxName) 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) {
+       private void checkAdminDetails(String ctxName) throws Exception {
+               cfg.username = cmdl.getOptionValue("user");
+               cfg.email = cmdl.getOptionValue("email");
+               cfg.group = cmdl.getOptionValue("group");
+               if (cfg.username == null || cfg.username.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)) {
+                       if (!MailUtil.matches(cfg.email)) {
                            throw new AddressException("Invalid address");
                        }
-                       new InternetAddress(admin.email, true);
+                       new InternetAddress(cfg.email, true);
                } catch (AddressException ae) {
-                       System.out.println("Please provide non-empty valid 
email: '" + admin.email + "' is not valid.");
+                       System.out.println("Please provide non-empty valid 
email: '" + cfg.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);
+               if (cfg.group == null || cfg.group.length() < 1) {
+                       System.out.println("User group was not provided, or too 
short, should be at least 1 character long: " + cfg.group);
                        System.exit(1);
                }
-               admin.pass = cmdl.getOptionValue("password");
+               cfg.password = cmdl.getOptionValue("password");
                ConfigurationDao cfgDao = 
getApplicationContext(ctxName).getBean(ConfigurationDao.class);
-               if (invalidPassword(admin.pass, cfgDao)) {
-                       System.out.print("Please enter password for the user '" 
+ admin.login + "':");
-                       admin.pass = new BufferedReader(new 
InputStreamReader(System.in)).readLine();
-                       if (invalidPassword(admin.pass, cfgDao)) {
+               if (invalidPassword(cfg.password, cfgDao)) {
+                       System.out.print("Please enter password for the user '" 
+ cfg.username + "':");
+                       cfg.password = new BufferedReader(new 
InputStreamReader(System.in)).readLine();
+                       if (invalidPassword(cfg.password, cfgDao)) {
                                System.out.println("Password was not provided, 
or too short, should be at least " + getMinPasswdLength(cfgDao) + " character 
long.");
                                System.exit(1);
                        }
                }
                ImportInitvalues importInit = 
getApplicationContext(ctxName).getBean(ImportInitvalues.class);
                Map<String, String> tzMap = 
ImportHelper.getAllTimeZones(importInit.getTimeZones());
-               admin.tz = null;
+               cfg.ical_timeZone = null;
                if (cmdl.hasOption("tz")) {
-                       admin.tz = cmdl.getOptionValue("tz");
-                       admin.tz = tzMap.containsKey(admin.tz) ? admin.tz : 
null;
+                       cfg.ical_timeZone = cmdl.getOptionValue("tz");
+                       cfg.ical_timeZone = 
tzMap.containsKey(cfg.ical_timeZone) ? cfg.ical_timeZone : null;
                }
-               if (admin.tz == null) {
+               if (cfg.ical_timeZone == null) {
                        System.out.println("Please enter timezone, Possible 
timezones are:");
                        
                        for (String tzIcal : tzMap.keySet()) {
@@ -573,7 +564,6 @@ public class Admin {
                        }
                        System.exit(1);
                }
-               return admin;
        }
        
        public static void dropDB() throws Exception {

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentCategoryDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentCategoryDao.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentCategoryDao.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentCategoryDao.java
 Wed May 22 17:40:44 2013
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.data.calendar.daos;
 
+import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
+
 import java.util.Date;
 import java.util.List;
 
@@ -26,8 +28,6 @@ import javax.persistence.NoResultExcepti
 import javax.persistence.PersistenceContext;
 import javax.persistence.TypedQuery;
 
-import org.apache.openmeetings.OpenmeetingsVariables;
-import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
 import org.apache.openmeetings.data.user.dao.UsersDao;
 import org.apache.openmeetings.persistence.beans.calendar.AppointmentCategory;
 import org.red5.logging.Red5LoggerFactory;
@@ -37,10 +37,7 @@ import org.springframework.transaction.a
 
 @Transactional
 public class AppointmentCategoryDao {
-
-       private static final Logger log = Red5LoggerFactory.getLogger(
-                       ConfigurationDao.class,
-                       OpenmeetingsVariables.webAppRootKey);
+       private static final Logger log = 
Red5LoggerFactory.getLogger(AppointmentCategoryDao.class, webAppRootKey);
 
        @PersistenceContext
        private EntityManager em;

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/installation/ImportInitvalues.java
 Wed May 22 17:40:44 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.installation;
 
+import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
 import static 
org.apache.openmeetings.installation.InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH;
 import static 
org.apache.openmeetings.persistence.beans.basic.Configuration.CRYPT_KEY;
 import static 
org.apache.openmeetings.persistence.beans.basic.Configuration.DASHBOARD_SHOW_MYROOMS_KEY;
@@ -40,7 +41,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.openmeetings.OpenmeetingsVariables;
 import org.apache.openmeetings.data.basic.FieldLanguageDao;
 import org.apache.openmeetings.data.basic.FieldManager;
 import org.apache.openmeetings.data.basic.NaviBuilder;
@@ -71,9 +71,7 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class ImportInitvalues {
-
-       private static final Logger log = Red5LoggerFactory.getLogger(
-                       ImportInitvalues.class, 
OpenmeetingsVariables.webAppRootKey);
+       private static final Logger log = 
Red5LoggerFactory.getLogger(ImportInitvalues.class, webAppRootKey);
 
        @Autowired
        private ConfigurationDao configurationDao;
@@ -107,15 +105,21 @@ public class ImportInitvalues {
        private PollManager pollManager;
        @Autowired
        private SipDao sipDao;
+       private int progress = 0;
 
-       public void loadMainMenu() {
-
+       public int getProgress() {
+               return progress;
+       }
+       
+       public void loadUserLevels() {
                userManager.addUserLevel("User", 1);
                userManager.addUserLevel("Moderator", 2);
                userManager.addUserLevel("Admin", 3);
                userManager.addUserLevel("Web-Service (only access via SOAP)", 
4);
                log.debug("UserLevels ADDED");
-
+       }
+       
+       public void loadMainMenu() {
                /*
                 * ######################## Dashboard Menu Points
                 */
@@ -215,14 +219,15 @@ public class ImportInitvalues {
                navimanagement.addMainStructure("adminModuleServers", null, 22, 
1498,
                                true, false, 3, "Administration of Servers", 6, 
false, 1499L);
                log.debug("MainMenu ADDED");
-
+       }
+       
+       public void loadErrorTypes() {
                errorManagement.addErrorType(new Long(1), new Long(322));
                errorManagement.addErrorType(new Long(2), new Long(323));
                log.debug("Error types ADDED");
        }
 
        public void loadErrorMappingsFromXML() throws Exception {
-
                SAXReader reader = new SAXReader();
                Document document = reader.read(new File(
                                OmFileHelper.getLanguagesDir(), 
OmFileHelper.nameOfErrorFile));
@@ -500,7 +505,7 @@ public class ImportInitvalues {
                                                "Area to be shown to the user 
after login. Possible values are: "
                                                                + 
"dashboard.rooms, dashboard.chat, calendar, rooms.public, rooms.private, 
rooms.user");
 
-               log.debug("Configuration ADDED");
+               log.debug("Configurations ADDED");
        }
 
        public void loadRoomTypes() {
@@ -680,38 +685,30 @@ public class ImportInitvalues {
                }
        }
 
-       public void loadInitUserAndOrganisation(String username, String 
userpass,
-                       String email, String defaultOrganisationName, String 
ical_timeZone,
-                       String configdefaultLang) {
-               // Add user
-               try {
-
-                       Long default_lang_id = 
Long.parseLong(configdefaultLang);
-                       if (default_lang_id == null)
-                               default_lang_id = 1L;
-
-                       // Add default group
-                       Long organisation_id = 
organisationManager.addOrganisation(
-                                       defaultOrganisationName, 1);
-
-                       // BaseUrl as param is empty as we do not send an EMAIL 
here
-                       Long user_id = userManager.registerUserInit(new 
Long(3), 3, 1,
-                                       1, username, userpass, "lastname", 
"firstname", email,
-                                       new java.util.Date(), "street", "no", 
"fax", "zip", 1,
-                                       "town", default_lang_id, false,
-                                       Arrays.asList(organisation_id), 
"phone", false, "", false,
-                                       
omTimeZoneDaoImpl.getOmTimeZoneByIcal(ical_timeZone),
-                                       false, "", "", false, true);
-
-                       log.debug("Installation - User Added user-Id " + 
user_id);
-
-                       if (user_id < 0) {
-                               throw new Exception(
-                                               "Could not add user user 
returns a negative error message: "
-                                                               + user_id);
-                       }
-               } catch (Exception e) {
-                       log.error("[loadInitUserAndOrganisation] ", e);
+       public void loadInitUserAndOrganisation(InstallationConfig cfg) throws 
Exception {
+               Long default_lang_id = Long.parseLong(cfg.defaultLangId);
+               if (default_lang_id == null) {
+                       default_lang_id = 1L;
+               }
+
+               // Add default group
+               Long organisation_id = 
organisationManager.addOrganisation(cfg.group, 1);
+
+               // BaseUrl as param is empty as we do not send an EMAIL here
+               Long user_id = userManager.registerUserInit(new Long(3), 3, 1,
+                               1, cfg.username, cfg.password, "lastname", 
"firstname", cfg.email,
+                               new java.util.Date(), "street", "no", "fax", 
"zip", 1,
+                               "town", default_lang_id, false,
+                               Arrays.asList(organisation_id), "phone", false, 
"", false,
+                               
omTimeZoneDaoImpl.getOmTimeZoneByIcal(cfg.ical_timeZone),
+                               false, "", "", false, true);
+
+               log.debug("Installation - User Added user-Id " + user_id);
+
+               if (user_id < 0) {
+                       throw new Exception(
+                                       "Could not add user user returns a 
negative error message: "
+                                                       + user_id);
                }
        }
 
@@ -762,7 +759,7 @@ public class ImportInitvalues {
                log.debug("TimeZones ADDED");
        }
 
-       public List<OmTimeZone> getTimeZones() throws Exception {
+       public static List<OmTimeZone> getTimeZones() throws Exception {
                log.debug(":: getTimeZones ::");
 
                List<OmTimeZone> omTimeZones = new LinkedList<OmTimeZone>();
@@ -802,7 +799,7 @@ public class ImportInitvalues {
         * @return
         * @throws Exception
         */
-       public LinkedHashMap<Integer, LinkedHashMap<String, Object>> 
getLanguageFiles()
+       public static LinkedHashMap<Integer, LinkedHashMap<String, Object>> 
getLanguageFiles()
                        throws Exception {
 
                LinkedHashMap<Integer, LinkedHashMap<String, Object>> languages 
= new LinkedHashMap<Integer, LinkedHashMap<String, Object>>();
@@ -843,14 +840,8 @@ public class ImportInitvalues {
        public void loadInitAppointmentCategories() {
                log.debug("ImportInitValues.loadInitAppointmentCategories");
 
-               try {
-                       appointmentCategoryDaoImpl.addAppointmentCategory(new 
Long(-1),
-                                       "default", "default");
-               } catch (Exception e) {
-                       log.error("Could not create AppointMentcategories");
-                       return;
-               }
-
+               appointmentCategoryDaoImpl.addAppointmentCategory(new Long(-1),
+                               "default", "default");
        }
 
        // 
------------------------------------------------------------------------------
@@ -860,21 +851,14 @@ public class ImportInitvalues {
         */
        // 
------------------------------------------------------------------------------
        public void loadInitAppointmentReminderTypes() {
-
                log.debug("ImportInitValues.loadInitAppointmentReminderTypes");
 
-               try {
-                       
appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
-                                       "do not send notification");
-                       
appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
-                                       "simple email");
-                       
appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
-                                       "iCal email");
-
-               } catch (Exception e) {
-                       log.error("Could not create ReminderType");
-                       return;
-               }
+               appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
+                               "do not send notification");
+               appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
+                               "simple email");
+               appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
+                               "iCal email");
        }
 
        public void loadLanguagesFile(int langId) throws Exception {
@@ -987,18 +971,6 @@ public class ImportInitvalues {
         * Loading initial Language from xml Files into database
         */
        // 
------------------------------------------------------------------------------
-       public void loadInitLanguages() throws Exception {
-               loadCountriesFiles();
-               loadTimeZoneFiles();
-               loadLanguagesFiles();
-       }
-
-       // 
------------------------------------------------------------------------------
-
-       /**
-        * Loading initial Language from xml Files into database
-        */
-       // 
------------------------------------------------------------------------------
        public void loadPollTypes() {
                pollManager.addPollType(26L, false);
                pollManager.addPollType(27L, true);
@@ -1006,40 +978,56 @@ public class ImportInitvalues {
 
        // 
------------------------------------------------------------------------------
 
-       public void loadSystem(InstallationConfig cfg, boolean force)
-                       throws Exception {
+       public void loadSystem(InstallationConfig cfg, boolean force) throws 
Exception {
                // FIXME dummy check if installation was performed before
-               if (!force && usersDao.getAllUsers().size() > 0) {
+               if (!force && usersDao.count() > 0) {
                        log.debug("System contains users, no need to install 
data one more time.");
                }
                sipDao.delete();
+               progress = 6;
+               loadUserLevels();
+               progress = 13;
                loadMainMenu();
+               progress = 19;
+               loadErrorTypes();
+               progress = 25;
                loadErrorMappingsFromXML();
-               loadInitLanguages();
+               progress = 31;
+               loadCountriesFiles();
+               progress = 38;
+               loadTimeZoneFiles();
+               progress = 44;
+               loadLanguagesFiles();
+               progress = 50;
                loadSalutations();
+               progress = 56;
                // AppointMent Categories
                loadInitAppointmentCategories();
+               progress = 63;
                // Appointment Reminder types
                loadInitAppointmentReminderTypes();
+               progress = 69;
                // Appointment poll types
                loadPollTypes();
+               progress = 75;
                loadRoomTypes();
+               progress = 81;
 
                loadConfiguration(cfg);
+               progress = 88;
        }
 
-       public void loadAll(InstallationConfig cfg, String username,
-                       String userpass, String useremail, String groupame,
-                       String timeZone, boolean force) throws Exception {
+       public void loadAll(InstallationConfig cfg, boolean force) throws 
Exception {
                // FIXME dummy check if installation was performed before
-               if (!force && usersDao.getAllUsers().size() > 0) {
+               if (!force && usersDao.count() > 0) {
                        log.debug("System contains users, no need to install 
data one more time.");
                        return;
                }
                loadSystem(cfg, force);
-               loadInitUserAndOrganisation(username, userpass, useremail, 
groupame,
-                               timeZone, cfg.defaultLangId);
+               loadInitUserAndOrganisation(cfg);
+               progress = 94;
 
                loadDefaultRooms("1".equals(cfg.createDefaultRooms));
+               progress = 100;
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/AbstractOpenmeetingsSpringTest.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/AbstractOpenmeetingsSpringTest.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/AbstractOpenmeetingsSpringTest.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/AbstractOpenmeetingsSpringTest.java
 Wed May 22 17:40:44 2013
@@ -135,7 +135,12 @@ public abstract class AbstractOpenmeetin
        }
        
        private void makeDefaultScheme() throws Exception {
-               importInitvalues.loadAll(new InstallationConfig(), username, 
userpass,
-                               useremail, orgname, timeZone, false);
+               InstallationConfig cfg = new InstallationConfig();
+               cfg.username = username;
+               cfg.password = userpass;
+               cfg.email = useremail;
+               cfg.group = orgname;
+               cfg.ical_timeZone = timeZone;
+               importInitvalues.loadAll(cfg, false);
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/admin/users/UserForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/admin/users/UserForm.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/admin/users/UserForm.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/admin/users/UserForm.java
 Wed May 22 17:40:44 2013
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.admi
 import static org.apache.openmeetings.utils.UserHelper.getMinLoginLength;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static 
org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
 import java.util.Arrays;
 
@@ -43,7 +44,6 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.util.time.Duration;
-import org.apache.wicket.validation.validator.StringValidator;
 
 /**
  * CRUD operations in form for {@link User}
@@ -132,7 +132,7 @@ public class UserForm extends AdminBaseF
                ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
                login = new RequiredTextField<String>("login");
                // login.setLabel(new Model<String>("testname"));
-               
add(login.add(StringValidator.minimumLength(getMinLoginLength(cfgDao))));
+               add(login.add(minimumLength(getMinLoginLength(cfgDao))));
 
                add(generalForm = new GeneralUserForm("general", getModel(), 
true));
 

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/Application.java
 Wed May 22 17:40:44 2013
@@ -148,15 +148,18 @@ public class Application extends Authent
                return get().dashboardContext;
        }
        
-       private static <T> T _getBean(Class<T> clazz) {
-               return 
getWebApplicationContext(get().getServletContext()).getBean(clazz);
+       //TODO need more safe way FIXME
+       public <T> T _getBean(Class<T> clazz) {
+               return 
getWebApplicationContext(getServletContext()).getBean(clazz);
        }
        
        public static boolean isInstalled() {
                boolean result = isInstalled;
                if (!isInstalled) {
                        if (ScopeApplicationAdapter.initComplete) {
-                               result = _getBean(UsersDao.class).count() > 0 
&& _getBean(FieldLanguagesValuesDao.class).count() > 0;
+                               //TODO can also check crypt class here
+                               result = get()._getBean(UsersDao.class).count() 
> 0
+                                               && 
get()._getBean(FieldLanguagesValuesDao.class).count() > 0;
                        }
                }
                return result;
@@ -167,7 +170,7 @@ public class Application extends Authent
                        if (!isInstalled()) {
                                throw new 
RestartResponseException(InstallWizardPage.class);
                        }
-                       return _getBean(clazz);
+                       return get()._getBean(clazz);
                } else {
                        throw new RestartResponseException(NotInitedPage.class);
                }

Added: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.html?rev=1485305&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.html
 (added)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.html
 Wed May 22 17:40:44 2013
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+         
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org";>
+<wicket:panel>
+       <div class="message error">
+               <h3 wicket:id="msg"></h3>
+               <pre wicket:id="err"></pre>
+       </div>
+</wicket:panel>
+</html>

Added: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.java?rev=1485305&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/ErrorMessagePanel.java
 Wed May 22 17:40:44 2013
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.PrintWriter;
+
+import org.apache.commons.io.output.StringBuilderWriter;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ErrorMessagePanel extends Panel {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(ErrorMessagePanel.class, webAppRootKey);
+       private static final long serialVersionUID = 1L;
+
+       public ErrorMessagePanel(String id, String msg, Throwable err) {
+               super(id);
+               
+               log.error(msg, err);
+               add(new Label("msg", msg));
+               StringBuilderWriter sw = new StringBuilderWriter();
+               err.printStackTrace(new PrintWriter(sw));
+               add(new Label("err", sw.toString()));
+       }
+}

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/GeneralUserForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/GeneralUserForm.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/GeneralUserForm.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/common/GeneralUserForm.java
 Wed May 22 17:40:44 2013
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.comm
 import static org.apache.openmeetings.utils.UserHelper.getMinPasswdLength;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static 
org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -59,7 +60,6 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.validation.validator.StringValidator;
 
 public class GeneralUserForm extends Form<User> {
        private static final long serialVersionUID = 5360667099083510234L;
@@ -74,7 +74,7 @@ public class GeneralUserForm extends For
                //TODO should throw exception if non admin User edit somebody 
else (or make all fields read-only)
                add(passwordField = new PasswordTextField("password", new 
Model<String>()));
                ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-               
passwordField.setRequired(false).add(StringValidator.minimumLength(getMinPasswdLength(cfgDao)));
+               
passwordField.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
 
                SalutationDao salutDao = getBean(SalutationDao.class);
                FieldLanguageDao langDao = getBean(FieldLanguageDao.class);

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.html
 Wed May 22 17:40:44 2013
@@ -23,6 +23,7 @@
                <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
                <link rel="shortcut icon" href="favicon.ico" 
type="image/x-icon"/>
                <title wicket:id="pageTitle">[title]</title>
+               <link media="screen" type="text/css" rel="stylesheet" 
href="css/jquery-ui-1.10.2.custom.min.css"/>
                <link rel="stylesheet" type="text/css" 
href="css/openmeetings-forms.css"/>
                <link media="screen" type="text/css" rel="stylesheet" 
href="css/theme.css"/>
        </head>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.html
 Wed May 22 17:40:44 2013
@@ -20,7 +20,6 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
        <wicket:head>
-               <link media="screen" type="text/css" rel="stylesheet" 
href="css/jquery-ui-1.10.2.custom.min.css"/>
                <script type="text/javascript">
                        function showBusyIndicator() {
                                $('#busy_indicator').show();

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/NotInitedPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/NotInitedPage.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/NotInitedPage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/NotInitedPage.html
 Wed May 22 17:40:44 2013
@@ -21,10 +21,12 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:extend>
        <!-- FIXME localized versions of this file need to be created -->
-       <b>OpenMeetings - Loading ...</b><br />
-       The server is not yet completely initialized. Please try again in a 
couple of seconds.<br/>
-       If this message persists for several minutes contact your 
Sys-Administration.<br/>
-       If that message stays forever you should check the logs located in 
-       <pre>openmeetings_install_dir/log</pre> folder, probably your database 
user/pwd/host is wrong!
+       <div class="message">
+               <b>OpenMeetings - Loading ...</b><br />
+               The server is not yet completely initialized. Please try again 
in a couple of seconds.<br/>
+               If this message persists for several minutes contact your 
Sys-Administration.<br/>
+               If that message stays forever you should check the logs located 
in 
+               <pre>openmeetings_install_dir/log</pre> folder, probably your 
database user/pwd/host is wrong!
+       </div>
 </wicket:extend>
 </html>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 Wed May 22 17:40:44 2013
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.page
 import static org.apache.openmeetings.utils.UserHelper.getMinLoginLength;
 import static org.apache.openmeetings.utils.UserHelper.getMinPasswdLength;
 import static org.apache.openmeetings.web.app.Application.getBean;
+import static 
org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
 import java.util.Arrays;
 import java.util.List;
@@ -49,7 +50,6 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.validation.validator.StringValidator;
 
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
@@ -131,9 +131,9 @@ public class RegisterDialog extends Abst
                        add(new RequiredTextField<String>("firstName", new 
PropertyModel<String>(RegisterDialog.this, "firstName")));
                        add(new RequiredTextField<String>("lastName", new 
PropertyModel<String>(RegisterDialog.this, "lastName")));
                        add(loginField = new RequiredTextField<String>("login", 
new PropertyModel<String>(RegisterDialog.this, "login")));
-                       
loginField.add(StringValidator.minimumLength(getMinLoginLength(cfgDao)));
+                       
loginField.add(minimumLength(getMinLoginLength(cfgDao)));
                        add(passwordField = new PasswordTextField("password", 
new PropertyModel<String>(RegisterDialog.this, "password")));
-                       
passwordField.setResetPassword(true).add(StringValidator.minimumLength(getMinPasswdLength(cfgDao)));
+                       
passwordField.setResetPassword(true).add(minimumLength(getMinPasswdLength(cfgDao)));
                        add(confirmPassword = new 
PasswordTextField("confirmPassword", new 
Model<String>()).setResetPassword(true));
                        add(emailField = new RequiredTextField<String>("email", 
new PropertyModel<String>(RegisterDialog.this, "email")));
                        
emailField.add(RfcCompliantEmailAddressValidator.getInstance());

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.html
 Wed May 22 17:40:44 2013
@@ -20,7 +20,6 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
        <wicket:head>
-               <link media="screen" type="text/css" rel="stylesheet" 
href="css/jquery-ui-1.10.2.custom.min.css"/>
                <style>
                        input:not([type='checkbox']):not([type='radio']), 
select {
                                width: 170px;

Copied: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
 (from r1485172, 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java?p2=openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java&p1=openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.java&r1=1485172&r2=1485305&rev=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongradulationsPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
 Wed May 22 17:40:44 2013
@@ -22,10 +22,10 @@ import org.apache.openmeetings.web.app.A
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.Panel;
 
-public class CongradulationsPanel extends Panel {
+public class CongratulationsPanel extends Panel {
        private static final long serialVersionUID = 1L;
 
-       public CongradulationsPanel(String id) {
+       public CongratulationsPanel(String id) {
                super(id);
                
                add(new Link<Void>("url") {

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard%24InstallStep.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
 Wed May 22 17:40:44 2013
@@ -20,6 +20,10 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
-       Install
+       <p wicket:id="desc">Please click "Finish" button to start 
installation!</p>
+       <div wicket:id="container" style="margin: 20px;">
+               <div wicket:id="progress"><!-- div><span 
wicket:id="value"></span>%</div--></div>
+               <div wicket:id="status"></div>
+       </div>
 </wicket:panel>
 </html>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizard.java
 Wed May 22 17:40:44 2013
@@ -20,8 +20,7 @@ package org.apache.openmeetings.web.page
 
 import static 
org.apache.openmeetings.installation.InstallationConfig.USER_LOGIN_MINIMUM_LENGTH;
 import static 
org.apache.openmeetings.installation.InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.wicket.validation.validator.RangeValidator.minimum;
+import static 
org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -32,7 +31,10 @@ import java.util.List;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
 import org.apache.openmeetings.persistence.beans.basic.OmTimeZone;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ErrorMessagePanel;
 import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
@@ -41,6 +43,7 @@ import org.apache.wicket.extensions.wiza
 import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardModel;
 import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardStep;
 import org.apache.wicket.extensions.wizard.dynamic.IDynamicWizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -55,6 +58,9 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.util.time.Duration;
+
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
 
 //TODO maybe JQ wizard should be used
 public class InstallWizard extends Wizard {
@@ -68,7 +74,8 @@ public class InstallWizard extends Wizar
        private final IDynamicWizardStep paramsStep2;
        private final IDynamicWizardStep paramsStep3;
        private final IDynamicWizardStep paramsStep4;
-       private final IDynamicWizardStep installStep;
+       private final InstallStep installStep;
+       private Throwable th = null;
        
        //onInit, applyState
        public InstallWizard(String id) throws Exception {
@@ -92,7 +99,7 @@ public class InstallWizard extends Wizar
        
        @Override
        protected Component newButtonBar(String id) {
-               Panel bBar = (Panel)super.newButtonBar(id);
+               final Panel bBar = (Panel)super.newButtonBar(id);
                AjaxButton finish = new AjaxButton("finish", new 
ResourceModel("org.apache.wicket.extensions.wizard.finish")) {
                        private static final long serialVersionUID = 1L;
 
@@ -103,27 +110,31 @@ public class InstallWizard extends Wizar
                        
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               // TODO Auto-generated method stub
-                               super.onSubmit(target, form);
+                               installStep.startInstallation(target);
+                               target.add(bBar.setEnabled(false));
                        }
                };
-               return bBar.replace(finish);
+               return bBar.replace(finish).setOutputMarkupId(true);
        }
        
-       @Override
-       public void onFinish() {
-               super.onFinish();
+       private abstract class BaseStep extends DynamicWizardStep {
+               private static final long serialVersionUID = 1L;
+
+               public BaseStep(IDynamicWizardStep prev) {
+                       super(prev);
+                       //TODO localize
+                       setTitleModel(Model.of(cfg.appName + " - 
Installation"));
+            setSummaryModel(Model.of(""));
+               }
        }
        
-       private final class WelcomeStep extends DynamicWizardStep {
+       private final class WelcomeStep extends BaseStep {
                private static final long serialVersionUID = 1L;
 
                public WelcomeStep() {
                        super(null);
                        //TODO localize
                        //TODO add check for DB connection
-                       setTitleModel(Model.of(cfg.appName + " - 
Installation"));
-            setSummaryModel(Model.of(""));
             add(new Label("app", cfg.appName));
                }
 
@@ -136,16 +147,14 @@ public class InstallWizard extends Wizar
                }
        }
 
-       private final class ParamsStep1 extends DynamicWizardStep {
+       private final class ParamsStep1 extends BaseStep {
                private static final long serialVersionUID = 1L;
 
                public ParamsStep1() throws Exception {
                        super(welcomeStep);
                        //TODO localize
-                       setTitleModel(Model.of(cfg.appName + " - 
Installation"));
-            setSummaryModel(Model.of(""));
-            add(new 
RequiredTextField<String>("cfg.username").add(minimum(USER_LOGIN_MINIMUM_LENGTH)));
-            add(new 
PasswordTextField("cfg.password").add(minimum(USER_PASSWORD_MINIMUM_LENGTH)));
+            add(new 
RequiredTextField<String>("cfg.username").add(minimumLength(USER_LOGIN_MINIMUM_LENGTH)));
+            add(new 
PasswordTextField("cfg.password").add(minimumLength(USER_PASSWORD_MINIMUM_LENGTH)));
             add(new 
RequiredTextField<String>("cfg.email").add(RfcCompliantEmailAddressValidator.getInstance()));
             add(new TzDropDown("ical_timeZone"));
             add(new RequiredTextField<String>("cfg.group"));
@@ -170,15 +179,13 @@ public class InstallWizard extends Wizar
                }
        }
        
-       private final class ParamsStep2 extends DynamicWizardStep {
+       private final class ParamsStep2 extends BaseStep {
                private static final long serialVersionUID = 1L;
 
                public ParamsStep2() throws Exception {
                        super(paramsStep1);
                        //TODO localize
                        //TODO validation
-                       setTitleModel(Model.of(cfg.appName + " - 
Installation"));
-            setSummaryModel(Model.of(""));
             add(new YesNoDropDown("allowFrontendRegister"));
             add(new YesNoDropDown("sendEmailAtRegister"));
             add(new YesNoDropDown("sendEmailWithVerficationCode"));
@@ -214,7 +221,7 @@ public class InstallWizard extends Wizar
                }
        }
        
-       private final class ParamsStep3 extends DynamicWizardStep {
+       private final class ParamsStep3 extends BaseStep {
                private static final long serialVersionUID = 1L;
 
                public ParamsStep3() {
@@ -249,7 +256,7 @@ public class InstallWizard extends Wizar
                }
        }
        
-       private final class ParamsStep4 extends DynamicWizardStep {
+       private final class ParamsStep4 extends BaseStep {
                private static final long serialVersionUID = 1L;
 
                public ParamsStep4() {
@@ -281,12 +288,73 @@ public class InstallWizard extends Wizar
                }
 }
        
-       private final class InstallStep extends DynamicWizardStep {
+       private final class InstallStep extends BaseStep {
                private static final long serialVersionUID = 1L;
-
+               private final CongratulationsPanel congrat;
+               private WebMarkupContainer container = new 
WebMarkupContainer("container");
+               private AbstractAjaxTimerBehavior timer;
+               private ProgressBar progressBar;
+               private WebMarkupContainer desc = new 
WebMarkupContainer("desc");
+               private Label value;
+               private boolean started = false;
+               
+               public void startInstallation(AjaxRequestTarget target) {
+                       started = true;
+                       timer.restart(target);
+                       new Thread(new 
InstallProcess(Application.get()._getBean(ImportInitvalues.class))
+                               , "Openmeetings - Installation").start(); 
//TODO remove hardcoded
+                       //progressBar.setVisible(true);
+                       target.add(container);
+               }
+               
                public InstallStep() {
                        super(paramsStep4);
                        
+                       add(desc.setOutputMarkupId(true));
+                       // Timer //
+                       container.add(timer = new 
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onTimer(AjaxRequestTarget 
target) {
+                                       if (!started) {
+                                               timer.stop(target);
+                                               return;
+                                       }
+                                       if (th != null) {
+                                               timer.stop(target);
+                                               //TODO change text, localize
+                                               progressBar.setVisible(false);
+                                               
target.add(container.replace(new ErrorMessagePanel("status", "Installation is 
failed", th))
+                                                       , desc.setVisible(false)
+                                                       );
+                                       } else {
+                                               
progressBar.setModelObject(Application.get()._getBean(ImportInitvalues.class).getProgress());
+                                               progressBar.respond(target);
+                                               //TODO uncomment later 
target.add(value);
+                                               //TODO add current step result 
as info
+                                       }
+                               }
+                       });
+                       container.add(progressBar = new ProgressBar("progress", 
new Model<Integer>(0)) {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onComplete(AjaxRequestTarget 
target) {
+                                       timer.stop(target);
+                                       progressBar.setVisible(false);
+                                       congrat.setVisible(true);
+                                       target.add(container, 
desc.setVisible(false));
+                               }
+                       });
+                       //TODO uncomment later progressBar.add(value = new 
Label("value", progressBar.getModel()));
+                       //TODO uncomment later value.setOutputMarkupId(true);
+                       //progressBar.setVisible(false);
+                       
+                       container.add(congrat = new 
CongratulationsPanel("status"));
+                       congrat.setVisible(false);
+                       
+                       add(container.setOutputMarkupId(true));
                }
 
                public boolean isLastStep() {
@@ -298,6 +366,23 @@ public class InstallWizard extends Wizar
                }
        }
        
+       private class InstallProcess implements Runnable {
+               private ImportInitvalues installer;
+               
+               public InstallProcess(ImportInitvalues installer) {
+                       this.installer = installer;
+                       th = null;
+               }
+               
+               public void run() {
+                       try {
+                               installer.loadAll(cfg, true);
+                       } catch (Exception e) {
+                               th = e;
+                       }
+               }
+       }
+       
        private static class SelectOption implements Serializable {
                private static final long serialVersionUID = 
2559982745410615390L;
                private static SelectOption NO = new SelectOption("0", "No");
@@ -329,7 +414,7 @@ public class InstallWizard extends Wizar
 
                public TzDropDown(String id) throws Exception {
                        super(id);
-            List<OmTimeZone> tzList = 
getBean(ImportInitvalues.class).getTimeZones();
+            List<OmTimeZone> tzList = ImportInitvalues.getTimeZones();
                        setChoices(tzList);
                        setChoiceRenderer(new IChoiceRenderer<OmTimeZone>() {
                                private static final long serialVersionUID = 1L;
@@ -391,7 +476,7 @@ public class InstallWizard extends Wizar
                public LangDropDown(String id) throws Exception {
                        super(id);
                        LinkedHashMap<Integer, LinkedHashMap<String, Object>> 
allLanguagesAll
-                               = 
getBean(ImportInitvalues.class).getLanguageFiles();
+                               = ImportInitvalues.getLanguageFiles();
                        
                        List<SelectOption> list = new ArrayList<SelectOption>();
                        

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.html?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
 Wed May 22 17:40:44 2013
@@ -140,7 +140,7 @@
 </wicket:head>
 <wicket:extend>
        <div>
-               <span wicket:id="wizard"></span>
+               <div wicket:id="wizard"></div>
        </div>
 </wicket:extend>
-</html>
\ No newline at end of file
+</html>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.java?rev=1485305&r1=1485304&r2=1485305&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
 Wed May 22 17:40:44 2013
@@ -18,17 +18,12 @@
  */
 package org.apache.openmeetings.web.pages.install;
 
-import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
-
 import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ErrorMessagePanel;
 import org.apache.openmeetings.web.pages.BaseNotInitedPage;
 import org.apache.wicket.RestartResponseException;
-import org.apache.wicket.markup.html.basic.Label;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
 
 public class InstallWizardPage extends BaseNotInitedPage {
-       private static final Logger log = 
Red5LoggerFactory.getLogger(InstallWizard.class, webAppRootKey);
        private static final long serialVersionUID = -438388395397826138L;
 
        public InstallWizardPage() {
@@ -37,10 +32,11 @@ public class InstallWizardPage extends B
                }
                try {
                        add(new InstallWizard("wizard"));
+               } catch (RestartResponseException re) {
+                       throw re;
                } catch (Exception e) {
-                       //TODO add correct error handling
-                       log.error("Error while initing wizard, please check 
your installation", e);//FIXME
-                       add(new Label("wizard", "Error while initing wizard, 
please check your installation"));//FIXME
+                       //TODO localization
+                       add(new ErrorMessagePanel("wizard", "Error while 
running installer, please check your installation", e));
                }
        }
 }


Reply via email to