1 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 ; 52 import java.sql.Connection ; 53 import java.sql.PreparedStatement ; 54 import java.sql.SQLException ; 55 import java.util.Map ; 56 57 import org.apache.commons.logging.Log; 58 59 68 public class CmsUserDriver extends org.opencms.db.generic.CmsUserDriver { 69 70 71 private static final Log LOG = CmsLog.getLog(CmsUserDriver.class); 72 73 76 public CmsGroup createGroup( 77 CmsDbContext dbc, 78 CmsUUID groupId, 79 String groupName, 80 String description, 81 int flags, 82 String parentGroupName, 83 Object reservedParam) throws CmsDataAccessException { 84 85 CmsUUID parentId = CmsUUID.getNullUUID(); 86 CmsGroup group = null; 87 Connection conn = null; 88 PreparedStatement 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 if (CmsStringUtil.isNotEmpty(parentGroupName)) { 103 parentId = readGroup(dbc, parentGroupName).getId(); 104 } 105 106 if (reservedParam == null) { 107 conn = m_sqlManager.getConnection(dbc); 109 } else { 110 conn = m_sqlManager.getConnection(dbc, ((Integer )reservedParam).intValue()); 112 } 113 114 stmt = m_sqlManager.getPreparedStatement(conn, "C_GROUPS_CREATEGROUP"); 115 116 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 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 139 public CmsUser createUser( 140 CmsDbContext dbc, 141 String name, 142 String password, 143 String description, 144 String firstname, 145 String lastname, 146 String email, 147 long lastlogin, 148 int flags, 149 Map additionalInfos, 150 String address, 151 int type) throws CmsDataAccessException, CmsPasswordEncryptionException { 152 153 CmsUUID id = new CmsUUID(); 154 PreparedStatement stmt = null; 155 Connection 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 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 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 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 201 public CmsUser importUser( 202 CmsDbContext dbc, 203 CmsUUID id, 204 String name, 205 String password, 206 String description, 207 String firstname, 208 String lastname, 209 String email, 210 long lastlogin, 211 int flags, 212 Map additionalInfos, 213 String address, 214 int type, 215 Object reservedParam) throws CmsDataAccessException { 216 217 Connection conn = null; 218 PreparedStatement 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 conn = m_sqlManager.getConnection(dbc); 232 } else { 233 conn = m_sqlManager.getConnection(dbc, ((Integer )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 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 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 268 public org.opencms.db.generic.CmsSqlManager initSqlManager(String classname) { 269 270 return CmsSqlManager.getInstance(classname); 271 } 272 273 276 public void writeGroup(CmsDbContext dbc, CmsGroup group) throws CmsDataAccessException { 277 278 PreparedStatement stmt = null; 279 Connection conn = null; 280 if (group != null) { 281 try { 282 283 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 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 310 public void writeUser(CmsDbContext dbc, CmsUser user) throws CmsDataAccessException { 311 312 PreparedStatement stmt = null; 313 Connection conn = null; 314 315 try { 316 conn = m_sqlManager.getConnection(dbc); 317 stmt = m_sqlManager.getPreparedStatement(conn, "C_USERS_WRITE"); 318 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 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 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 |