KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > db > generic > CmsUserDriver


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src/org/opencms/db/generic/CmsUserDriver.java,v $
3  * Date : $Date: 2006/04/04 15:46:20 $
4  * Version: $Revision: 1.110 $
5  *
6  * This library is part of OpenCms -
7  * the Open Source Content Mananagement System
8  *
9  * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * For further information about Alkacon Software GmbH, please see the
22  * company website: http://www.alkacon.com
23  *
24  * For further information about OpenCms, please see the
25  * project website: http://www.opencms.org
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */

31
32 package org.opencms.db.generic;
33
34 import org.opencms.configuration.CmsConfigurationManager;
35 import org.opencms.db.CmsDbContext;
36 import org.opencms.db.CmsDbEntryAlreadyExistsException;
37 import org.opencms.db.CmsDbEntryNotFoundException;
38 import org.opencms.db.CmsDbIoException;
39 import org.opencms.db.CmsDbSqlException;
40 import org.opencms.db.CmsDbUtil;
41 import org.opencms.db.CmsDriverManager;
42 import org.opencms.db.I_CmsDriver;
43 import org.opencms.db.I_CmsUserDriver;
44 import org.opencms.file.CmsDataAccessException;
45 import org.opencms.file.CmsGroup;
46 import org.opencms.file.CmsProject;
47 import org.opencms.file.CmsUser;
48 import org.opencms.i18n.CmsEncoder;
49 import org.opencms.i18n.CmsMessageContainer;
50 import org.opencms.main.CmsException;
51 import org.opencms.main.CmsInitException;
52 import org.opencms.main.CmsLog;
53 import org.opencms.main.OpenCms;
54 import org.opencms.security.CmsAccessControlEntry;
55 import org.opencms.security.CmsPasswordEncryptionException;
56 import org.opencms.security.I_CmsPrincipal;
57 import org.opencms.util.CmsStringUtil;
58 import org.opencms.util.CmsUUID;
59
60 import java.io.ByteArrayInputStream JavaDoc;
61 import java.io.ByteArrayOutputStream JavaDoc;
62 import java.io.IOException JavaDoc;
63 import java.io.ObjectInputStream JavaDoc;
64 import java.io.ObjectOutputStream JavaDoc;
65 import java.security.MessageDigest JavaDoc;
66 import java.security.NoSuchAlgorithmException JavaDoc;
67 import java.sql.Connection JavaDoc;
68 import java.sql.PreparedStatement JavaDoc;
69 import java.sql.ResultSet JavaDoc;
70 import java.sql.SQLException JavaDoc;
71 import java.util.ArrayList JavaDoc;
72 import java.util.Collections JavaDoc;
73 import java.util.HashMap JavaDoc;
74 import java.util.Hashtable JavaDoc;
75 import java.util.List JavaDoc;
76 import java.util.Map JavaDoc;
77
78 import org.apache.commons.collections.ExtendedProperties;
79 import org.apache.commons.logging.Log;
80
81 /**
82  * Generic (ANSI-SQL) database server implementation of the user driver methods.<p>
83  *
84  * @author Thomas Weckert
85  * @author Carsten Weinholz
86  * @author Michael Emmerich
87  *
88  * @version $Revision: 1.110 $
89  *
90  * @since 6.0.0
91  */

92 public class CmsUserDriver implements I_CmsDriver, I_CmsUserDriver {
93
94     /** The log object for this class. */
95     private static final Log LOG = CmsLog.getLog(org.opencms.db.generic.CmsUserDriver.class);
96
97     /** The name of the admin user. */
98     protected String JavaDoc m_adminUserName;
99
100     /** A digest to encrypt the passwords. */
101     protected MessageDigest JavaDoc m_digest;
102
103     /** The algorithm used to encode passwords. */
104     protected String JavaDoc m_digestAlgorithm;
105
106     /** The file.encoding to code passwords after encryption with digest. */
107     protected String JavaDoc m_digestFileEncoding;
108
109     /** The driver manager. */
110     protected CmsDriverManager m_driverManager;
111
112     /** The SQL manager. */
113     protected org.opencms.db.generic.CmsSqlManager m_sqlManager;
114
115     /**
116      * @see org.opencms.db.I_CmsUserDriver#createAccessControlEntry(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID, int, int, int)
117      */

118     public void createAccessControlEntry(
119         CmsDbContext dbc,
120         CmsProject project,
121         CmsUUID resource,
122         CmsUUID principal,
123         int allowed,
124         int denied,
125         int flags) throws CmsDataAccessException {
126
127         PreparedStatement JavaDoc stmt = null;
128         Connection JavaDoc conn = null;
129
130         try {
131             conn = m_sqlManager.getConnection(dbc, project.getId());
132             stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_CREATE");
133
134             stmt.setString(1, resource.toString());
135             stmt.setString(2, principal.toString());
136             stmt.setInt(3, allowed);
137             stmt.setInt(4, denied);
138             stmt.setInt(5, flags);
139
140             stmt.executeUpdate();
141
142         } catch (SQLException JavaDoc e) {
143             throw new CmsDbSqlException(Messages.get().container(
144                 Messages.ERR_GENERIC_SQL_1,
145                 CmsDbSqlException.getErrorQuery(stmt)), e);
146         } finally {
147             m_sqlManager.closeAll(dbc, conn, stmt, null);
148         }
149     }
150
151     /**
152      * @see org.opencms.db.I_CmsUserDriver#createGroup(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, java.lang.String, java.lang.String, int, java.lang.String, java.lang.Object)
153      */

154     public CmsGroup createGroup(
155         CmsDbContext dbc,
156         CmsUUID groupId,
157         String JavaDoc groupName,
158         String JavaDoc description,
159         int flags,
160         String JavaDoc parentGroupName,
161         Object JavaDoc reservedParam) throws CmsDataAccessException {
162
163         CmsUUID parentId = CmsUUID.getNullUUID();
164         CmsGroup group = null;
165         Connection JavaDoc conn = null;
166         PreparedStatement JavaDoc stmt = null;
167
168         if (existsGroup(dbc, groupName, reservedParam)) {
169             CmsMessageContainer message = Messages.get().container(
170                 Messages.ERR_GROUP_WITH_NAME_ALREADY_EXISTS_1,
171                 groupName);
172             if (LOG.isErrorEnabled()) {
173                 LOG.error(message.key());
174             }
175             throw new CmsDbEntryAlreadyExistsException(message);
176         }
177
178         try {
179             // get the id of the parent group if necessary
180
if (CmsStringUtil.isNotEmpty(parentGroupName)) {
181                 parentId = readGroup(dbc, parentGroupName).getId();
182             }
183
184             if (reservedParam == null) {
185                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
186
conn = m_sqlManager.getConnection(dbc);
187             } else {
188                 // get a JDBC connection from the reserved JDBC pools
189
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
190             }
191
192             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_CREATEGROUP");
193
194             // write new group to the database
195
stmt.setString(1, groupId.toString());
196             stmt.setString(2, parentId.toString());
197             stmt.setString(3, groupName);
198             stmt.setString(4, m_sqlManager.validateEmpty(description));
199             stmt.setInt(5, flags);
200             stmt.executeUpdate();
201
202             group = new CmsGroup(groupId, parentId, groupName, description, flags);
203         } catch (SQLException JavaDoc e) {
204             throw new CmsDbSqlException(Messages.get().container(
205                 Messages.ERR_GENERIC_SQL_1,
206                 CmsDbSqlException.getErrorQuery(stmt)), e);
207         } finally {
208             m_sqlManager.closeAll(dbc, conn, stmt, null);
209         }
210
211         return group;
212     }
213
214     /**
215      * @see org.opencms.db.I_CmsUserDriver#createUser(org.opencms.db.CmsDbContext, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, int, java.util.Map, java.lang.String, int)
216      */

217     public CmsUser createUser(
218         CmsDbContext dbc,
219         String JavaDoc name,
220         String JavaDoc password,
221         String JavaDoc description,
222         String JavaDoc firstname,
223         String JavaDoc lastname,
224         String JavaDoc email,
225         long lastlogin,
226         int flags,
227         Map JavaDoc additionalInfos,
228         String JavaDoc address,
229         int type) throws CmsDataAccessException, CmsPasswordEncryptionException {
230
231         CmsUUID id = new CmsUUID();
232         Connection JavaDoc conn = null;
233         PreparedStatement JavaDoc stmt = null;
234
235         if (existsUser(dbc, name, type, null)) {
236             CmsMessageContainer message = Messages.get().container(Messages.ERR_USER_WITH_NAME_ALREADY_EXISTS_1, name);
237             if (LOG.isErrorEnabled()) {
238                 LOG.error(message.key());
239             }
240             throw new CmsDbEntryAlreadyExistsException(message);
241         }
242
243         try {
244             conn = m_sqlManager.getConnection(dbc);
245             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_ADD");
246
247             stmt.setString(1, id.toString());
248             stmt.setString(2, name);
249             stmt.setString(3, OpenCms.getPasswordHandler().digest(password));
250             stmt.setString(4, m_sqlManager.validateEmpty(description));
251             stmt.setString(5, m_sqlManager.validateEmpty(firstname));
252             stmt.setString(6, m_sqlManager.validateEmpty(lastname));
253             stmt.setString(7, m_sqlManager.validateEmpty(email));
254             stmt.setLong(8, lastlogin);
255             stmt.setInt(9, flags);
256             m_sqlManager.setBytes(stmt, 10, internalSerializeAdditionalUserInfo(additionalInfos));
257             stmt.setString(11, m_sqlManager.validateEmpty(address));
258             stmt.setInt(12, type);
259             stmt.executeUpdate();
260         } catch (SQLException JavaDoc e) {
261             throw new CmsDbSqlException(Messages.get().container(
262                 Messages.ERR_GENERIC_SQL_1,
263                 CmsDbSqlException.getErrorQuery(stmt)), e);
264         } catch (IOException JavaDoc e) {
265             throw new CmsDbIoException(Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, name), e);
266         } finally {
267             m_sqlManager.closeAll(dbc, conn, stmt, null);
268         }
269
270         return this.readUser(dbc, id);
271     }
272
273     /**
274      * @see org.opencms.db.I_CmsUserDriver#createUserInGroup(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID, java.lang.Object)
275      */

