You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2013/05/22 19:40:45 UTC

svn commit: r1485305 - in /openmeetings/trunk/singlewebapp: WebContent/openmeetings/css/ src/org/apache/openmeetings/cli/ src/org/apache/openmeetings/data/calendar/daos/ src/org/apache/openmeetings/installation/ src/org/apache/openmeetings/test/ src/or...

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