KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src/org/opencms/db/postgresql/CmsUserDriver.java,v $
3  * Date : $Date: 2006/03/27 14:53:04 $
4  * Version: $Revision: 1.17 $
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.postgresql;
33
34 import org.opencms.db.CmsDbContext;
35 import org.opencms.db.CmsDbEntryAlreadyExistsException;
36 import org.opencms.db.CmsDbEntryNotFoundException;
37 import org.opencms.db.CmsDbIoException;
38 import org.opencms.db.CmsDbSqlException;
39 import org.opencms.db.generic.CmsSqlManager;
40 import org.opencms.db.generic.Messages;
41 import org.opencms.file.CmsDataAccessException;
42 import org.opencms.file.CmsGroup;
43 import org.opencms.file.CmsUser;
44 import org.opencms.i18n.CmsMessageContainer;
45 import org.opencms.main.CmsLog;
46 import org.opencms.main.OpenCms;
47 import org.opencms.security.CmsPasswordEncryptionException;
48 import org.opencms.util.CmsStringUtil;
49 import org.opencms.util.CmsUUID;
50
51 import java.io.IOException JavaDoc;
52 import java.sql.Connection JavaDoc;
53 import java.sql.PreparedStatement JavaDoc;
54 import java.sql.SQLException JavaDoc;
55 import java.util.Map JavaDoc;
56
57 import org.apache.commons.logging.Log;
58
59 /**
60  * PostgreSql implementation of the user driver methods.<p>
61  *
62  * @author Antonio Core
63  *
64  * @version $Revision: 1.17 $
65  *
66  * @since 6.0.0
67  */

68 public class CmsUserDriver extends org.opencms.db.generic.CmsUserDriver {
69
70     /** The log object for this class. */
71     private static final Log LOG = CmsLog.getLog(CmsUserDriver.class);
72
73     /**
74      * @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)
75      */

76     public CmsGroup createGroup(
77         CmsDbContext dbc,
78         CmsUUID groupId,
79         String JavaDoc groupName,
80         String JavaDoc description,
81         int flags,
82         String JavaDoc parentGroupName,
83         Object JavaDoc reservedParam) throws CmsDataAccessException {
84
85         CmsUUID parentId = CmsUUID.getNullUUID();
86         CmsGroup group = null;
87         Connection JavaDoc conn = null;
88         PreparedStatement JavaDoc stmt = null;
89
90         if (existsGroup(dbc, groupName, reservedParam)) {
91             CmsMessageContainer message = Messages.get().container(
92                 Messages.ERR_GROUP_WITH_NAME_ALREADY_EXISTS_1,
93                 groupName);
94             if (LOG.isErrorEnabled()) {
95                 LOG.error(message.key());
96             }
97             throw new CmsDbEntryAlreadyExistsException(message);
98         }
99
100         try {
101             // get the id of the parent group if necessary
102
if (CmsStringUtil.isNotEmpty(parentGroupName)) {
103                 parentId = readGroup(dbc, parentGroupName).getId();
104             }
105
106             if (reservedParam == null) {
107                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
108
conn = m_sqlManager.getConnection(dbc);
109             } else {
110                 // get a JDBC connection from the reserved JDBC pools
111
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
112             }
113
114             stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_CREATEGROUP");
115
116             // write new group to the database
117
stmt.setString(1, groupId.toString());
118             stmt.setString(2, parentId.toString());
119             stmt.setString(3, groupName);
120             stmt.setString(4, description);
121             stmt.setInt(5, flags);
122             stmt.executeUpdate();
123
124             group = new CmsGroup(groupId, parentId, groupName, description, flags);
125         } catch (SQLException JavaDoc e) {
126             throw new CmsDbSqlException(org.opencms.db.generic.Messages.get().container(
127                 org.opencms.db.generic.Messages.ERR_GENERIC_SQL_1,
128                 CmsDbSqlException.getErrorQuery(stmt)), e);
129         } finally {
130             m_sqlManager.closeAll(dbc, conn, stmt, null);
131         }
132
133         return group;
134     }
135
136     /**
137      * @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)
138      */

139     public CmsUser createUser(
140         CmsDbContext dbc,
141         String JavaDoc name,
142         String JavaDoc password,
143         String JavaDoc description,
144         String JavaDoc firstname,
145         String JavaDoc lastname,
146         String JavaDoc email,
147         long lastlogin,
148         int flags,
149         Map JavaDoc additionalInfos,
150         String JavaDoc address,
151         int type) throws CmsDataAccessException, CmsPasswordEncryptionException {
152
153         CmsUUID id = new CmsUUID();
154         PreparedStatement JavaDoc stmt = null;
155         Connection JavaDoc conn = null;
156
157         if (existsUser(dbc, name, type, null)) {
158             CmsMessageContainer message = Messages.get().container(Messages.ERR_USER_WITH_NAME_ALREADY_EXISTS_1, name);
159             if (LOG.isErrorEnabled()) {
160                 LOG.error(message.key());
161             }
162             throw new CmsDbEntryAlreadyExistsException(message);
163         }
164
165         try {
166             // user data is project independent- use a "dummy" project ID to receive
167
// a JDBC connection from the offline connection pool
168
conn = m_sqlManager.getConnection(dbc);
169             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_ADD");
170
171             stmt.setString(1, id.toString());
172             stmt.setString(2, name);
173             stmt.setString(3, OpenCms.getPasswordHandler().digest(password));
174             stmt.setString(4, description);
175             stmt.setString(5, firstname);
176             stmt.setString(6, lastname);
177             stmt.setString(7, email);
178             stmt.setLong(8, lastlogin);
179             stmt.setInt(9, flags);
180             stmt.setBytes(10, internalSerializeAdditionalUserInfo(additionalInfos));
181             stmt.setString(11, address);
182             stmt.setInt(12, type);
183
184             stmt.executeUpdate();
185         } catch (SQLException JavaDoc e) {
186             throw new CmsDbSqlException(org.opencms.db.generic.Messages.get().container(
187                 org.opencms.db.generic.Messages.ERR_GENERIC_SQL_1,
188                 CmsDbSqlException.getErrorQuery(stmt)), e);
189         } catch (IOException JavaDoc e) {
190             throw new CmsDbIoException(Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, name), e);
191         } finally {
192             m_sqlManager.closeAll(dbc, conn, stmt, null);
193         }
194
195         return readUser(dbc, id);
196     }
197
198     /**
199      * @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)
200      */

