KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > core > controller > SecureIfSetController


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64
65 package com.jcorporate.expresso.core.controller;
66
67 import com.jcorporate.expresso.core.db.DBConnection;
68 import com.jcorporate.expresso.core.db.DBConnectionPool;
69 import com.jcorporate.expresso.core.db.DBException;
70 import com.jcorporate.expresso.core.dbobj.SecuredDBObject;
71 import com.jcorporate.expresso.services.dbobj.ControllerSecurity;
72
73 /**
74  * Controller that uses security if the security system is available.
75  * <p>There are a class of controllers that are unique in that they need
76  * database security working ONLY if the database has already been
77  * set up. Otherwise, data components need to be able to be installed, tables
78  * created etc.</p>
79  * <p>This base class fills the gap by checking to see if there are available
80  * connections to the database, checks normal ControllerSecurity if the connections
81  * are up and running, but automatically returns true to stateAllowed() queries
82  * if there is no up and runnin persistence layer. [Or there is a problem
83  * accessing ControllerSecurity]</p>
84  *
85  * @author Michael Rimov
86  */

87 abstract public class SecureIfSetController extends DBController {
88
89     /**
90      * Default constructor.
91      */

92     public SecureIfSetController() {
93
94     }
95
96     /**
97      * Similar to DBController's EXCEPT that if there is no installed Database
98      * connections then the state is allowed. This is useful for setup user
99      * interfaces such as DBCreate.
100      *
101      * @param newState the state being transferred to.
102      * @param params the state parameters
103      * @return true if the state is allowed
104      * @throws com.jcorporate.expresso.core.controller.ControllerException
105      * upon
106      * error
107      */

108     public boolean stateAllowed(String JavaDoc newState, ControllerRequest params)
109             throws com.jcorporate.expresso.core.controller.ControllerException {
110         if (isDBConnectionAvailable(params.getDataContext())) {
111             return super.stateAllowed(newState, params);
112         } else {
113             return true;
114         }
115     }
116
117     /**
118      * Is a proper database connection available. Specific checks vary with
119      * the implementation version of Expresso.
120      *
121      * @param dataContext the datacontext to check
122      * @return true if a DBConnection appears to be set up and available.
123      */

124     public boolean isDBConnectionAvailable(String JavaDoc dataContext) {
125         try {
126             DBConnectionPool pool = DBConnectionPool.getInstance(dataContext);
127             DBConnection connection = pool.getConnection("Security Check");
128             try {
129                 ControllerSecurity cs = new ControllerSecurity(SecuredDBObject.SYSTEM_ACCOUNT);
130                 cs.setDataContext(dataContext);
131                 cs.count();
132             } finally {
133                 if (connection != null) {
134                     connection.release();
135                 }
136             }
137         } catch (DBException ex) {
138             return false;
139         }
140
141         return true;
142     }
143
144
145 }
Popular Tags