Package com.adito.install.forms

Source Code of com.adito.install.forms.SelectUserDatabaseForm

        /*
*  Adito
*
*  Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU General Public License
*  as published by the Free Software Foundation; either version 2 of
*  the License, or (at your option) any later version.
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
     
package com.adito.install.forms;

import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.adito.core.UserDatabaseManager;
import com.adito.properties.Property;
import com.adito.properties.impl.realms.RealmKey;
import com.adito.realms.Realm;
import com.adito.security.UserDatabase;
import com.adito.security.UserDatabaseDefinition;
import com.adito.wizard.AbstractWizardSequence;
import com.adito.wizard.forms.DefaultWizardForm;


/**
* Wizard form implementation allowing the primary user database to
* be selected.
*/
public class SelectUserDatabaseForm extends DefaultWizardForm {
 
  final static Log log = LogFactory.getLog(SelectUserDatabaseForm.class);
 
    /**
     * Constant for the userDatabase type name
     */
    public final static String ATTR_USER_DATABASE = "userDatabase";
 
    /**
     * Constant for the userDatabase instance
     */
    public final static String ATTR_USER_DATABASE_INSTANCE = "userDatabaseInstance";

    /**
     * Constant for the userDatabase has changed
     */
    public final static String ATTR_USER_DATABASE_CHANGED = "userDatabaseChanged";

    /**
     * Coonstant for the realm name
     */
    public final static String ATTR_REALM_NAME = "realmName";
   
    // Private instance variables
    private String userDatabase;
    private String oldUserDatabase;

    /**
     * Constructor
     */
    public SelectUserDatabaseForm() {
        super(true, true, "/WEB-INF/jsp/content/install/selectUserDatabase.jspf",
            "", false, false, "selectUserDatabase", "install", "installation.selectUserDatabase", 2);
    }

    /*
     * (non-Javadoc)
     *
     * @see com.adito.wizard.forms.AbstractWizardForm#init(com.adito.wizard.AbstractWizardSequence)
     */
    public void init(AbstractWizardSequence sequence, HttpServletRequest request) throws Exception {
        userDatabase = (String)sequence.getAttribute(ATTR_USER_DATABASE,
          Property.getProperty(new RealmKey("security.userDatabase", UserDatabaseManager.getInstance().getDefaultRealm())));
        oldUserDatabase = userDatabase;
    }
   
    /**
     * Get all registered user database definitions
     *
     * @return user database definitions
     */
    public Collection<UserDatabaseDefinition> getUserDatabaseDefinitions() {
        return UserDatabaseManager.getInstance().getUserDatabaseDefinitions();
    }

    /*
     * (non-Javadoc)
     *
     * @see com.adito.wizard.forms.AbstractWizardForm#apply(com.adito.wizard.AbstractWizardSequence)
     */
    public void apply(AbstractWizardSequence sequence) throws Exception {
        sequence.putAttribute(ATTR_USER_DATABASE, userDatabase);
       
        // Determine if the user database chosen is different to that selected
        UserDatabase installUserDb = (UserDatabase)sequence.getAttribute(ATTR_USER_DATABASE_INSTANCE, null);
        UserDatabaseDefinition udbDef = UserDatabaseManager.getInstance().getUserDatabaseDefinition(userDatabase);
        UserDatabaseDefinition oldDef = UserDatabaseManager.getInstance().getUserDatabaseDefinition(oldUserDatabase);
        Realm defaultRealm = UserDatabaseManager.getInstance().getDefaultRealm();
        if(installUserDb == null) {
          if(isUsingDifferentDatabase(oldDef, udbDef)) {
            log.info("Selected user database differs from current default, open new database");
            installUserDb = UserDatabaseManager.getInstance().createUserDatabase(udbDef.getName(), defaultRealm.getResourceName(), defaultRealm.getResourceDescription(), false);
                sequence.putAttribute(ATTR_USER_DATABASE_CHANGED, Boolean.TRUE);
          }
          else {
            log.info("User database is same as current.");
            installUserDb = UserDatabaseManager.getInstance().getDefaultUserDatabase();
          }
        }
        else {         
          if(!installUserDb.getClass().equals(udbDef.getUserDatabaseClass())) {
            if(installUserDb.isOpen()) {
              log.info("Closing current user database " + installUserDb.getClass() + ".");
              installUserDb.close();
            }
                log.info("Selected user database differs from current install userdatabase, open new database");
                sequence.putAttribute(ATTR_USER_DATABASE_CHANGED, Boolean.TRUE);
                installUserDb = UserDatabaseManager.getInstance().createUserDatabase(udbDef.getName(), defaultRealm.getResourceName(), defaultRealm.getResourceDescription(), false);
          }
          else {
            log.info("Not changing current user database, already in use");           
          }
        }
      log.info("Using user database " + installUserDb.getClass() + ".");
        sequence.putAttribute(ATTR_USER_DATABASE_INSTANCE, installUserDb);
    }

    private static boolean isUsingDifferentDatabase(UserDatabaseDefinition oldDefinition, UserDatabaseDefinition newDefinition) {
        if (oldDefinition == null) {
            return true;
        }
        return !oldDefinition.getUserDatabaseClass().equals(newDefinition.getUserDatabaseClass());
    }
   
    /**
     * @return Returns the userDatabase.
     */
    public String getUserDatabase() {
        return userDatabase;
    }

    /**
     * @param userDatabase The userDatabase to set.
     */
    public void setUserDatabase(String userDatabase) {
        this.userDatabase = userDatabase;
    }

    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        if(!isCommiting()) {
            return null;
        }
       
        UserDatabaseDefinition databaseDefinition = UserDatabaseManager.getInstance().getUserDatabaseDefinition(userDatabase);
        if(databaseDefinition == null) {
            ActionErrors errors = new ActionErrors();
            errors.add(Globals.ERROR_KEY, new ActionMessage("installation.configureUserDatabase.error.not.selected"));
            return errors;
        }
        return super.validate(mapping, request);
    }
}
TOP

Related Classes of com.adito.install.forms.SelectUserDatabaseForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.