/*******************************************************************************
* Copyright (c) 2012-2015 INRIA.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Generoso Pagano - initial API and implementation
******************************************************************************/
package fr.inria.soctrace.framesoc.ui.init;
import java.util.HashMap;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;
import fr.inria.soctrace.framesoc.core.FramesocManager;
import fr.inria.soctrace.lib.model.utils.SoCTraceException;
import fr.inria.soctrace.lib.utils.Configuration;
import fr.inria.soctrace.lib.utils.Configuration.SoCTraceProperty;
import fr.inria.soctrace.lib.utils.DBMS;
/**
* Wizard to initialize the System.
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class InitWizard extends Wizard {
private WelcomePage welcomePage;
private DbmsPage dbmsPage;
private MySqlPage mysqlPage;
private SQLitePage sqlitePage;
private InitProperties properties;
/**
* Constructor
*/
public InitWizard(boolean firstime) {
// set current properties here
properties = new InitProperties();
properties.setDbms(Configuration.getInstance().get(SoCTraceProperty.soctrace_dbms));
properties.setMysqlUser(Configuration.getInstance().get(SoCTraceProperty.mysql_db_user));
properties.setMysqlUrl(Configuration.getInstance().get(SoCTraceProperty.mysql_base_db_jdbc_url));
properties.setMysqlPassword(Configuration.getInstance().get(SoCTraceProperty.mysql_db_password));
properties.setSqliteDirectory(Configuration.getInstance().get(SoCTraceProperty.sqlite_db_directory));
// first time page
if (firstime) {
welcomePage = new WelcomePage();
addPage(welcomePage);
} else {
welcomePage = null;
}
// create pages
dbmsPage = new DbmsPage("DBMS Selection", properties);
mysqlPage = new MySqlPage("MySQL configuration", properties);
sqlitePage = new SQLitePage("SQLite configuration", properties);
addPage(dbmsPage);
addPage(mysqlPage);
addPage(sqlitePage);
}
@Override
public boolean performFinish() {
// Save current configuration values
HashMap<String, String> currentProperties = (HashMap<String, String>) Configuration
.getInstance().saveProperties();
Configuration.getInstance().set(SoCTraceProperty.soctrace_dbms,
properties.getDbms());
if (properties.getDbms().equalsIgnoreCase(DBMS.SQLITE.toString())) {
Configuration.getInstance().set(
SoCTraceProperty.sqlite_db_directory,
properties.getSqliteDirectory());
} else if (properties.getDbms().equalsIgnoreCase(DBMS.MYSQL.toString())) {
Configuration.getInstance().set(
SoCTraceProperty.mysql_base_db_jdbc_url,
properties.getMysqlUrl());
Configuration.getInstance().set(SoCTraceProperty.mysql_db_user,
properties.getMysqlUser());
Configuration.getInstance().set(SoCTraceProperty.mysql_db_password,
properties.getMysqlPassword());
}
// Perform tests to check validity of inputs and allow user to finish
try {
if (FramesocManager.getInstance().isSystemDBExisting())
return true;
if (!FramesocManager.getInstance().isSystemDBParameterCorrect())
return false;
} catch (SoCTraceException e) {
String trimMessage = e.getMessage().substring(
e.getMessage().indexOf(":") + 1);
MessageDialog.openError(Display.getCurrent().getActiveShell(),
"Invalid DB parameters", trimMessage);
return false;
} finally {
// Set the configuration back to its previous values
Configuration.getInstance().setProperties(currentProperties);
}
return true;
}
@Override
public IWizardPage getNextPage(IWizardPage currentPage) {
if (welcomePage != null && currentPage == welcomePage)
return dbmsPage;
if (currentPage == dbmsPage) {
if (properties.getDbms().equalsIgnoreCase(DBMS.MYSQL.toString()))
return mysqlPage;
if (properties.getDbms().equalsIgnoreCase(DBMS.SQLITE.toString()))
return sqlitePage;
}
return null;
}
/**
* Get the properties.
*/
public InitProperties getInitProperties() {
return properties;
}
@Override
public boolean canFinish() {
return dbmsPage.isPageComplete()
&&
(((mysqlPage.isCurrentPage() && properties.getDbms().equalsIgnoreCase(DBMS.MYSQL.toString()) && mysqlPage.isPageComplete())
||
((sqlitePage.isCurrentPage() && properties.getDbms().equalsIgnoreCase(DBMS.SQLITE.toString()) && sqlitePage.isPageComplete()))));
}
}