KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > install > forms > SelectUserDatabaseForm


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.install.forms;
21
22 import java.util.Collection JavaDoc;
23
24 import javax.servlet.http.HttpServletRequest JavaDoc;
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 /**
44  * Wizard form implementation allowing the primary user database to
45  * be selected.
46  *
47  * @author Brett Smith <a HREF="mailto: brett@3sp.com">&lt;brett@3sp.com&gt;</a>
48  */

49 public class SelectUserDatabaseForm extends DefaultWizardForm {
50     
51     final static Log log = LogFactory.getLog(SelectUserDatabaseForm.class);
52     
53     /**
54      * Constant for the userDatabase type name
55      */

56     public final static String JavaDoc ATTR_USER_DATABASE = "userDatabase";
57     
58     /**
59      * Constant for the userDatabase instance
60      */

61     public final static String JavaDoc ATTR_USER_DATABASE_INSTANCE = "userDatabaseInstance";
62
63     /**
64      * Constant for the userDatabase has changed
65      */

66     public final static String JavaDoc ATTR_USER_DATABASE_CHANGED = "userDatabaseChanged";
67
68     /**
69      * Coonstant for the realm name
70      */

71     public final static String JavaDoc ATTR_REALM_NAME = "realmName";
72     
73     // Private instance variables
74
private String JavaDoc userDatabase;
75     private String JavaDoc oldUserDatabase;
76
77     /**
78      * Constructor
79      */

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     /*
86      * (non-Javadoc)
87      *
88      * @see com.sslexplorer.wizard.forms.AbstractWizardForm#init(com.sslexplorer.wizard.AbstractWizardSequence)
89      */

90     public void init(AbstractWizardSequence sequence, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
91         userDatabase = (String JavaDoc)sequence.getAttribute(ATTR_USER_DATABASE,
92             Property.getProperty(new RealmKey("security.userDatabase", UserDatabaseManager.getInstance().getDefaultRealm())));
93         oldUserDatabase = userDatabase;
94     }
95     
96     /**
97      * Get all registered user database definitions
98      *
99      * @return user database definitions
100      */

101     public Collection JavaDoc<UserDatabaseDefinition> getUserDatabaseDefinitions() {
102         return UserDatabaseManager.getInstance().getUserDatabaseDefinitions();
103     }
104
105     /*
106      * (non-Javadoc)
107      *
108      * @see com.sslexplorer.wizard.forms.AbstractWizardForm#apply(com.sslexplorer.wizard.AbstractWizardSequence)
109      */

110     public void apply(AbstractWizardSequence sequence) throws Exception JavaDoc {
111         sequence.putAttribute(ATTR_USER_DATABASE, userDatabase);
112         
113         // Determine if the user database chosen is different to that selected
114
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     /**
155      * @return Returns the userDatabase.
156      */

157     public String JavaDoc getUserDatabase() {
158         return userDatabase;
159     }
160
161     /**
162      * @param userDatabase The userDatabase to set.
163      */

164     public void setUserDatabase(String JavaDoc userDatabase) {
165         this.userDatabase = userDatabase;
166     }
167
168     @Override JavaDoc
169     public ActionErrors validate(ActionMapping mapping, HttpServletRequest JavaDoc 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