276     public void createUserInGroup(CmsDbContext dbc, CmsUUID userid, CmsUUID groupid, Object JavaDoc reservedParam)
277     throws CmsDataAccessException {
278
279         Connection JavaDoc conn = null;
280         PreparedStatement JavaDoc stmt = null;
281
282         // check if user is already in group
283
if (!internalValidateUserInGroup(dbc, userid, groupid, reservedParam)) {
284             // if not, add this user to the group
285
try {
286                 if (reservedParam == null) {
287                     // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
288
conn = m_sqlManager.getConnection(dbc);
289                 } else {
290                     // get a JDBC connection from the reserved JDBC pools
291
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
292                 }
293
294                 stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_ADDUSERTOGROUP");
295
296                 // write the new assingment to the database
297
stmt.setString(1, groupid.toString());
298                 stmt.setString(2, userid.toString());
299                 // flag field is not used yet
300
stmt.setInt(3, CmsDbUtil.UNKNOWN_ID);
301                 stmt.executeUpdate();
302
303             } catch (SQLException JavaDoc e) {
304                 throw new CmsDbSqlException(Messages.get().container(
305                     Messages.ERR_GENERIC_SQL_1,
306                     CmsDbSqlException.getErrorQuery(stmt)), e);
307             } finally {
308                 m_sqlManager.closeAll(dbc, conn, stmt, null);
309             }
310         }
311     }
312
313     /**
314      * @see org.opencms.db.I_CmsUserDriver#deleteAccessControlEntries(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID)
315      */

316     public void deleteAccessControlEntries(CmsDbContext dbc, CmsProject project, CmsUUID resource)
317     throws CmsDataAccessException {
318
319         PreparedStatement JavaDoc stmt = null;
320         Connection JavaDoc conn = null;
321
322         try {
323             conn = m_sqlManager.getConnection(dbc, project.getId());
324             stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_SETFLAGS_ALL");
325
326             stmt.setInt(1, CmsAccessControlEntry.ACCESS_FLAGS_DELETED);
327             stmt.setString(2, resource.toString());
328
329             stmt.executeUpdate();
330
331         } catch (SQLException JavaDoc e) {
332             throw new CmsDbSqlException(Messages.get().container(
333                 Messages.ERR_GENERIC_SQL_1,
334                 CmsDbSqlException.getErrorQuery(stmt)), e);
335         } finally {
336             m_sqlManager.closeAll(dbc, conn, stmt, null);
337         }
338     }
339
340     /**
341      * @see org.opencms.db.I_CmsUserDriver#deleteGroup(org.opencms.db.CmsDbContext, java.lang.String)
342      */

343     public void deleteGroup(CmsDbContext dbc, String JavaDoc name) throws CmsDataAccessException {
344
345         Connection JavaDoc conn = null;
346         PreparedStatement JavaDoc stmt = null;
347
348         try {
349             // create statement
350
conn = m_sqlManager.getConnection(dbc);
351             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_DELETEGROUP");
352
353             stmt.setString(1, name);
354             stmt.executeUpdate();
355         } catch (SQLException JavaDoc e) {
356             throw new CmsDbSqlException(Messages.get().container(
357                 Messages.ERR_GENERIC_SQL_1,
358                 CmsDbSqlException.getErrorQuery(stmt)), e);
359         } finally {
360             m_sqlManager.closeAll(dbc, conn, stmt, null);
361         }
362     }
363
364     /**
365      * @see org.opencms.db.I_CmsUserDriver#deleteUser(org.opencms.db.CmsDbContext, java.lang.String)
366      */

367     public void deleteUser(CmsDbContext dbc, String JavaDoc userName) throws CmsDataAccessException {
368
369         Connection JavaDoc conn = null;
370         PreparedStatement JavaDoc stmt = null;
371
372         try {
373             conn = m_sqlManager.getConnection(dbc);
374             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_DELETE");
375
376             stmt.setString(1, userName);
377             stmt.executeUpdate();
378         } catch (SQLException JavaDoc e) {
379             throw new CmsDbSqlException(Messages.get().container(
380                 Messages.ERR_GENERIC_SQL_1,
381                 CmsDbSqlException.getErrorQuery(stmt)), e);
382         } finally {
383             m_sqlManager.closeAll(dbc, conn, stmt, null);
384         }
385     }
386
387     /**
388      * @see org.opencms.db.I_CmsUserDriver#deleteUserInGroup(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID)
389      */

390     public void deleteUserInGroup(CmsDbContext dbc, CmsUUID userId, CmsUUID groupId) throws CmsDataAccessException {
391
392         PreparedStatement JavaDoc stmt = null;
393         Connection JavaDoc conn = null;
394         try {
395             // create statement
396
conn = m_sqlManager.getConnection(dbc);
397             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_REMOVEUSERFROMGROUP");
398
399             stmt.setString(1, groupId.toString());
400             stmt.setString(2, userId.toString());
401             stmt.executeUpdate();
402         } catch (SQLException JavaDoc e) {
403             throw new CmsDbSqlException(Messages.get().container(
404                 Messages.ERR_GENERIC_SQL_1,
405                 CmsDbSqlException.getErrorQuery(stmt)), e);
406         } finally {
407             m_sqlManager.closeAll(dbc, conn, stmt, null);
408         }
409     }
410
411     /**
412      * @see org.opencms.db.I_CmsUserDriver#destroy()
413      */

414     public void destroy() throws Throwable JavaDoc {
415
416         finalize();
417         if (CmsLog.INIT.isInfoEnabled()) {
418             CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SHUTDOWN_DRIVER_1, getClass().getName()));
419         }
420     }
421
422     /**
423      * @see org.opencms.db.I_CmsUserDriver#existsGroup(org.opencms.db.CmsDbContext, java.lang.String, java.lang.Object)
424      */

425     public boolean existsGroup(CmsDbContext dbc, String JavaDoc groupName, Object JavaDoc reservedParam) throws CmsDataAccessException {
426
427         ResultSet JavaDoc res = null;
428         PreparedStatement JavaDoc stmt = null;
429         Connection JavaDoc conn = null;
430         boolean result = false;
431
432         try {
433             if (reservedParam == null) {
434                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
435
conn = m_sqlManager.getConnection(dbc);
436             } else {
437                 // get a JDBC connection from the reserved JDBC pools
438
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
439             }
440
441             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_READGROUP");
442
443             stmt.setString(1, groupName);
444             res = stmt.executeQuery();
445
446             // create new Cms group object
447
if (res.next()) {
448                 result = true;
449             } else {
450                 result = false;
451             }
452
453         } catch (SQLException JavaDoc e) {
454             throw new CmsDbSqlException(Messages.get().container(
455                 Messages.ERR_GENERIC_SQL_1,
456                 CmsDbSqlException.getErrorQuery(stmt)), e);
457         } finally {
458             m_sqlManager.closeAll(dbc, conn, stmt, res);
459         }
460
461         return result;
462     }
463
464     /**
465      * @see org.opencms.db.I_CmsUserDriver#existsUser(org.opencms.db.CmsDbContext, java.lang.String, int, java.lang.Object)
466      */