201     public CmsUser importUser(
202         CmsDbContext dbc,
203         CmsUUID id,
204         String JavaDoc name,
205         String JavaDoc password,
206         String JavaDoc description,
207         String JavaDoc firstname,
208         String JavaDoc lastname,
209         String JavaDoc email,
210         long lastlogin,
211         int flags,
212         Map JavaDoc additionalInfos,
213         String JavaDoc address,
214         int type,
215         Object JavaDoc reservedParam) throws CmsDataAccessException {
216
217         Connection JavaDoc conn = null;
218         PreparedStatement JavaDoc stmt = null;
219
220         if (existsUser(dbc, name, type, reservedParam)) {
221             CmsMessageContainer message = Messages.get().container(Messages.ERR_USER_WITH_NAME_ALREADY_EXISTS_1, name);
222             if (LOG.isErrorEnabled()) {
223                 LOG.error(message.key());
224             }
225             throw new CmsDbEntryAlreadyExistsException(message);
226         }
227
228         try {
229             if (reservedParam == null) {
230                 // get a JDBC connection from the OpenCms standard {online|offline|backup} pools
231
conn = m_sqlManager.getConnection(dbc);
232             } else {
233                 // get a JDBC connection from the reserved JDBC pools
234
conn = m_sqlManager.getConnection(dbc, ((Integer JavaDoc)reservedParam).intValue());
235             }
236
237             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_ADD");
238
239             stmt.setString(1, id.toString());
240             stmt.setString(2, name);
241             stmt.setString(3, password);
242             stmt.setString(4, description);
243             stmt.setString(5, firstname);
244             stmt.setString(6, lastname);
245             stmt.setString(7, email);
246             stmt.setLong(8, lastlogin);
247             stmt.setInt(9, flags);
248             stmt.setBytes(10, internalSerializeAdditionalUserInfo(additionalInfos));
249             stmt.setString(11, address);
250             stmt.setInt(12, type);
251             stmt.executeUpdate();
252         } catch (SQLException JavaDoc e) {
253             throw new CmsDbSqlException(org.opencms.db.generic.Messages.get().container(
254                 org.opencms.db.generic.Messages.ERR_GENERIC_SQL_1,
255                 CmsDbSqlException.getErrorQuery(stmt)), e);
256         } catch (IOException JavaDoc e) {
257             throw new CmsDbIoException(Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, name), e);
258         } finally {
259             m_sqlManager.closeAll(dbc, conn, stmt, null);
260         }
261
262         return readUser(dbc, id);
263     }
264
265     /**
266      * @see org.opencms.db.I_CmsUserDriver#initSqlManager(String)
267      */

