/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.cms.applications.common.actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentControllerProxy;
import org.infoglue.cms.controllers.kernel.impl.simple.InstallationController;
import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeControllerProxy;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.management.RepositoryVO;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.util.CmsPropertyHandler;
import webwork.action.Action;
/**
* This class contains methods to handle the installation and or upgrade phase .
*/
public class InstallAction extends InfoGlueAbstractAction
{
private final static Logger logger = Logger.getLogger(InstallAction.class.getName());
private static final long serialVersionUID = 1L;
private String operation = "";
//All variables connected to the database setup screen
private String dbProvider = "";
private String dbName = "";
private String dbServer = "";
private String dbPort = "";
private String dbInstance = "";
private String dbUser = "";
private String dbPassword = "";
private String igUser = "";
private String igPassword = "";
private String createDatabase = "";
private String addExampleRepositories = "";
private String errorMessage = "";
private String dbVersion = null;
private String sqlScript = null;
//All variables connected to the server setup screen
private String appServer = "";
private String hostName = "";
private String superUserName = "";
private String superUserPassword = "";
private String superUserEmail = "";
private String operatingMode = "0";
private String smtpServer = "";
private String smtpAuth = "";
private String smtpUser = "";
private String smtpPassword = "";
private String systemEmailSender = "";
public String doInput() throws Exception
{
return INPUT;
}
public String doInputInitiateInstall() throws Exception
{
return "inputInitiateInstall";
}
public String doInputDatabase() throws Exception
{
return "inputDatabase";
}
public String doInputDatabaseExisting() throws Exception
{
return "inputDatabaseExisting";
}
public String doInputDatabaseUpgrade() throws Exception
{
return "inputDatabaseUpgrade";
}
public String doInputServer() throws Exception
{
return "inputServer";
}
public String doExecute() throws Exception
{
logger.info("operation:" + operation);
if(operation.equalsIgnoreCase("updateDatabaseFromExistingConfig"))
{
try
{
InstallationController.getController().updateDatabaseFromExisting(createDatabase, addExampleRepositories, dbUser, dbPassword, getHttpSession());
}
catch (Exception e)
{
logger.error("Error in installer (updateDatabaseFromExisting):" + e.getMessage(), e);
this.errorMessage = e.getMessage();
return doInputDatabaseExisting();
}
}
if(operation.equalsIgnoreCase("updateDatabase"))
{
try
{
InstallationController.getController().updateDatabase(dbProvider, dbName, dbServer, dbPort, dbInstance, createDatabase, addExampleRepositories, dbUser, dbPassword, igUser, igPassword, getHttpSession());
}
catch (Exception e)
{
logger.error("Error in installer (updateDatabase):" + e.getMessage(), e);
this.errorMessage = e.getMessage();
return doInputDatabase();
}
}
if(operation.equalsIgnoreCase("updateDatabaseTables"))
{
try
{
InstallationController.getController().updateDatabaseTables(getHttpSession());
}
catch (Exception e)
{
logger.error("Error in installer (updateDatabaseTables):" + e.getMessage(), e);
this.errorMessage = e.getMessage();
return doInputDatabaseUpgrade();
}
}
else if(operation.equalsIgnoreCase("updateServer"))
{
try
{
InstallationController.getController().updateServer(appServer, smtpServer, smtpAuth, smtpUser, smtpPassword, systemEmailSender, hostName, superUserName, superUserPassword, superUserEmail, operatingMode, getRequest());
}
catch (Exception e)
{
logger.error("Error in installer (updateServer):" + e.getMessage(), e);
this.errorMessage = e.getMessage();
return doInputServer();
}
}
logger.debug("After operations...");
boolean dbConfigExists = false;
boolean dbConfigOK = false;
boolean dbUpgradeOK = false;
boolean serverConfigOK = false;
try
{
int reason = InstallationController.getController().getBrokenDatabaseReason();
logger.error("reason:" + reason);
if(reason == InstallationController.DATABASE_SERVER_MISSING_DATABASE || reason == InstallationController.DATABASE_SERVER_MISSING_DATABASE_TABLES || reason == InstallationController.ALL_OK)
dbConfigExists = true;
}
catch (Exception e)
{
logger.error("Error checking db configuration:" + e.getMessage());
//e.printStackTrace();
}
try
{
InstallationController.getController().validateDatabaseConnection();
dbConfigOK = true;
logger.error("dbConfigOK:" + dbConfigOK);
}
catch (Exception e)
{
logger.error("Error validating database connection:" + e.getMessage());
//e.printStackTrace();
}
try
{
this.dbVersion = InstallationController.getController().getCurrentDatabaseVersion(getHttpSession());
logger.error("DBVersion:" + this.dbVersion);
if(this.dbVersion.equalsIgnoreCase(CmsPropertyHandler.getInfoGlueDBVersion()))
dbUpgradeOK = true;
else
{
logger.error("Reported old database schema: " + dbVersion);
this.sqlScript = InstallationController.getController().getUpgradeScripts(this.dbVersion, getHttpSession());
}
}
catch (ClassNotFoundException e)
{
logger.error("No class found:" + e.getMessage());
dbConfigOK = false;
}
catch (Exception e)
{
logger.error("Error getting current database version:" + e.getMessage());
//e.printStackTrace();
}
try
{
serverConfigOK = InstallationController.getController().validateApplicationFile();
logger.error("serverConfigOK:" + serverConfigOK);
}
catch (Exception e)
{
e.printStackTrace();
}
logger.error("dbConfigExisting:" + dbConfigExists);
logger.error("dbConfigOK:" + dbConfigOK);
logger.error("dbUpgradeOK:" + dbUpgradeOK);
logger.error("serverConfigOK:" + serverConfigOK);
if(dbConfigExists && !dbConfigOK)
return doInputDatabaseExisting();
if(!dbConfigOK)
return doInputDatabase();
if(!dbUpgradeOK)
return doInputDatabaseUpgrade();
if(!serverConfigOK)
return doInputServer();
boolean isValidSetup = InstallationController.getController().validateSetup();
CmsPropertyHandler.setIsValidSetup(isValidSetup);
getHttpSession().removeAttribute("install_dbProvider");
getHttpSession().removeAttribute("install_jdbcDriverName");
getHttpSession().removeAttribute("install_jdbcURL");
getHttpSession().removeAttribute("install_dbUser");
getHttpSession().removeAttribute("install_dbPassword");
return Action.SUCCESS;
}
public String getDbVersion()
{
return dbVersion;
}
public String getSqlScript()
{
return sqlScript;
}
public String getAddExampleRepositories()
{
return addExampleRepositories;
}
public void setAddExampleRepositories(String addExampleRepositories)
{
this.addExampleRepositories = addExampleRepositories;
}
public String getDbProvider()
{
return dbProvider;
}
public void setDbProvider(String dbProvider)
{
this.dbProvider = dbProvider;
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getDbServer() {
return dbServer;
}
public void setDbServer(String dbServer) {
this.dbServer = dbServer;
}
public String getDbPort() {
return dbPort;
}
public void setDbPort(String dbPort) {
this.dbPort = dbPort;
}
public String getDbInstance() {
return dbInstance;
}
public void setDbInstance(String dbInstance) {
this.dbInstance = dbInstance;
}
public String getDbUser() {
return dbUser;
}
public void setDbUser(String dbUser) {
this.dbUser = dbUser;
}
public String getDbPassword() {
return dbPassword;
}
public void setDbPassword(String dbPassword) {
this.dbPassword = dbPassword;
}
public String getIgUser() {
return igUser;
}
public void setIgUser(String igUser) {
this.igUser = igUser;
}
public String getIgPassword() {
return igPassword;
}
public void setIgPassword(String igPassword) {
this.igPassword = igPassword;
}
public void setDbVersion(String dbVersion) {
this.dbVersion = dbVersion;
}
public void setSqlScript(String sqlScript) {
this.sqlScript = sqlScript;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getCreateDatabase() {
return createDatabase;
}
public void setCreateDatabase(String createDatabase) {
this.createDatabase = createDatabase;
}
public String getAppServer() {
return appServer;
}
public void setAppServer(String appServer) {
this.appServer = appServer;
}
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public String getSuperUserName() {
return superUserName;
}
public void setSuperUserName(String superUserName) {
this.superUserName = superUserName;
}
public String getSuperUserPassword() {
return superUserPassword;
}
public void setSuperUserPassword(String superUserPassword) {
this.superUserPassword = superUserPassword;
}
public String getSuperUserEmail() {
return superUserEmail;
}
public void setSuperUserEmail(String superUserEmail) {
this.superUserEmail = superUserEmail;
}
public String getErrorMessage() {
return errorMessage;
}
public String getSmtpServer() {
return smtpServer;
}
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public String getSmtpAuth() {
return smtpAuth;
}
public void setSmtpAuth(String smtpAuth) {
this.smtpAuth = smtpAuth;
}
public String getSmtpUser() {
return smtpUser;
}
public void setSmtpUser(String smtpUser) {
this.smtpUser = smtpUser;
}
public String getSmtpPassword() {
return smtpPassword;
}
public void setSmtpPassword(String smtpPassword) {
this.smtpPassword = smtpPassword;
}
public String getSystemEmailSender() {
return systemEmailSender;
}
public void setSystemEmailSender(String systemEmailSender) {
this.systemEmailSender = systemEmailSender;
}
public void setOperatingMode(String operatingMode)
{
this.operatingMode = operatingMode;
}
public String getOperatingMode()
{
return this.operatingMode;
}
public String getApplicationName()
{
return CmsPropertyHandler.getApplicationName();
}
public String getCurrentJDBCUrl() throws Exception
{
return InstallationController.getController().getJDBCParamFromCastorXML("//param[@name='url']");
}
public String getJDBCEngine() throws Exception
{
return InstallationController.getController().getJDBCEngine();
}
public String getScript() throws Exception
{
return InstallationController.getController().getScript();
}
}