467     public boolean existsUser(CmsDbContext dbc, String JavaDoc username, int usertype, Object JavaDoc reservedParam)
468     throws CmsDataAccessException {
469
470         PreparedStatement JavaDoc stmt = null;
471         ResultSet JavaDoc res = null;
472         Connection JavaDoc conn = null;
473         boolean result = false;
474
475         try {
476             if (reservedParam == null) {
477                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
478
conn = m_sqlManager.getConnection(dbc);
479             } else {
480                 // get a JDBC connection from the reserved JDBC pools
481
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
482             }
483
484             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_READ");
485             stmt.setString(1, username);
486             stmt.setInt(2, usertype);
487
488             res = stmt.executeQuery();
489
490             if (res.next()) {
491                 result = true;
492             } else {
493                 result = false;
494             }
495         } catch (SQLException JavaDoc e) {
496             throw new CmsDbSqlException(Messages.get().container(
497                 Messages.ERR_GENERIC_SQL_1,
498                 CmsDbSqlException.getErrorQuery(stmt)), e);
499         } finally {
500             m_sqlManager.closeAll(dbc, conn, stmt, res);
501         }
502
503         return result;
504     }
505
506     /**
507      * @see org.opencms.db.I_CmsUserDriver#getSqlManager()
508      */

509     public CmsSqlManager getSqlManager() {
510
511         return m_sqlManager;
512     }
513
514     /**
515      * @see org.opencms.db.I_CmsUserDriver#importUser(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, int, java.util.Map, java.lang.String, int, java.lang.Object)
516      */

517     public CmsUser importUser(
518         CmsDbContext dbc,
519         CmsUUID id,
520         String JavaDoc name,
521         String JavaDoc password,
522         String JavaDoc description,
523         String JavaDoc firstname,
524         String JavaDoc lastname,
525         String JavaDoc email,
526         long lastlogin,
527         int flags,
528         Map JavaDoc additionalInfos,
529         String JavaDoc address,
530         int type,
531         Object JavaDoc reservedParam) throws CmsDataAccessException {
532
533         Connection JavaDoc conn = null;
534         PreparedStatement JavaDoc stmt = null;
535
536         if (existsUser(dbc, name, type, reservedParam)) {
537             CmsMessageContainer message = Messages.get().container(Messages.ERR_USER_WITH_NAME_ALREADY_EXISTS_1, name);
538             if (LOG.isErrorEnabled()) {
539                 LOG.error(message.key());
540             }
541             throw new CmsDbEntryAlreadyExistsException(message);
542         }
543
544         try {
545             if (reservedParam == null) {
546                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
547
conn = m_sqlManager.getConnection(dbc);
548             } else {
549                 // get a JDBC connection from the reserved JDBC pools
550
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
551             }
552
553             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_ADD");
554
555             stmt.setString(1, id.toString());
556             stmt.setString(2, name);
557             stmt.setString(3, m_sqlManager.validateEmpty(password));
558             stmt.setString(4, m_sqlManager.validateEmpty(description));
559             stmt.setString(5, m_sqlManager.validateEmpty(firstname));
560             stmt.setString(6, m_sqlManager.validateEmpty(lastname));
561             stmt.setString(7, m_sqlManager.validateEmpty(email));
562             stmt.setLong(8, lastlogin);
563             stmt.setInt(9, flags);
564             m_sqlManager.setBytes(stmt, 10, internalSerializeAdditionalUserInfo(additionalInfos));
565             stmt.setString(11, m_sqlManager.validateEmpty(address));
566             stmt.setInt(12, type);
567             stmt.executeUpdate();
568         } catch (SQLException JavaDoc e) {
569             throw new CmsDbSqlException(Messages.get().container(
570                 Messages.ERR_GENERIC_SQL_1,
571                 CmsDbSqlException.getErrorQuery(stmt)), e);
572         } catch (IOException JavaDoc e) {
573             throw new CmsDbIoException(Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, name), e);
574         } finally {
575             m_sqlManager.closeAll(dbc, conn, stmt, null);
576         }
577
578         return readUser(dbc, id);
579     }
580
581     /**
582      * @see org.opencms.db.I_CmsDriver#init(org.opencms.db.CmsDbContext, org.opencms.configuration.CmsConfigurationManager, java.util.List, org.opencms.db.CmsDriverManager)
583      */

584     public void init(
585         CmsDbContext dbc,
586         CmsConfigurationManager configurationManager,
587         List JavaDoc successiveDrivers,
588         CmsDriverManager driverManager) {
589
590         Map JavaDoc configuration = configurationManager.getConfiguration();
591
592         ExtendedProperties config;
593         if (configuration instanceof ExtendedProperties) {
594             config = (ExtendedProperties)configuration;
595         } else {
596             config = new ExtendedProperties();
597             config.putAll(configuration);
598         }
599
600         String JavaDoc poolUrl = config.get("db.user.pool").toString();
601         String JavaDoc classname = config.get("db.user.sqlmanager").toString();
602         m_sqlManager = this.initSqlManager(classname);
603         m_sqlManager.init(I_CmsUserDriver.DRIVER_TYPE_ID, poolUrl);
604
605         m_driverManager = driverManager;
606
607         if (CmsLog.INIT.isInfoEnabled()) {
608             CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_ASSIGNED_POOL_1, poolUrl));
609         }
610
611         m_digestAlgorithm = config.getString(CmsDriverManager.CONFIGURATION_DB + ".user.digest.type", "MD5");
612         if (CmsLog.INIT.isInfoEnabled()) {
613             CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DIGEST_ALGORITHM_1, m_digestAlgorithm));
614         }
615
616         m_digestFileEncoding = config.getString(
617             CmsDriverManager.CONFIGURATION_DB + ".user.digest.encoding",
618             CmsEncoder.ENCODING_UTF_8);
619         if (CmsLog.INIT.isInfoEnabled()) {
620             CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DIGEST_ENCODING_1, m_digestFileEncoding));
621         }
622
623         // create the digest
624
try {
625             m_digest = MessageDigest.getInstance(m_digestAlgorithm);
626             if (CmsLog.INIT.isInfoEnabled()) {
627                 CmsLog.INIT.info(Messages.get().getBundle().key(
628                     Messages.INIT_DIGEST_ENC_3,
629                     m_digest.getAlgorithm(),
630                     m_digest.getProvider().getName(),
631                     String.valueOf(m_digest.getProvider().getVersion())));
632             }
633         } catch (NoSuchAlgorithmException JavaDoc e) {
634             if (CmsLog.INIT.isInfoEnabled()) {
635                 CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SET_DIGEST_ERROR_0), e);
636             }
637         }
638
639         m_adminUserName = OpenCms.getDefaultUsers().getUserAdmin();
640
641         try {
642             if (!existsGroup(dbc, OpenCms.getDefaultUsers().getGroupAdministrators(), null)) {
643                 fillDefaults(dbc);
644             }
645         } catch (CmsException e) {
646             if (CmsLog.INIT.isErrorEnabled()) {
647                 CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_USER_GROUP_INITIALIZATION_FAILED_0), e);
648             }
649             throw new CmsInitException(Messages.get().container(Messages.ERR_INITIALIZING_USER_DRIVER_0), e);
650         }
651
652         if (successiveDrivers != null && !successiveDrivers.isEmpty()) {
653             if (LOG.isWarnEnabled()) {
654                 LOG.warn(Messages.get().getBundle().key(
655                     Messages.LOG_SUCCESSIVE_DRIVERS_UNSUPPORTED_1,
656                     getClass().getName()));
657             }
658         }
659     }
660
661     /**
662      * @see org.opencms.db.I_CmsUserDriver#initSqlManager(String)
663      */

664     public org.opencms.db.generic.CmsSqlManager initSqlManager(String JavaDoc classname) {
665
666         return CmsSqlManager.getInstance(classname);
667     }
668
669     /**
670      * @see org.opencms.db.I_CmsUserDriver#publishAccessControlEntries(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.file.CmsProject, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID)
671      */

672     public void publishAccessControlEntries(
673         CmsDbContext dbc,
674         CmsProject offlineProject,
675         CmsProject onlineProject,
676         CmsUUID offlineId,
677         CmsUUID onlineId) throws CmsDataAccessException {
678
679         PreparedStatement JavaDoc stmt = null;
680         Connection JavaDoc conn = null;
681         ResultSet JavaDoc res = null;
682
683         // at first, we remove all access contries of this resource in the online project
684
removeAccessControlEntries(dbc, onlineProject, onlineId);
685
686         // then, we copy the access control entries from the offline project into the online project
687
try {
688             conn = m_sqlManager.getConnection(dbc);
689             stmt = m_sqlManager.getPreparedStatement(conn, offlineProject, "C_ACCESS_READ_ENTRIES");
690
691             stmt.setString(1, offlineId.toString());
692
693             res = stmt.executeQuery();
694
695             while (res.next()) {
696                 CmsAccessControlEntry ace = internalCreateAce(res, onlineId);
697                 if ((ace.getFlags() & CmsAccessControlEntry.ACCESS_FLAGS_DELETED) == 0) {
698                     writeAccessControlEntry(dbc, onlineProject, ace);
699                 }
700             }
701
702         } catch (SQLException JavaDoc e) {
703             throw new CmsDbSqlException(Messages.get().container(
704                 Messages.ERR_GENERIC_SQL_1,
705                 CmsDbSqlException.getErrorQuery(stmt)), e);
706         } finally {
707             m_sqlManager.closeAll(dbc, conn, stmt, res);
708         }
709     }
710
711     /**
712      * @see org.opencms.db.I_CmsUserDriver#readAccessControlEntries(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID, boolean)
713      */

