# HG changeset patch # User Sascha L. Teichmann # Date 1299065043 0 # Node ID b90e831d3dfeb01981ceb666644aa125b2a3b292 # Parent f92ad0e40df25f47b9a523f3f043ad99af99c2df Call database to create a new user. artifacts/trunk@1363 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r f92ad0e40df2 -r b90e831d3dfe ChangeLog --- a/ChangeLog Wed Mar 02 11:07:21 2011 +0000 +++ b/ChangeLog Wed Mar 02 11:24:03 2011 +0000 @@ -1,3 +1,8 @@ +2011-03-02 Sascha L. Teichmann + + * artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java: + Call database to create a new user. + 2011-03-02 Ingo Weinzierl * artifact-database/src/main/java/de/intevation/artifactdatabase/rest/UserResource.java: diff -r f92ad0e40df2 -r b90e831d3dfe artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Wed Mar 02 11:07:21 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Wed Mar 02 11:24:03 2011 +0000 @@ -13,6 +13,8 @@ import de.intevation.artifacts.ArtifactSerializer; import de.intevation.artifacts.User; +import de.intevation.artifacts.common.utils.XMLUtils; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -793,7 +795,77 @@ String name, Document role ) { - // TODO: implement me! + Connection connection = null; + PreparedStatement stmnt_next_id = null; + PreparedStatement stmnt_insert = null; + ResultSet res_id = null; + + String identifier = newIdentifier(); + + DataSource dataSource = DBConnection.getDataSource(); + try { + connection = dataSource.getConnection(); + try { + connection.setAutoCommit(false); + + stmnt_next_id = connection.prepareStatement(SQL_USERS_NEXT_ID); + stmnt_insert = connection.prepareStatement(SQL_USERS_INSERT); + + res_id = stmnt_next_id.executeQuery(); + + if (!res_id.next()) { + throw new RuntimeException("No id generated"); + } + + int id = res_id.getInt(1); + + stmnt_insert.setInt(1, id); + stmnt_insert.setString(2, identifier); + stmnt_insert.setString(3, name); + + byte [] roleData = role == null + ? null + : XMLUtils.toByteArray(role); + + if (roleData == null) { + stmnt_insert.setNull(4, Types.BIGINT); + } + else { + stmnt_insert.setBytes(4, roleData); + } + + stmnt_insert.execute(); + + connection.commit(); + + return new DefaultUser(identifier, name, role); + } + catch (SQLException sqle) { + connection.rollback(); + throw sqle; + } + } + catch (SQLException sqle) { + logger.error(sqle.getLocalizedMessage(), sqle); + } + finally { + if (res_id != null) { + try { res_id.close(); } + catch (SQLException sqle) {} + } + if (stmnt_insert != null) { + try { stmnt_insert.close(); } + catch (SQLException sqle) {} + } + if (stmnt_next_id != null) { + try { stmnt_next_id.close(); } + catch (SQLException sqle) {} + } + if (connection != null) { + try { connection.close(); } + catch (SQLException sqle) {} + } + } return null; }