| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.handlers; |
| 2 | |
| margaretha | 992178e | 2017-02-10 13:21:21 +0100 | [diff] [blame] | 3 | import java.util.Collection; |
| 4 | import java.util.HashMap; |
| 5 | import java.util.List; |
| 6 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 7 | import org.slf4j.Logger; |
| Michael Hanl | ac113e5 | 2016-01-19 15:49:20 +0100 | [diff] [blame] | 8 | import org.slf4j.LoggerFactory; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 9 | import org.springframework.dao.DataAccessException; |
| 10 | import org.springframework.dao.IncorrectResultSizeDataAccessException; |
| 11 | import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; |
| 12 | import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; |
| 13 | import org.springframework.jdbc.support.GeneratedKeyHolder; |
| 14 | import org.springframework.jdbc.support.KeyHolder; |
| 15 | |
| margaretha | 992178e | 2017-02-10 13:21:21 +0100 | [diff] [blame] | 16 | import de.ids_mannheim.korap.config.Attributes; |
| 17 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 18 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| margaretha | 82c061e | 2017-04-18 18:03:11 +0200 | [diff] [blame^] | 19 | import de.ids_mannheim.korap.exceptions.DatabaseException; |
| margaretha | 992178e | 2017-02-10 13:21:21 +0100 | [diff] [blame] | 20 | import de.ids_mannheim.korap.interfaces.db.PersistenceClient; |
| 21 | import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface; |
| 22 | import de.ids_mannheim.korap.resources.KustvaktResource; |
| 23 | import de.ids_mannheim.korap.resources.ResourceFactory; |
| 24 | import de.ids_mannheim.korap.user.User; |
| 25 | import de.ids_mannheim.korap.utils.SqlBuilder; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 26 | |
| 27 | /** |
| 28 | * Created by hanl on 7/21/14. |
| 29 | */ |
| 30 | //todo: auditing // testing |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 31 | public class ResourceDao<T extends KustvaktResource> |
| 32 | implements ResourceOperationIface<T> { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 33 | |
| Michael Hanl | ac113e5 | 2016-01-19 15:49:20 +0100 | [diff] [blame] | 34 | private static Logger log = LoggerFactory.getLogger(ResourceDao.class); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 35 | protected final NamedParameterJdbcTemplate jdbcTemplate; |
| 36 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 37 | |
| 38 | public ResourceDao (PersistenceClient client) { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 39 | this.jdbcTemplate = (NamedParameterJdbcTemplate) client.getSource(); |
| 40 | } |
| 41 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 42 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 43 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 44 | public Class<T> type () { |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 45 | return (Class<T>) KustvaktResource.class; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 46 | } |
| 47 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 48 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 49 | // todo: testing |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 50 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 51 | public List<T> getResources (Collection<Object> ids, User user) |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 52 | throws KustvaktException { |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 53 | String sql = "SELECT rs.*, rt.name_path FROM resource_store as rs inner join resource_tree as rt" |
| 54 | + " on rs.id=rt.child_id WHERE rs.id IN (:ids);"; |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 55 | MapSqlParameterSource parameters = new MapSqlParameterSource(); |
| 56 | parameters.addValue("ids", ids); |
| 57 | try { |
| 58 | return (List<T>) this.jdbcTemplate.query(sql, parameters, |
| 59 | new RowMapperFactory.ResourceMapper()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 60 | } |
| 61 | catch (DataAccessException e) { |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 62 | log.error( |
| 63 | "Exception during database retrieval for ids '" + ids + "'", |
| 64 | e); |
| margaretha | 82c061e | 2017-04-18 18:03:11 +0200 | [diff] [blame^] | 65 | throw new DatabaseException(user.getId(), "resource_store", |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 66 | StatusCodes.DB_GET_FAILED, |
| 67 | "Exception during database retrieval for ids '" + ids, |
| 68 | ids.toString()); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 69 | } |
| 70 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 71 | } |
| 72 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 73 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 74 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 75 | public int updateResource (T resource, User user) throws KustvaktException { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 76 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 77 | source.addValue("id", resource.getPersistentID()); |
| 78 | source.addValue("name", resource.getName()); |
| 79 | source.addValue("desc", resource.getDescription()); |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 80 | source.addValue("data", resource.getStringData()); |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 81 | final String sql = "UPDATE resource_store set name=:name, data=:data, description=:desc where persistent_id=:id;"; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 82 | try { |
| 83 | return this.jdbcTemplate.update(sql, source); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 84 | } |
| 85 | catch (DataAccessException e) { |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 86 | log.error("Exception during database update for id '" |
| 87 | + resource.getPersistentID() + "'", e); |
| margaretha | 82c061e | 2017-04-18 18:03:11 +0200 | [diff] [blame^] | 88 | throw new DatabaseException(user.getId(), "resource_store", |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 89 | StatusCodes.DB_UPDATE_FAILED, "Exception during database update for id '" |
| 90 | + resource.getPersistentID(), resource.toString()); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 91 | } |
| 92 | } |
| 93 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 94 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 95 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 96 | public int[] updateResources (List<T> resources, User user) |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 97 | throws KustvaktException { |
| 98 | return new int[1]; |
| 99 | } |
| 100 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 101 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 102 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 103 | public <T extends KustvaktResource> T findbyId (String id, User user) |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 104 | throws KustvaktException { |
| 105 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 106 | source.addValue("pid", id); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 107 | String sql = "SELECT rs.*, rt.name_path FROM resource_store as rs inner join resource_tree as rt" |
| margaretha | 5af8237 | 2017-02-16 14:22:58 +0100 | [diff] [blame] | 108 | + " on rs.id=rt.child_id WHERE rs.persistent_id=:pid"; |
| 109 | //group by rs.id;"; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 110 | try { |
| 111 | return (T) this.jdbcTemplate.queryForObject(sql, source, |
| 112 | new RowMapperFactory.ResourceMapper()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 113 | } |
| 114 | catch (DataAccessException e) { |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 115 | // empty results |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 116 | return null; |
| 117 | } |
| 118 | } |
| 119 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 120 | |
| 121 | public KustvaktResource findbyPath (String path, User user) |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 122 | throws KustvaktException { |
| 123 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 124 | source.addValue("path", path); |
| 125 | String sql = "SELECT rs.*, rt.name_path FROM resource_store as rs inner join resource_tree as rt on rs.id=rt.child_id WHERE rt.name_path=:path;"; |
| 126 | try { |
| 127 | return this.jdbcTemplate.queryForObject(sql, source, |
| 128 | new RowMapperFactory.ResourceMapper()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 129 | } |
| 130 | catch (DataAccessException e) { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 131 | if (e instanceof IncorrectResultSizeDataAccessException) |
| 132 | throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT, |
| 133 | "invalid request path given!", path); |
| 134 | return null; |
| 135 | } |
| 136 | } |
| 137 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 138 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 139 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 140 | public <T extends KustvaktResource> T findbyId (Integer id, User user) |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 141 | throws KustvaktException { |
| 142 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 143 | source.addValue("id", id); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 144 | String sql = "SELECT rs.*, rt.name_path FROM resource_store as rs inner join resource_tree as rt on rs.id=rt.child_id " |
| 145 | + "WHERE rs.id=:id group by rs.id order by rt.depth desc;"; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 146 | try { |
| 147 | return (T) this.jdbcTemplate.queryForObject(sql, source, |
| 148 | new RowMapperFactory.ResourceMapper()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 149 | } |
| 150 | catch (DataAccessException e) { |
| Michael Hanl | 7368aa4 | 2016-02-05 18:15:47 +0100 | [diff] [blame] | 151 | if (e instanceof IncorrectResultSizeDataAccessException) |
| 152 | throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT, |
| 153 | "invalid request id given!", String.valueOf(id)); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 154 | return null; |
| 155 | } |
| 156 | } |
| 157 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 158 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 159 | @Override |
| Michael Hanl | cb2d3f9 | 2016-06-02 17:34:06 +0200 | [diff] [blame] | 160 | public <T1 extends KustvaktResource> List<T1> findbyPartialId (String id, |
| 161 | User user) throws KustvaktException { |
| 162 | return null; |
| 163 | } |
| 164 | |
| 165 | |
| 166 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 167 | public int storeResource (T resource, User user) throws KustvaktException { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 168 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 169 | KeyHolder holder = new GeneratedKeyHolder(); |
| 170 | // parent_id necessary so trigger can be used for tree insert! |
| 171 | final String sql, parid; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 172 | SqlBuilder b = new SqlBuilder("resource_store"); |
| 173 | b.insert(Attributes.NAME, Attributes.PARENT_ID, |
| 174 | Attributes.PERSISTENT_ID, Attributes.DESCRIPTION, |
| 175 | Attributes.CREATOR, Attributes.TYPE, Attributes.CREATED); |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 176 | b.params( |
| 177 | ":name, :parent, :pid, :desc, :ow, :type, :created, :dtype, :data"); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 178 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 179 | if (resource.getParentID() == null) { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 180 | sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created, data) " |
| 181 | + "VALUES (:name, :parent, :pid, :desc, :ow, :type, :created, :data);"; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 182 | parid = null; |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 183 | } |
| 184 | else { |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 185 | // fixme: use trigger for consistency check! |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 186 | sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created, data) " |
| 187 | + "select :name, id, :pid, :desc, :ow, :type, :created, :data from resource_store where persistent_id=:parent;"; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 188 | parid = resource.getParentID(); |
| 189 | } |
| 190 | |
| 191 | source.addValue("name", resource.getName()); |
| 192 | source.addValue("pid", resource.getPersistentID()); |
| 193 | source.addValue("parent", parid); |
| Michael Hanl | c444602 | 2016-02-12 18:03:17 +0100 | [diff] [blame] | 194 | source.addValue("ow", user.getId()); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 195 | source.addValue("desc", resource.getDescription()); |
| 196 | source.addValue("type", |
| 197 | ResourceFactory.getResourceMapping(resource.getClass())); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 198 | source.addValue("created", System.currentTimeMillis()); |
| margaretha | 992178e | 2017-02-10 13:21:21 +0100 | [diff] [blame] | 199 | source.addValue("data", resource.getStringData()); |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 200 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 201 | try { |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 202 | this.jdbcTemplate.update(sql, source, holder, |
| 203 | new String[] { "id" }); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 204 | } |
| 205 | catch (DataAccessException e) { |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 206 | log.error("Exception during database store for id '" |
| 207 | + resource.getPersistentID() + "'", e); |
| margaretha | 82c061e | 2017-04-18 18:03:11 +0200 | [diff] [blame^] | 208 | throw new DatabaseException(user.getId(), "resource_store", |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 209 | StatusCodes.DB_INSERT_FAILED, |
| 210 | "Exception during database store for id '" |
| 211 | + resource.getPersistentID(), |
| 212 | resource.toString()); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 213 | } |
| 214 | resource.setId(holder.getKey().intValue()); |
| 215 | return resource.getId(); |
| 216 | } |
| 217 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 218 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 219 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 220 | public int deleteResource (String id, User user) throws KustvaktException { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 221 | MapSqlParameterSource source = new MapSqlParameterSource(); |
| 222 | source.addValue("id", id); |
| 223 | final String sql = "DELETE FROM resource_store WHERE persistent_id=:id;"; |
| 224 | try { |
| 225 | return this.jdbcTemplate.update(sql, source); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 226 | } |
| 227 | catch (DataAccessException e) { |
| margaretha | 82c061e | 2017-04-18 18:03:11 +0200 | [diff] [blame^] | 228 | throw new DatabaseException(user.getId(), "resource_store", |
| margaretha | 7e16d6f | 2017-04-18 18:01:59 +0200 | [diff] [blame] | 229 | StatusCodes.DB_DELETE_FAILED, "Operation DELETE failed.", |
| 230 | id); |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 231 | } |
| 232 | } |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 233 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 234 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 235 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 236 | public int size () { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 237 | final String sql = "SELECT COUNT(*) FROM resource_store;"; |
| 238 | try { |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 239 | return this.jdbcTemplate.queryForObject(sql, |
| 240 | new HashMap<String, Object>(), Integer.class); |
| 241 | } |
| 242 | catch (DataAccessException e) { |
| Michael Hanl | c444602 | 2016-02-12 18:03:17 +0100 | [diff] [blame] | 243 | return 0; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 244 | } |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 245 | } |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 246 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 247 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 248 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 249 | public int truncate () { |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 250 | final String sql = "DELETE FROM resource_store;"; |
| 251 | try { |
| 252 | return this.jdbcTemplate.update(sql, new HashMap<String, Object>()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 253 | } |
| 254 | catch (DataAccessException e) { |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 255 | return -1; |
| 256 | } |
| 257 | } |
| Michael Hanl | f8fcc7a | 2016-06-03 17:41:07 +0200 | [diff] [blame] | 258 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 259 | } |