714     public List JavaDoc readAccessControlEntries(CmsDbContext dbc, CmsProject project, CmsUUID resource, boolean inheritedOnly)
715     throws CmsDataAccessException {
716
717         List JavaDoc aceList = new ArrayList JavaDoc();
718         PreparedStatement JavaDoc stmt = null;
719         Connection JavaDoc conn = null;
720         ResultSet JavaDoc res = null;
721
722         try {
723             conn = m_sqlManager.getConnection(dbc);
724             stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_READ_ENTRIES");
725
726             String JavaDoc resId = resource.toString();
727             stmt.setString(1, resId);
728
729             res = stmt.executeQuery();
730
731             // create new CmsAccessControlEntry and add to list
732
while (res.next()) {
733                 CmsAccessControlEntry ace = internalCreateAce(res);
734                 if ((ace.getFlags() & CmsAccessControlEntry.ACCESS_FLAGS_DELETED) > 0) {
735                     continue;
736                 }
737
738                 if (inheritedOnly && ((ace.getFlags() & CmsAccessControlEntry.ACCESS_FLAGS_INHERIT) == 0)) {
739                     continue;
740                 }
741
742                 if (inheritedOnly && ((ace.getFlags() & CmsAccessControlEntry.ACCESS_FLAGS_INHERIT) > 0)) {
743                     ace.setFlags(CmsAccessControlEntry.ACCESS_FLAGS_INHERITED);
744                 }
745
746                 aceList.add(ace);
747             }
748
749             return aceList;
750
751         } catch (SQLException JavaDoc e) {
752             throw new CmsDbSqlException(Messages.get().container(
753                 Messages.ERR_GENERIC_SQL_1,
754                 CmsDbSqlException.getErrorQuery(stmt)), e);
755         } finally {
756             m_sqlManager.closeAll(dbc, conn, stmt, res);
757         }
758     }
759
760     /**
761      * @see org.opencms.db.I_CmsUserDriver#readAccessControlEntry(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID)
762      */

763     public CmsAccessControlEntry readAccessControlEntry(
764         CmsDbContext dbc,
765         CmsProject project,
766         CmsUUID resource,
767         CmsUUID principal) throws CmsDataAccessException {
768
769         CmsAccessControlEntry ace = null;
770         PreparedStatement JavaDoc stmt = null;
771         Connection JavaDoc conn = null;
772         ResultSet JavaDoc res = null;
773
774         try {
775             conn = m_sqlManager.getConnection(dbc);
776             stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_READ_ENTRY");
777
778             stmt.setString(1, resource.toString());
779             stmt.setString(2, principal.toString());
780
781             res = stmt.executeQuery();
782
783             // create new CmsAccessControlEntry
784
if (res.next()) {
785                 ace = internalCreateAce(res);
786             } else {
787                 res.close();
788                 res = null;
789                 throw new CmsDbEntryNotFoundException(Messages.get().container(
790                     Messages.ERR_NO_ACE_FOUND_2,
791                     resource,
792                     principal));
793             }
794
795             return ace;
796
797         } catch (SQLException JavaDoc e) {
798             throw new CmsDbSqlException(Messages.get().container(
799                 Messages.ERR_GENERIC_SQL_1,
800                 CmsDbSqlException.getErrorQuery(stmt)), e);
801         } finally {
802             m_sqlManager.closeAll(dbc, conn, stmt, res);
803         }
804     }
805
806     /**
807      * @see org.opencms.db.I_CmsUserDriver#readChildGroups(org.opencms.db.CmsDbContext, java.lang.String)
808      */

