KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > services > dbobj > RegistrationDBObject


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.services.dbobj;
66
67 import com.jcorporate.expresso.core.db.DBConnection;
68 import com.jcorporate.expresso.core.db.DBException;
69 import com.jcorporate.expresso.core.dbobj.RequestContext;
70 import com.jcorporate.expresso.core.dbobj.SecuredDBObject;
71 import com.jcorporate.expresso.core.misc.EventHandler;
72 import com.jcorporate.expresso.core.security.User;
73 import com.jcorporate.expresso.core.security.UserListener;
74 import org.apache.log4j.Logger;
75
76 import java.util.Iterator JavaDoc;
77
78
79 /**
80  * Whenever you create a DBObject to be used for Registration, you need to
81  * derive it from this class. What this does is make sure that the registration
82  * information is deleted when a User is deleted.
83  *
84  * @author Michael Rimov
85  */

86 abstract public class RegistrationDBObject extends SecuredDBObject
87         implements UserListener {
88
89     static private final String JavaDoc thisClass = RegistrationDBObject.class.getName();
90     static private Logger log = Logger.getLogger(RegistrationDBObject.class);
91
92     /**
93      * Constructor
94      *
95      * @throws DBException on error
96      */

97     public RegistrationDBObject() throws DBException {
98         super();
99         addAsUserListener(this);
100     } /* User() */
101
102
103     /**
104      * Constructor
105      *
106      * @param myConnection The DBConnection retrieved from the ConnectionPool
107      */

108     public RegistrationDBObject(DBConnection myConnection) throws DBException {
109         super(myConnection);
110         addAsUserListener(this);
111     } /* User(String) */
112
113
114     /**
115      * <p/>
116      * Constructor that sets a connection as the object is created - typically
117      * this is used when a particular DBConnection is required for the purposes of
118      * maintaining a database transaction. If a specific connection is not used,
119      * there is no way to use commit() and rollback() in the event of failure, as a
120      * different DBConnection might be used for each phase of the transaction.
121      * Critial sections should therefore explicity request a DBConnection from the
122      * connection pool and pass it to each of the DB objects in that section.
123      * </p>
124      * <p>This constructor is neceesary to work with otherDBMap and transaction
125      * capabilities</p>
126      *
127      * @param dbConnection The DBConnection to utilize
128      * @param securityContext The data context that contains the setup (and
129      * security) tables for this object
130      * @throws DBException upon initialization error
131      */

132     public RegistrationDBObject(DBConnection dbConnection, String JavaDoc securityContext)
133             throws DBException {
134         super(dbConnection, securityContext);
135         addAsUserListener(this);
136     } /* CommitterRegistration(DBConnection) */
137
138     /**
139      * Use over (String) constructor. Initializes the object in the context
140      * of the user who's uid belongs to the parameter.
141      *
142      * @param uid the Uid of the user context
143      * @throws DBException if there's an initialization problem
144      */

145     public RegistrationDBObject(int uid) throws DBException {
146         super(uid);
147         addAsUserListener(this);
148     }
149
150     /**
151      * For using DBObjects within Controllers. Initializes based upon the current
152      * user and the requested db. [Of course this can be modified later]
153      *
154      * @param request - The controller request handed to you by the framework.
155      */

156     public RegistrationDBObject(RequestContext request) throws DBException {
157         super(request);
158         addAsUserListener(this);
159     }
160
161
162     /**
163      * Whenever a user is deleted, we must delete all of their registration
164      * records for security reasons.
165      *
166      * @param user the User that was deleted
167      */

168     public void deletedUser(User user) throws DBException {
169         RegistrationDBObject regobj = null;
170         try {
171             regobj = (RegistrationDBObject) Class.forName(this.getClass().getName()).newInstance();
172         } catch (Exception JavaDoc e) {
173             throw new DBException(thisClass +
174                     ".deletedUser() Error instantiating class: "
175                     + this.getClass().getName());
176         }
177         regobj.setDataContext(user.getDataContext());
178
179         // coder MAY have used custom UidField name
180
String JavaDoc uidFieldName = getUidFieldName(user);
181
182         try {
183             regobj.setField(uidFieldName, user.getUid());
184         } catch (Exception JavaDoc e) {
185             // coder may not have realized that expresso objects (also in map) use 'ExpUid'
186
regobj.setField("ExpUid", user.getUid()); // ok to throw
187
}
188
189         RegistrationDBObject oneMember = null;
190
191         for (Iterator JavaDoc e = regobj.searchAndRetrieveList().iterator(); e.hasNext();) {
192             oneMember = (RegistrationDBObject) e.next();
193
194             try {
195                 oneMember.delete();
196             } catch (DBException dbe) {
197                 String JavaDoc msg = "Error deleting registration info for class: " +
198                         this.getClass().getName() +
199                         " please delete these records manually as soon as possible";
200
201                 log.error(msg, dbe);
202
203                 EventHandler.Event(user.getDataContext(), "SYSERROR",
204                         msg, false);
205             }
206         } /* for each group member listing */
207
208     }
209
210     private String JavaDoc getUidFieldName(User user) throws DBException {
211         String JavaDoc uidFieldName = "ExpUid";
212         RegistrationDomain rd = new RegistrationDomain();
213         rd.setDataContext(user.getDataContext());
214         rd.setField("Name", user.getRegistrationDomain());
215
216         if (!rd.find()) {
217             throw new DBException(
218                     "User '+ " + user.getLoginName() + " specifies registration domain name = '" + user.getRegistrationDomain() + "' but cannot find this domain.");
219         }
220
221         RegistrationObjectMap rom = new RegistrationObjectMap(SecuredDBObject.SYSTEM_ACCOUNT);
222         rom.setDataContext(user.getDataContext());
223         rom.setField("RegDomId", rd.getField("RegDomId"));
224
225         if (rom.find()) {
226             uidFieldName = rom.getField("UidField");
227         }
228         return uidFieldName;
229     }
230
231
232     protected synchronized static void addAsUserListener(UserListener ul) {
233         if (!User.isListener(ul)) {
234             User.addListener(ul);
235         }
236     }
237
238     public void addedUser(User user) throws DBException {
239         return;
240     }
241
242     public void loggedOffUser(User user) throws DBException {
243         return;
244     }
245
246     public void loggedOnUser(User user) throws DBException {
247         return;
248     }
249
250     public void modifiedUser(User user) throws DBException {
251         return;
252     }
253 }
254
Popular Tags