268     public org.opencms.db.generic.CmsSqlManager initSqlManager(String JavaDoc classname) {
269
270         return CmsSqlManager.getInstance(classname);
271     }
272
273     /**
274      * @see org.opencms.db.I_CmsUserDriver#writeGroup(org.opencms.db.CmsDbContext, org.opencms.file.CmsGroup)
275      */

276     public void writeGroup(CmsDbContext dbc, CmsGroup group) throws CmsDataAccessException {
277
278         PreparedStatement JavaDoc stmt = null;
279         Connection JavaDoc conn = null;
280         if (group != null) {
281             try {
282
283                 // create statement
284
conn = m_sqlManager.getConnection(dbc);
285                 stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_WRITEGROUP");
286
287                 stmt.setString(1, group.getDescription());
288                 stmt.setInt(2, group.getFlags());
289                 stmt.setString(3, group.getParentId().toString());
290                 stmt.setString(4, group.getId().toString());
291                 stmt.executeUpdate();
292
293             } catch (SQLException JavaDoc e) {
294                 throw new CmsDbSqlException(org.opencms.db.generic.Messages.get().container(
295                     org.opencms.db.generic.Messages.ERR_GENERIC_SQL_1,
296                     CmsDbSqlException.getErrorQuery(stmt)), e);
297             } finally {
298                 m_sqlManager.closeAll(dbc, conn, stmt, null);
299             }
300         } else {
301             throw new CmsDbEntryNotFoundException(org.opencms.db.Messages.get().container(
302                 org.opencms.db.Messages.ERR_UNKNOWN_GROUP_1,
303                 group.getName()));
304         }
305     }
306
307     /**
308      * @see org.opencms.db.I_CmsUserDriver#writeUser(org.opencms.db.CmsDbContext, org.opencms.file.CmsUser)
309      */

310     public void writeUser(CmsDbContext dbc, CmsUser user) throws CmsDataAccessException {
311
312         PreparedStatement JavaDoc stmt = null;
313         Connection JavaDoc conn = null;
314
315         try {
316             conn = m_sqlManager.getConnection(dbc);
317             stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_WRITE");
318             // write data to database
319
stmt.setString(1, user.getDescription());
320             stmt.setString(2, user.getFirstname());
321             stmt.setString(3, user.getLastname());
322             stmt.setString(4, user.getEmail());
323             stmt.setLong(5, user.getLastlogin());
324             stmt.setInt(6, user.getFlags());
325             stmt.setBytes(7, internalSerializeAdditionalUserInfo(user.getAdditionalInfo()));
326             stmt.setString(8, user.getAddress());
327             stmt.setInt(9, user.getType());
328             stmt.setString(10, user.getId().toString());
329             stmt.executeUpdate();
330         } catch (SQLException JavaDoc exc) {
331             throw new CmsDbSqlException(org.opencms.db.generic.Messages.get().container(
332                 org.opencms.db.generic.Messages.ERR_GENERIC_SQL_1,
333                 CmsDbSqlException.getErrorQuery(stmt)), exc);
334         } catch (IOException JavaDoc e) {
335             throw new CmsDbIoException(
336                 Messages.get().container(Messages.ERR_SERIALIZING_USER_DATA_1, user.getName()),
337                 e);
338         } finally {
339             m_sqlManager.closeAll(dbc, conn, stmt, null);
340         }
341     }
342
343 }
Popular Tags