809     public List JavaDoc readChildGroups(CmsDbContext dbc, String JavaDoc groupname) throws CmsDataAccessException {
810
811         List JavaDoc childs = new ArrayList JavaDoc();
812         CmsGroup group;
813         CmsGroup parent;
814         ResultSet JavaDoc res = null;
815         PreparedStatement JavaDoc stmt = null;
816         Connection JavaDoc conn = null;
817         try {
818             // get parent group
819
parent = readGroup(dbc, groupname);
820             // parent group exists, so get all childs
821
if (parent != null) {
822                 // create statement
823
conn = m_sqlManager.getConnection(dbc);
824                 stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_GETCHILD");
825                 stmt.setString(1, parent.getId().toString());
826                 res = stmt.executeQuery();
827                 // create new Cms group objects
828
while (res.next()) {
829                     group = new CmsGroup(
830                         new CmsUUID(res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_ID"))),
831                         new CmsUUID(res.getString(m_sqlManager.readQuery("C_GROUPS_PARENT_GROUP_ID"))),
832                         res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_NAME")),
833                         res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_DESCRIPTION")),
834                         res.getInt(m_sqlManager.readQuery("C_GROUPS_GROUP_FLAGS")));
835                     childs.add(group);
836                 }
837             }
838
839         } catch (SQLException JavaDoc e) {
840             throw new CmsDbSqlException(Messages.get().container(
841                 Messages.ERR_GENERIC_SQL_1,
842                 CmsDbSqlException.getErrorQuery(stmt)), e);
843         } finally {
844             // close all db-resources
845
m_sqlManager.closeAll(dbc, conn, stmt, res);
846         }
847         return childs;
848     }
849
850     /**
851      * @see org.opencms.db.I_CmsUserDriver#readGroup(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID)
852      */

853     public CmsGroup readGroup(CmsDbContext dbc, CmsUUID groupId) throws CmsDataAccessException {
854
855         CmsGroup group = null;
856         ResultSet JavaDoc res = null;
857         PreparedStatement JavaDoc stmt = null;
858         Connection JavaDoc conn = null;
859
860         try {
861             conn = m_sqlManager.getConnection(dbc);
862             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_READGROUP2");
863
864             // read the group from the database
865
stmt.setString(1, groupId.toString());
866             res = stmt.executeQuery();
867             // create new Cms group object
868
if (res.next()) {
869                 group = internalCreateGroup(res);
870             } else {
871                 CmsMessageContainer message = Messages.get().container(Messages.ERR_NO_GROUP_WITH_ID_1, groupId);
872                 if (LOG.isDebugEnabled()) {
873                     LOG.debug(message.key());
874                 }
875                 throw new CmsDbEntryNotFoundException(message);
876             }
877
878         } catch (SQLException JavaDoc e) {
879             throw new CmsDbSqlException(Messages.get().container(
880                 Messages.ERR_GENERIC_SQL_1,
881                 CmsDbSqlException.getErrorQuery(stmt)), e);
882         } finally {
883             m_sqlManager.closeAll(dbc, conn, stmt, res);
884         }
885
886         return group;
887     }
888
889     /**
890      * @see org.opencms.db.I_CmsUserDriver#readGroup(org.opencms.db.CmsDbContext, java.lang.String)
891      */

892     public CmsGroup readGroup(CmsDbContext dbc, String JavaDoc groupName) throws CmsDataAccessException {
893
894         CmsGroup group = null;
895         ResultSet JavaDoc res = null;
896         PreparedStatement JavaDoc stmt = null;
897         Connection JavaDoc conn = null;
898
899         try {
900             conn = m_sqlManager.getConnection(dbc);
901             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_READGROUP");
902
903             // read the group from the database
904
stmt.setString(1, groupName);
905             res = stmt.executeQuery();
906
907             // create new Cms group object
908
if (res.next()) {
909                 group = internalCreateGroup(res);
910             } else {
911                 CmsMessageContainer message = org.opencms.db.Messages.get().container(
912                     org.opencms.db.Messages.ERR_UNKNOWN_GROUP_1,
913                     groupName);
914                 if (LOG.isWarnEnabled()) {
915                     LOG.warn(message.key());
916                 }
917                 throw new CmsDbEntryNotFoundException(message);
918             }
919
920         } catch (SQLException JavaDoc e) {
921             throw new CmsDbSqlException(Messages.get().container(
922                 Messages.ERR_GENERIC_SQL_1,
923                 CmsDbSqlException.getErrorQuery(stmt)), e);
924         } finally {
925             m_sqlManager.closeAll(dbc, conn, stmt, res);
926         }
927         return group;
928     }
929
930     /**
931      * @see org.opencms.db.I_CmsUserDriver#readGroups(org.opencms.db.CmsDbContext)
932      */

933     public List JavaDoc readGroups(CmsDbContext dbc) throws CmsDataAccessException {
934
935         List JavaDoc groups = new ArrayList JavaDoc();
936         //CmsGroup group = null;
937
ResultSet JavaDoc res = null;
938         PreparedStatement JavaDoc stmt = null;
939         Connection JavaDoc conn = null;
940         try {
941             // create statement
942
conn = m_sqlManager.getConnection(dbc);
943             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_GETGROUPS");
944
945             res = stmt.executeQuery();
946
947             // create new Cms group objects
948
while (res.next()) {
949                 groups.add(internalCreateGroup(res));
950             }
951
952         } catch (SQLException JavaDoc e) {
953             throw new CmsDbSqlException(Messages.get().container(
954                 Messages.ERR_GENERIC_SQL_1,
955                 CmsDbSqlException.getErrorQuery(stmt)), e);
956         } finally {
957             m_sqlManager.closeAll(dbc, conn, stmt, res);
958         }
959         return groups;
960     }
961
962     /**
963      * @see org.opencms.db.I_CmsUserDriver#readGroupsOfUser(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, java.lang.String)
964      */

965     public List JavaDoc readGroupsOfUser(CmsDbContext dbc, CmsUUID userId, String JavaDoc paramStr) throws CmsDataAccessException {
966
967         //CmsGroup group;
968
List JavaDoc groups = new ArrayList JavaDoc();
969
970         PreparedStatement JavaDoc stmt = null;
971         ResultSet JavaDoc res = null;
972         Connection JavaDoc conn = null;
973
974         try {
975             conn = m_sqlManager.getConnection(dbc);
976             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_GETGROUPSOFUSER");
977
978             // get all all groups of the user
979
stmt.setString(1, userId.toString());
980
981             res = stmt.executeQuery();
982
983             while (res.next()) {
984                 groups.add(internalCreateGroup(res));
985             }
986         } catch (SQLException JavaDoc e) {
987             throw new CmsDbSqlException(Messages.get().container(
988                 Messages.ERR_GENERIC_SQL_1,
989                 CmsDbSqlException.getErrorQuery(stmt)), e);
990         } finally {
991             m_sqlManager.closeAll(dbc, conn, stmt, res);
992         }
993         return groups;
994     }
995
996     /**
997      * @see org.opencms.db.I_CmsUserDriver#readUser(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID)
998      */

999     public CmsUser readUser(CmsDbContext dbc, CmsUUID id) throws CmsDataAccessException {
1000
1001        PreparedStatement JavaDoc stmt = null;
1002        ResultSet JavaDoc res = null;
1003        CmsUser user = null;
1004        Connection JavaDoc conn = null;
1005
1006        try {
1007            conn = m_sqlManager.getConnection(dbc);
1008            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_READID");
1009
1010            stmt.setString(1, id.toString());
1011            res = stmt.executeQuery();
1012
1013            // create new Cms user object
1014
if (res.next()) {
1015                user = internalCreateUser(res);
1016            } else {
1017                CmsMessageContainer message = Messages.get().container(Messages.ERR_NO_USER_WITH_ID_1, id);
1018                if (LOG.isDebugEnabled()) {
1019                    LOG.debug(message.key());
1020                }
1021                throw new CmsDbEntryNotFoundException(message);
1022            }
1023
1024            return user;
1025        } catch (SQLException JavaDoc e) {
1026            throw new CmsDbSqlException(Messages.get().container(
1027                Messages.ERR_GENERIC_SQL_1,
1028                CmsDbSqlException.getErrorQuery(stmt)), e);
1029        } catch (IOException JavaDoc e) {
1030            throw new CmsDbIoException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1031        } catch (ClassNotFoundException JavaDoc e) {
1032            throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1033        } finally {
1034            m_sqlManager.closeAll(dbc, conn, stmt, res);
1035        }
1036    }
1037
1038    /**
1039     * @see org.opencms.db.I_CmsUserDriver#readUser(org.opencms.db.CmsDbContext, java.lang.String, int)
1040     */

1041    public CmsUser readUser(CmsDbContext dbc, String JavaDoc name, int type) throws CmsDataAccessException {
1042
1043        PreparedStatement JavaDoc stmt = null;
1044        ResultSet JavaDoc res = null;
1045        CmsUser user = null;
1046        Connection JavaDoc conn = null;
1047
1048        try {
1049            conn = m_sqlManager.getConnection(dbc);
1050            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_READ");
1051            stmt.setString(1, name);
1052            stmt.setInt(2, type);
1053
1054            res = stmt.executeQuery();
1055
1056            if (res.next()) {
1057                user = internalCreateUser(res);
1058            } else {
1059                CmsMessageContainer message = org.opencms.db.Messages.get().container(
1060                    org.opencms.db.Messages.ERR_UNKNOWN_USER_1,
1061                    name);
1062                if (LOG.isDebugEnabled()) {
1063                    LOG.debug(message.key());
1064                }
1065                throw new CmsDbEntryNotFoundException(message);
1066            }
1067        } catch (SQLException JavaDoc e) {
1068            throw new CmsDbSqlException(Messages.get().container(
1069                Messages.ERR_GENERIC_SQL_1,
1070                CmsDbSqlException.getErrorQuery(stmt)), e);
1071        } catch (IOException JavaDoc e) {
1072            throw new CmsDbIoException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1073        } catch (ClassNotFoundException JavaDoc e) {
1074            throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1075        } finally {
1076            m_sqlManager.closeAll(dbc, conn, stmt, res);
1077        }
1078
1079        return user;
1080    }
1081
1082    /**
1083     * @see org.opencms.db.I_CmsUserDriver#readUser(org.opencms.db.CmsDbContext, java.lang.String, java.lang.String, int)
1084     */

1085    public CmsUser readUser(CmsDbContext dbc, String JavaDoc name, String JavaDoc password, int type)
1086    throws CmsDataAccessException, CmsPasswordEncryptionException {
1087
1088        PreparedStatement JavaDoc stmt = null;
1089        ResultSet JavaDoc res = null;
1090        CmsUser user = null;
1091        Connection JavaDoc conn = null;
1092        try {
1093            conn = m_sqlManager.getConnection(dbc);
1094            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_READPW");
1095            stmt.setString(1, name);
1096            stmt.setString(2, OpenCms.getPasswordHandler().digest(password));
1097            stmt.setInt(3, type);
1098            res = stmt.executeQuery();
1099
1100            // create new Cms user object
1101
if (res.next()) {
1102                user = internalCreateUser(res);
1103            } else {
1104                res.close();
1105                res = null;
1106                CmsMessageContainer message = org.opencms.db.Messages.get().container(
1107                    org.opencms.db.Messages.ERR_UNKNOWN_USER_1,
1108                    name);
1109                if (LOG.isDebugEnabled()) {
1110                    LOG.debug(message.key());
1111                }
1112                throw new CmsDbEntryNotFoundException(message);
1113            }
1114
1115            return user;
1116        } catch (SQLException JavaDoc e) {
1117            throw new CmsDbSqlException(Messages.get().container(
1118                Messages.ERR_GENERIC_SQL_1,
1119                CmsDbSqlException.getErrorQuery(stmt)), e);
1120        } catch (IOException JavaDoc e) {
1121            throw new CmsDbIoException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1122        } catch (ClassNotFoundException JavaDoc e) {
1123            throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READING_USER_0), e);
1124        } finally {
1125            m_sqlManager.closeAll(dbc, conn, stmt, res);
1126        }
1127    }
1128
1129    /**
1130     * @see org.opencms.db.I_CmsUserDriver#readUser(org.opencms.db.CmsDbContext, java.lang.String, java.lang.String, java.lang.String, int)
1131     */

1132    public CmsUser readUser(CmsDbContext dbc, String JavaDoc name, String JavaDoc password, String JavaDoc remoteAddress, int type)
1133    throws CmsDataAccessException, CmsPasswordEncryptionException {
1134
1135        CmsUser user = readUser(dbc, name, password, type);
1136        return user;
1137    }
1138
1139    /**
1140     * @see org.opencms.db.I_CmsUserDriver#readUsers(org.opencms.db.CmsDbContext, int)
1141     */

1142    public List JavaDoc readUsers(CmsDbContext dbc, int type) throws CmsDataAccessException {
1143
1144        List JavaDoc users = new ArrayList JavaDoc();
1145        PreparedStatement JavaDoc stmt = null;
1146        ResultSet JavaDoc res = null;
1147        Connection JavaDoc conn = null;
1148
1149        try {
1150            conn = m_sqlManager.getConnection(dbc);
1151            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_GETUSERS");
1152            stmt.setInt(1, type);
1153            res = stmt.executeQuery();
1154            // create new Cms user objects
1155
while (res.next()) {
1156                users.add(internalCreateUser(res));
1157            }
1158        } catch (SQLException JavaDoc e) {
1159            throw new CmsDbSqlException(Messages.get().container(
1160                Messages.ERR_GENERIC_SQL_1,
1161                CmsDbSqlException.getErrorQuery(stmt)), e);
1162        } catch (IOException JavaDoc e) {
1163            throw new CmsDbIoException(Messages.get().container(Messages.ERR_READING_USERS_0), e);
1164        } catch (ClassNotFoundException JavaDoc e) {
1165            throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READING_USERS_0), e);
1166        } finally {
1167            m_sqlManager.closeAll(dbc, conn, stmt, res);
1168        }
1169        return users;
1170    }
1171
1172    /**
1173     * @see org.opencms.db.I_CmsUserDriver#readUsersOfGroup(org.opencms.db.CmsDbContext, java.lang.String, int)
1174     */

