1 19 20 package com.sslexplorer.install.forms; 21 22 import java.util.Collection ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 import org.apache.struts.Globals; 29 import org.apache.struts.action.ActionErrors; 30 import org.apache.struts.action.ActionMapping; 31 import org.apache.struts.action.ActionMessage; 32 33 import com.sslexplorer.core.UserDatabaseManager; 34 import com.sslexplorer.properties.Property; 35 import com.sslexplorer.properties.impl.realms.RealmKey; 36 import com.sslexplorer.realms.Realm; 37 import com.sslexplorer.security.UserDatabase; 38 import com.sslexplorer.security.UserDatabaseDefinition; 39 import com.sslexplorer.wizard.AbstractWizardSequence; 40 import com.sslexplorer.wizard.forms.DefaultWizardForm; 41 42 43 49 public class SelectUserDatabaseForm extends DefaultWizardForm { 50 51 final static Log log = LogFactory.getLog(SelectUserDatabaseForm.class); 52 53 56 public final static String ATTR_USER_DATABASE = "userDatabase"; 57 58 61 public final static String ATTR_USER_DATABASE_INSTANCE = "userDatabaseInstance"; 62 63 66 public final static String ATTR_USER_DATABASE_CHANGED = "userDatabaseChanged"; 67 68 71 public final static String ATTR_REALM_NAME = "realmName"; 72 73 private String userDatabase; 75 private String oldUserDatabase; 76 77 80 public SelectUserDatabaseForm() { 81 super(true, true, "/WEB-INF/jsp/content/install/selectUserDatabase.jspf", 82 "", false, false, "selectUserDatabase", "install", "installation.selectUserDatabase", 2); 83 } 84 85 90 public void init(AbstractWizardSequence sequence, HttpServletRequest request) throws Exception { 91 userDatabase = (String )sequence.getAttribute(ATTR_USER_DATABASE, 92 Property.getProperty(new RealmKey("security.userDatabase", UserDatabaseManager.getInstance().getDefaultRealm()))); 93 oldUserDatabase = userDatabase; 94 } 95 96 101 public Collection <UserDatabaseDefinition> getUserDatabaseDefinitions() { 102 return UserDatabaseManager.getInstance().getUserDatabaseDefinitions(); 103 } 104 105 110 public void apply(AbstractWizardSequence sequence) throws Exception { 111 sequence.putAttribute(ATTR_USER_DATABASE, userDatabase); 112 113 UserDatabase installUserDb = (UserDatabase)sequence.getAttribute(ATTR_USER_DATABASE_INSTANCE, null); 115 UserDatabaseDefinition udbDef = UserDatabaseManager.getInstance().getUserDatabaseDefinition(userDatabase); 116 UserDatabaseDefinition oldDef = UserDatabaseManager.getInstance().getUserDatabaseDefinition(oldUserDatabase); 117 Realm defaultRealm = UserDatabaseManager.getInstance().getDefaultRealm(); 118 if(installUserDb == null) { 119 if(isUsingDifferentDatabase(oldDef, udbDef)) { 120 log.info("Selected user database differs from current default, open new database"); 121 installUserDb = UserDatabaseManager.getInstance().createUserDatabase(udbDef.getName(), defaultRealm.getResourceName(), defaultRealm.getResourceDescription(), false); 122 sequence.putAttribute(ATTR_USER_DATABASE_CHANGED, Boolean.TRUE); 123 } 124 else { 125 log.info("User database is same as current."); 126 installUserDb = UserDatabaseManager.getInstance().getDefaultUserDatabase(); 127 } 128 } 129 else { 130 if(!installUserDb.getClass().equals(udbDef.getUserDatabaseClass())) { 131 if(installUserDb.isOpen()) { 132 log.info("Closing current user database " + installUserDb.getClass() + "."); 133 installUserDb.close(); 134 } 135 log.info("Selected user database differs from current install userdatabase, open new database"); 136 sequence.putAttribute(ATTR_USER_DATABASE_CHANGED, Boolean.TRUE); 137 installUserDb = UserDatabaseManager.getInstance().createUserDatabase(udbDef.getName(), defaultRealm.getResourceName(), defaultRealm.getResourceDescription(), false); 138 } 139 else { 140 log.info("Not changing current user database, already in use"); 141 } 142 } 143 log.info("Using user database " + installUserDb.getClass() + "."); 144 sequence.putAttribute(ATTR_USER_DATABASE_INSTANCE, installUserDb); 145 } 146 147 private static boolean isUsingDifferentDatabase(UserDatabaseDefinition oldDefinition, UserDatabaseDefinition newDefinition) { 148 if (oldDefinition == null) { 149 return true; 150 } 151 return !oldDefinition.getUserDatabaseClass().equals(newDefinition.getUserDatabaseClass()); 152 } 153 154 157 public String getUserDatabase() { 158 return userDatabase; 159 } 160 161 164 public void setUserDatabase(String userDatabase) { 165 this.userDatabase = userDatabase; 166 } 167 168 @Override 169 public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 170 if(!isCommiting()) { 171 return null; 172 } 173 174 UserDatabaseDefinition databaseDefinition = UserDatabaseManager.getInstance().getUserDatabaseDefinition(userDatabase); 175 if(databaseDefinition == null) { 176 ActionErrors errors = new ActionErrors(); 177 errors.add(Globals.ERROR_KEY, new ActionMessage("installation.configureUserDatabase.error.not.selected")); 178 return errors; 179 } 180 return super.validate(mapping, request); 181 } 182 } 183 | Popular Tags |