1175    public List JavaDoc readUsersOfGroup(CmsDbContext dbc, String JavaDoc name, int type) throws CmsDataAccessException {
1176
1177        List JavaDoc users = new ArrayList JavaDoc();
1178
1179        PreparedStatement JavaDoc stmt = null;
1180        ResultSet JavaDoc res = null;
1181        Connection JavaDoc conn = null;
1182
1183        try {
1184            conn = m_sqlManager.getConnection(dbc);
1185            stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_GETUSERSOFGROUP");
1186            stmt.setString(1, name);
1187            stmt.setInt(2, type);
1188
1189            res = stmt.executeQuery();
1190
1191            while (res.next()) {
1192                users.add(internalCreateUser(res));
1193            }
1194        } catch (SQLException JavaDoc e) {
1195            throw new CmsDbSqlException(Messages.get().container(
1196                Messages.ERR_GENERIC_SQL_1,
1197                CmsDbSqlException.getErrorQuery(stmt)), e);
1198        } catch (IOException JavaDoc e) {
1199            throw new CmsDbIoException(org.opencms.db.Messages.get().container(
1200                org.opencms.db.Messages.ERR_GET_USERS_OF_GROUP_1,
1201                name), e);
1202        } catch (ClassNotFoundException JavaDoc e) {
1203            throw new CmsDataAccessException(org.opencms.db.Messages.get().container(
1204                org.opencms.db.Messages.ERR_GET_USERS_OF_GROUP_1,
1205                name), e);
1206        } finally {
1207            m_sqlManager.closeAll(dbc, conn, stmt, res);
1208        }
1209
1210        return users;
1211    }
1212
1213    /**
1214     * @see org.opencms.db.I_CmsUserDriver#removeAccessControlEntries(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID)
1215     */

1216    public void removeAccessControlEntries(CmsDbContext dbc, CmsProject project, CmsUUID resource)
1217    throws CmsDataAccessException {
1218
1219        PreparedStatement JavaDoc stmt = null;
1220        Connection JavaDoc conn = null;
1221
1222        try {
1223            conn = m_sqlManager.getConnection(dbc, project.getId());
1224            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_REMOVE_ALL");
1225
1226            stmt.setString(1, resource.toString());
1227
1228            stmt.executeUpdate();
1229
1230        } catch (SQLException JavaDoc e) {
1231            throw new CmsDbSqlException(Messages.get().container(
1232                Messages.ERR_GENERIC_SQL_1,
1233                CmsDbSqlException.getErrorQuery(stmt)), e);
1234        } finally {
1235            m_sqlManager.closeAll(dbc, conn, stmt, null);
1236        }
1237    }
1238
1239    /**
1240     * @see org.opencms.db.I_CmsUserDriver#removeAccessControlEntriesForPrincipal(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.file.CmsProject, org.opencms.util.CmsUUID)
1241     */

1242    public void removeAccessControlEntriesForPrincipal(
1243        CmsDbContext dbc,
1244        CmsProject project,
1245        CmsProject onlineProject,
1246        CmsUUID principal) throws CmsDataAccessException {
1247
1248        PreparedStatement JavaDoc stmt = null;
1249        Connection JavaDoc conn = null;
1250
1251        try {
1252
1253            conn = m_sqlManager.getConnection(dbc, project.getId());
1254            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_REMOVE_ALL_FOR_PRINCIPAL");
1255
1256            stmt.setString(1, principal.toString());
1257            stmt.executeUpdate();
1258        } catch (SQLException JavaDoc e) {
1259            throw new CmsDbSqlException(Messages.get().container(
1260                Messages.ERR_GENERIC_SQL_1,
1261                CmsDbSqlException.getErrorQuery(stmt)), e);
1262        } finally {
1263            m_sqlManager.closeAll(dbc, conn, stmt, null);
1264        }
1265
1266        try {
1267            conn = m_sqlManager.getConnection(dbc, project.getId());
1268            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_REMOVE_ALL_FOR_PRINCIPAL_ONLINE");
1269
1270            stmt.setString(1, principal.toString());
1271
1272            stmt.executeUpdate();
1273
1274        } catch (SQLException JavaDoc e) {
1275            throw new CmsDbSqlException(Messages.get().container(Messages.ERR_GENERIC_SQL_1, stmt), e);
1276        } finally {
1277            m_sqlManager.closeAll(dbc, conn, stmt, null);
1278        }
1279    }
1280
1281    /**
1282     * @see org.opencms.db.I_CmsUserDriver#removeAccessControlEntry(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.util.CmsUUID, org.opencms.util.CmsUUID)
1283     */

1284    public void removeAccessControlEntry(CmsDbContext dbc, CmsProject project, CmsUUID resource, CmsUUID principal)
1285    throws CmsDataAccessException {
1286
1287        PreparedStatement JavaDoc stmt = null;
1288        Connection JavaDoc conn = null;
1289
1290        try {
1291            conn = m_sqlManager.getConnection(dbc, project.getId());
1292            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_REMOVE");
1293
1294            stmt.setString(1, resource.toString());
1295            stmt.setString(2, principal.toString());
1296            stmt.executeUpdate();
1297
1298        } catch (SQLException JavaDoc e) {
1299            throw new CmsDbSqlException(Messages.get().container(
1300                Messages.ERR_GENERIC_SQL_1,
1301                CmsDbSqlException.getErrorQuery(stmt)), e);
1302        } finally {
1303            m_sqlManager.closeAll(dbc, conn, stmt, null);
1304        }
1305    }
1306
1307    /**
1308     * @see org.opencms.db.I_CmsUserDriver#writeAccessControlEntry(org.opencms.db.CmsDbContext, org.opencms.file.CmsProject, org.opencms.security.CmsAccessControlEntry)
1309     */

1310    public void writeAccessControlEntry(CmsDbContext dbc, CmsProject project, CmsAccessControlEntry acEntry)
1311    throws CmsDataAccessException {
1312
1313        PreparedStatement JavaDoc stmt = null;
1314        Connection JavaDoc conn = null;
1315        ResultSet JavaDoc res = null;
1316
1317        try {
1318            conn = m_sqlManager.getConnection(dbc, project.getId());
1319            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_READ_ENTRY");
1320
1321            stmt.setString(1, acEntry.getResource().toString());
1322            stmt.setString(2, acEntry.getPrincipal().toString());
1323
1324            res = stmt.executeQuery();
1325            if (!res.next()) {
1326                createAccessControlEntry(
1327                    dbc,
1328                    project,
1329                    acEntry.getResource(),
1330                    acEntry.getPrincipal(),
1331                    acEntry.getAllowedPermissions(),
1332                    acEntry.getDeniedPermissions(),
1333                    acEntry.getFlags());
1334                return;
1335            }
1336
1337            // otherwise update the already existing entry
1338

1339            stmt = m_sqlManager.getPreparedStatement(conn, project, "C_ACCESS_UPDATE");
1340
1341            stmt.setInt(1, acEntry.getAllowedPermissions());
1342            stmt.setInt(2, acEntry.getDeniedPermissions());
1343            stmt.setInt(3, acEntry.getFlags());
1344            stmt.setString(4, acEntry.getResource().toString());
1345            stmt.setString(5, acEntry.getPrincipal().toString());
1346
1347            stmt.executeUpdate();
1348
1349        } catch (SQLException JavaDoc e) {
1350            throw new CmsDbSqlException(Messages.get().container(
1351                Messages.ERR_GENERIC_SQL_1,
1352                CmsDbSqlException.getErrorQuery(stmt)), e);
1353        } finally {
1354            m_sqlManager.closeAll(dbc, conn, stmt, res);
1355        }
1356    }
1357
1358    /**
1359     * @see org.opencms.db.I_CmsUserDriver#writeGroup(org.opencms.db.CmsDbContext, org.opencms.file.CmsGroup)
1360     */

1361    public void writeGroup(CmsDbContext dbc, CmsGroup group) throws CmsDataAccessException {
1362
1363        PreparedStatement JavaDoc stmt = null;
1364        Connection JavaDoc conn = null;
1365        if (group != null) {
1366            try {
1367
1368                // create statement
1369
conn = m_sqlManager.getConnection(dbc);
1370                stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_WRITEGROUP");
1371
1372                stmt.setString(1, m_sqlManager.validateEmpty(group.getDescription()));
1373                stmt.setInt(2, group.getFlags());
1374                stmt.setString(3, group.getParentId().toString());
1375                stmt.setString(4, group.getId().toString());
1376                stmt.executeUpdate();
1377
1378            } catch (SQLException JavaDoc e) {
1379                throw new CmsDbSqlException(Messages.get().container(
1380                    Messages.ERR_GENERIC_SQL_1,
1381                    CmsDbSqlException.getErrorQuery(stmt)), e);
1382            } finally {
1383                m_sqlManager.closeAll(dbc, conn, stmt, null);
1384            }
1385        } else {
1386            throw new CmsDbEntryNotFoundException(org.opencms.db.Messages.get().container(
1387                org.opencms.db.Messages.ERR_UNKNOWN_GROUP_1,
1388                group.getName()));
1389        }
1390    }
1391
1392    /**
1393     * @see org.opencms.db.I_CmsUserDriver#writePassword(org.opencms.db.CmsDbContext, java.lang.String, int, java.lang.String, java.lang.String)
1394     */

1395    public void writePassword(CmsDbContext dbc, String JavaDoc userName, int type, String JavaDoc oldPassword, String JavaDoc newPassword)
1396    throws CmsDataAccessException, CmsPasswordEncryptionException {
1397
1398        PreparedStatement JavaDoc stmt = null;
1399        Connection JavaDoc conn = null;
1400
1401        // TODO: if old password is not null, check if it is valid
1402
// TODO: use type in user selection
1403
try {
1404            conn = m_sqlManager.getConnection(dbc);
1405            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_SETPW");
1406            stmt.setString(1, OpenCms.getPasswordHandler().digest(newPassword));
1407            stmt.setString(2, userName);
1408            stmt.executeUpdate();
1409        } catch (SQLException JavaDoc e) {
1410            throw new CmsDbSqlException(Messages.get().container(
1411                Messages.ERR_GENERIC_SQL_1,
1412                CmsDbSqlException.getErrorQuery(stmt)), e);
1413        } finally {
1414            m_sqlManager.closeAll(dbc, conn, stmt, null);
1415        }
1416    }
1417
1418    /**
1419     * @see org.opencms.db.I_CmsUserDriver#writeUser(org.opencms.db.CmsDbContext, org.opencms.file.CmsUser)
1420     */

1421    public void writeUser(CmsDbContext dbc, CmsUser user) throws CmsDataAccessException {
1422
1423        PreparedStatement JavaDoc stmt = null;
1424        Connection JavaDoc conn = null;
1425
1426        try {
1427            conn = m_sqlManager.getConnection(dbc);
1428            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_WRITE");
1429            // write data to database
1430
stmt.setString(1, m_sqlManager.validateEmpty(user.getDescription()));
1431            stmt.setString(2, m_sqlManager.validateEmpty(user.getFirstname()));
1432            stmt.setString(3, m_sqlManager.validateEmpty(user.getLastname()));
1433            stmt.setString(4, m_sqlManager.validateEmpty(user.getEmail()));
1434            stmt.setLong(5, user.getLastlogin());
1435            stmt.setInt(6, user.getFlags());
1436            m_sqlManager.setBytes(stmt, 7, internalSerializeAdditionalUserInfo(user.getAdditionalInfo()));
1437            stmt.setString(8, m_sqlManager.validateEmpty(user.getAddress()));
1438            stmt.setInt(9, user.getType());
1439            stmt.setString(10, user.getId().toString());
1440            stmt.executeUpdate();
1441        } catch (SQLException JavaDoc e) {
1442            throw new CmsDbSqlException(Messages.get().container(
1443                Messages.ERR_GENERIC_SQL_1,
1444                CmsDbSqlException.getErrorQuery(stmt)), e);
1445        } catch (IOException JavaDoc e) {
1446            throw new CmsDbIoException(
1447                Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, user.getName()),
1448                e);
1449        } finally {
1450            m_sqlManager.closeAll(dbc, conn, stmt, null);
1451        }
1452    }
1453
1454    /**
1455     * @see org.opencms.db.I_CmsUserDriver#writeUserType(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, int)
1456     */

1457    public void writeUserType(CmsDbContext dbc, CmsUUID userId, int userType) throws CmsDataAccessException {
1458
1459        PreparedStatement JavaDoc stmt = null;
1460        Connection JavaDoc conn = null;
1461
1462        try {
1463            conn = m_sqlManager.getConnection(dbc);
1464            stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_UPDATE_USERTYPE");
1465
1466            // write data to database
1467
stmt.setInt(1, userType);
1468            stmt.setString(2, userId.toString());
1469            stmt.executeUpdate();
1470        } catch (SQLException JavaDoc e) {
1471            throw new CmsDbSqlException(Messages.get().container(
1472                Messages.ERR_GENERIC_SQL_1,
1473                CmsDbSqlException.getErrorQuery(stmt)), e);
1474        } finally {
1475            m_sqlManager.closeAll(dbc, conn, stmt, null);
1476        }
1477    }
1478
1479    /**
1480     * @see java.lang.Object#finalize()
1481     */

1482    protected void finalize() throws Throwable JavaDoc {
1483
1484        try {
1485            m_sqlManager = null;
1486            m_driverManager = null;
1487        } catch (Throwable JavaDoc t) {
1488            // ignore
1489
}
1490        super.finalize();
1491    }
1492
1493    /**
1494     * Semi-constructor to create a CmsGroup instance from a JDBC result set.
1495     * @param res the JDBC ResultSet
1496     *
1497     * @return CmsGroup the new CmsGroup object
1498     * @throws SQLException in case the result set does not include a requested table attribute
1499     */

1500    protected CmsGroup internalCreateGroup(ResultSet JavaDoc res) throws SQLException JavaDoc {
1501
1502        return new CmsGroup(
1503            new CmsUUID(res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_ID"))),
1504            new CmsUUID(res.getString(m_sqlManager.readQuery("C_GROUPS_PARENT_GROUP_ID"))),
1505            res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_NAME")),
1506            res.getString(m_sqlManager.readQuery("C_GROUPS_GROUP_DESCRIPTION")),
1507            res.getInt(m_sqlManager.readQuery("C_GROUPS_GROUP_FLAGS")));
1508    }
1509
1510    /**
1511     * Semi-constructor to create a CmsUser instance from a JDBC result set.
1512     * @param res the JDBC ResultSet
1513     *
1514     * @return CmsUser the new CmsUser object
1515     * @throws SQLException in case the result set does not include a requested table attribute
1516     * @throws IOException if there is an error in deserializing the user info
1517     * @throws ClassNotFoundException if there is an error in deserializing the user info
1518     */

1519    protected CmsUser internalCreateUser(ResultSet JavaDoc res) throws SQLException JavaDoc, IOException JavaDoc, ClassNotFoundException JavaDoc {
1520
1521        String JavaDoc userName = res.getString(m_sqlManager.readQuery("C_USERS_USER_NAME"));
1522
1523        // deserialize the additional userinfo hash
1524
ByteArrayInputStream JavaDoc bin = new ByteArrayInputStream JavaDoc(m_sqlManager.getBytes(
1525            res,
1526            m_sqlManager.readQuery("C_USERS_USER_INFO")));
1527        ObjectInputStream JavaDoc oin = new ObjectInputStream JavaDoc(bin);
1528
1529        Map JavaDoc info;
1530        // ensure the user is read even if it's additional infos are defect
1531
try {
1532            info = (Map JavaDoc)oin.readObject();
1533        } catch (IOException JavaDoc e) {
1534            CmsMessageContainer message = Messages.get().container(Messages.ERR_READING_ADDITIONAL_INFO_1, userName);
1535            LOG.error(message.key(), e);
1536
1537            info = new HashMap JavaDoc();
1538        }
1539
1540        return new CmsUser(
1541            new CmsUUID(res.getString(m_sqlManager.readQuery("C_USERS_USER_ID"))),
1542            userName,
1543            res.getString(m_sqlManager.readQuery("C_USERS_USER_PASSWORD")),
1544            res.getString(m_sqlManager.readQuery("C_USERS_USER_DESCRIPTION")),
1545            res.getString(m_sqlManager.readQuery("C_USERS_USER_FIRSTNAME")),
1546            res.getString(m_sqlManager.readQuery("C_USERS_USER_LASTNAME")),
1547            res.getString(m_sqlManager.readQuery("C_USERS_USER_EMAIL")),
1548            res.getLong(m_sqlManager.readQuery("C_USERS_USER_LASTLOGIN")),
1549            res.getInt(m_sqlManager.readQuery("C_USERS_USER_FLAGS")),
1550            info,
1551            res.getString(m_sqlManager.readQuery("C_USERS_USER_ADDRESS")),
1552            res.getInt(m_sqlManager.readQuery("C_USERS_USER_TYPE")));
1553    }
1554
1555    /**
1556     * Serialize additional user information to write it as byte array in the database.<p>
1557     *
1558     * @param additionalUserInfo the HashTable with additional information
1559     * @return byte[] the byte array which is written to the db
1560     * @throws IOException if something goes wrong
1561     */

1562    protected byte[] internalSerializeAdditionalUserInfo(Map JavaDoc additionalUserInfo) throws IOException JavaDoc {
1563
1564        // serialize the hashtable
1565
ByteArrayOutputStream JavaDoc bout = new ByteArrayOutputStream JavaDoc();
1566        ObjectOutputStream JavaDoc oout = new ObjectOutputStream JavaDoc(bout);
1567        oout.writeObject(additionalUserInfo != null ? new Hashtable JavaDoc(additionalUserInfo) : null);
1568        oout.close();
1569
1570        return bout.toByteArray();
1571    }
1572
1573    /**
1574     * Initializes the default users and groups.<p>
1575     *
1576     * @param dbc the current database context
1577     *
1578     * @throws CmsDataAccessException if something goes wrong
1579     * @throws CmsPasswordEncryptionException if a password of a default user could not be encrypted
1580     */

1581    private void fillDefaults(CmsDbContext dbc) throws CmsDataAccessException, CmsPasswordEncryptionException {
1582
1583        String JavaDoc guestGroup = OpenCms.getDefaultUsers().getGroupGuests();
1584        String JavaDoc administratorsGroup = OpenCms.getDefaultUsers().getGroupAdministrators();
1585        String JavaDoc usersGroup = OpenCms.getDefaultUsers().getGroupUsers();
1586        String JavaDoc projectmanagersGroup = OpenCms.getDefaultUsers().getGroupProjectmanagers();
1587        String JavaDoc guestUser = OpenCms.getDefaultUsers().getUserGuest();
1588        String JavaDoc adminUser = OpenCms.getDefaultUsers().getUserAdmin();
1589        String JavaDoc exportUser = OpenCms.getDefaultUsers().getUserExport();
1590
1591        CmsGroup guests, administrators, users, projectmanager;
1592        CmsUser guest, admin, export;
1593
1594        guests = createGroup(
1595            dbc,
1596            CmsUUID.getConstantUUID(guestGroup),
1597            guestGroup,
1598            "The guest group",
1599            I_CmsPrincipal.FLAG_ENABLED,
1600            null,
1601            null);
1602        administrators = createGroup(
1603            dbc,
1604            CmsUUID.getConstantUUID(administratorsGroup),
1605            administratorsGroup,
1606            "The administrators group",
1607            I_CmsPrincipal.FLAG_ENABLED | I_CmsPrincipal.FLAG_GROUP_PROJECT_MANAGER,
1608            null,
1609            null);
1610        users = createGroup(
1611            dbc,
1612            CmsUUID.getConstantUUID(usersGroup),
1613            usersGroup,
1614            "The users group",
1615            I_CmsPrincipal.FLAG_ENABLED
1616                | I_CmsPrincipal.FLAG_GROUP_WORKFLOW_ROLE
1617                | I_CmsPrincipal.FLAG_GROUP_PROJECT_USER,
1618            null,
1619            null);
1620        projectmanager = createGroup(
1621            dbc,
1622            CmsUUID.getConstantUUID(projectmanagersGroup),
1623            projectmanagersGroup,
1624            "The projectmanager group",
1625            I_CmsPrincipal.FLAG_ENABLED
1626                | I_CmsPrincipal.FLAG_GROUP_PROJECT_MANAGER
1627                | I_CmsPrincipal.FLAG_GROUP_PROJECT_USER
1628                | I_CmsPrincipal.FLAG_GROUP_WORKFLOW_ROLE,
1629            users.getName(),
1630            null);
1631
1632        guest = importUser(
1633            dbc,
1634            CmsUUID.getConstantUUID(guestUser),
1635            guestUser,
1636            OpenCms.getPasswordHandler().digest(""),
1637            "The guest user",
1638            " ",
1639            " ",
1640            " ",
1641            0,
1642            I_CmsPrincipal.FLAG_ENABLED,
1643            new Hashtable JavaDoc(),
1644            " ",
1645            CmsUser.USER_TYPE_SYSTEMUSER,
1646            null);
1647        admin = importUser(
1648            dbc,
1649            CmsUUID.getConstantUUID(adminUser),
1650            adminUser,
1651            OpenCms.getPasswordHandler().digest("admin"),
1652            "The admin user",
1653            " ",
1654            " ",
1655            " ",
1656            0,
1657            I_CmsPrincipal.FLAG_ENABLED,
1658            new Hashtable JavaDoc(),
1659            " ",
1660            CmsUser.USER_TYPE_SYSTEMUSER,
1661            null);
1662
1663        createUserInGroup(dbc, guest.getId(), guests.getId(), null);
1664        createUserInGroup(dbc, admin.getId(), administrators.getId(), null);
1665
1666        if (!exportUser.equals(OpenCms.getDefaultUsers().getUserAdmin())
1667            && !exportUser.equals(OpenCms.getDefaultUsers().getUserGuest())) {
1668
1669            export = importUser(
1670                dbc,
1671                CmsUUID.getConstantUUID(exportUser),
1672                exportUser,
1673                OpenCms.getPasswordHandler().digest((new CmsUUID()).toString()),
1674                "The static export user",
1675                " ",
1676                " ",
1677                " ",
1678                0,
1679                I_CmsPrincipal.FLAG_ENABLED,
1680                Collections.EMPTY_MAP,
1681                " ",
1682                CmsUser.USER_TYPE_SYSTEMUSER,
1683                null);
1684            createUserInGroup(dbc, export.getId(), guests.getId(), null);
1685        }
1686
1687        if (CmsLog.INIT.isInfoEnabled()) {
1688            CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_USER_GROUP_DEFAULTS_INITIALIZED_0));
1689        }
1690
1691        // avoid warning
1692
projectmanager.setEnabled(true);
1693    }
1694
1695    /**
1696     * Internal helper method to create an access control entry from a database record.<p>
1697     *
1698     * @param res resultset of the current query
1699     * @return a new CmsAccessControlEntry initialized with the values from the current database record
1700     * @throws SQLException if something goes wrong
1701     */

1702    private CmsAccessControlEntry internalCreateAce(ResultSet JavaDoc res) throws SQLException JavaDoc {
1703
1704        return new CmsAccessControlEntry(
1705            new CmsUUID(res.getString(m_sqlManager.readQuery("C_ACCESS_RESOURCE_ID"))),
1706            new CmsUUID(res.getString(m_sqlManager.readQuery("C_ACCESS_PRINCIPAL_ID"))),
1707            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_ALLOWED")),
1708            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_DENIED")),
1709            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_FLAGS")));
1710    }
1711
1712    /**
1713     * Internal helper method to create an access control entry from a database record.<p>
1714     *
1715     * @param res resultset of the current query
1716     * @param newId the id of the new access control entry
1717     * @return a new CmsAccessControlEntry initialized with the values from the current database record
1718     * @throws SQLException if something goes wrong
1719     */

1720    private CmsAccessControlEntry internalCreateAce(ResultSet JavaDoc res, CmsUUID newId) throws SQLException JavaDoc {
1721
1722        // this method is final to allow the java compiler to inline this code!
1723

1724        return new CmsAccessControlEntry(
1725            newId,
1726            new CmsUUID(res.getString(m_sqlManager.readQuery("C_ACCESS_PRINCIPAL_ID"))),
1727            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_ALLOWED")),
1728            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_DENIED")),
1729            res.getInt(m_sqlManager.readQuery("C_ACCESS_ACCESS_FLAGS")));
1730    }
1731
1732    /**
1733     * Checks if a user is member of a group.<P/>
1734     *
1735     * @param dbc the database context
1736     * @param userId the id of the user to check
1737     * @param groupId the id of the group to check
1738     * @param reservedParam reserved optional parameter, should be null on standard OpenCms installations
1739     *
1740     * @return true if user is member of group
1741     *
1742     * @throws CmsDataAccessException if operation was not succesful
1743     */

1744    private boolean internalValidateUserInGroup(CmsDbContext dbc, CmsUUID userId, CmsUUID groupId, Object JavaDoc reservedParam)
1745    throws CmsDataAccessException {
1746
1747        boolean userInGroup = false;
1748        PreparedStatement JavaDoc stmt = null;
1749        ResultSet JavaDoc res = null;
1750        Connection JavaDoc conn = null;
1751
1752        try {
1753            if (reservedParam == null) {
1754                // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
1755
conn = m_sqlManager.getConnection(dbc);
1756            } else {
1757                // get a JDBC connection from the reserved JDBC pools
1758
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
1759            }
1760
1761            stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_USERINGROUP");
1762
1763            stmt.setString(1, groupId.toString());
1764            stmt.setString(2, userId.toString());
1765            res = stmt.executeQuery();
1766            if (res.next()) {
1767                userInGroup = true;
1768            }
1769        } catch (SQLException JavaDoc e) {
1770            throw new CmsDbSqlException(Messages.get().container(
1771                Messages.ERR_GENERIC_SQL_1,
1772                CmsDbSqlException.getErrorQuery(stmt)), e);
1773        } finally {
1774            m_sqlManager.closeAll(dbc, conn, stmt, res);
1775        }
1776
1777        return userInGroup;
1778    }
1779
1780}
Popular Tags