source: DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/dao/impl/JdbcVersionDao.java @ 3459

Last change on this file since 3459 was 3459, checked in by olhsha, 11 years ago

making deleters safe in any DAO (except notebooks). that is before delete the resources if checked if it is mentioned in ANY of the joint tables where he is one of the columns. if "yes" then deleting does not happen. Earlier, it was checked only if it is used by a higher-lever resource (i.e. only one joint table was checked).

also, all resource_id row-mappers are moved to the base JdbcResource? class.

File size: 6.5 KB
Line 
1/*
2 * Copyright (C) 2013 DASISH
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17 */
18package eu.dasish.annotation.backend.dao.impl;
19
20import eu.dasish.annotation.backend.dao.VersionDao;
21import eu.dasish.annotation.schema.Version;
22import java.sql.ResultSet;
23import java.sql.SQLException;
24import java.util.HashMap;
25import java.util.List;
26import java.util.Map;
27import java.util.UUID;
28import javax.sql.DataSource;
29import org.springframework.jdbc.core.RowMapper;
30
31/**
32 *
33 * @author olhsha
34 */
35public class JdbcVersionDao extends JdbcResourceDao implements VersionDao {
36
37   
38    public JdbcVersionDao(DataSource dataSource) {
39        setDataSource(dataSource);
40        internalIdName = version_id;
41        resourceTableName = versionTableName;
42    }
43
44 
45    /////////////// GETTERS /////////////////////
46    @Override
47    public Version getVersion(Number internalID) {
48
49        String sql = "SELECT " + versionStar + " FROM " + versionTableName + " WHERE " + version_id + "= ? LIMIT 1";
50        List<Version> result = getSimpleJdbcTemplate().query(sql, versionRowMapper, internalID);
51        if (result.isEmpty()) {
52            return null;
53        }
54        return result.get(0);
55    }
56    private final RowMapper<Version> versionRowMapper = new RowMapper<Version>() {
57        @Override
58        public Version mapRow(ResultSet rs, int rowNumber) throws SQLException {
59            Version result = new Version();
60            // TODO: clarify situation with the attribute cached representation
61            //result.setCachedRepresentations!!! The same situation as with permissions lists: we cannot refer from a filed to a list of smth, we have a separate joint table
62            // TODO: attribute URI (external-id is missing)
63            result.setVersion(rs.getString("external_id"));
64            return result;
65        }
66    };
67
68    ////////////////////////////////////////////////////////////////////////////
69    @Override
70    public List<Number> retrieveCachedRepresentationList(Number versionID) {
71        String sql = "SELECT " + cached_representation_id + " FROM " + versionsCachedRepresentationsTableName + " WHERE " + version_id + "= ?";
72        List<Number> result = getSimpleJdbcTemplate().query(sql, cachedIDRowMapper, versionID);
73        return result;
74    }
75
76 
77   
78    ///////////////////////////////////////////////////////////////
79   
80    @Override
81    public boolean versionIsInUse(Number versionsID) {
82        String sqlSources = "SELECT " + source_id + " FROM " + sourcesVersionsTableName + " WHERE " + version_id + "= ? LIMIT 1";
83        List<Number> resultSources = getSimpleJdbcTemplate().query(sqlSources, sourceIDRowMapper, versionsID);
84        if (resultSources.size() > 0) {
85            return true;
86        }
87        String sqlVersions = "SELECT " + cached_representation_id + " FROM " + versionsCachedRepresentationsTableName + " WHERE " + version_id + "= ? LIMIT 1";
88        List<Number> resultCached = getSimpleJdbcTemplate().query(sqlVersions, cachedIDRowMapper, versionsID);
89        if (resultCached.size() > 0) {
90            return true;
91        }
92        return false;
93    }
94   
95 
96   
97    /////////////////// ADDERS ///////////////////
98   
99    @Override
100    public Number addVersion(Version freshVersion) {
101        UUID externalIdentifier = UUID.randomUUID();
102        String newExternalIdentifier = externalIdentifier.toString();
103
104        Map<String, Object> params = new HashMap<String, Object>();
105        params.put("externalId", newExternalIdentifier);
106        //TODO: till the schema is fixed, version-text and version's external Id are the same (now version do not have URI's/ext id's)
107        params.put("version", newExternalIdentifier);
108        String sql = "INSERT INTO " + versionTableName + "(" + external_id + "," + version + " ) VALUES (:externalId, :version)";
109        final int affectedRows = getSimpleJdbcTemplate().update(sql, params);
110        return getInternalID(externalIdentifier);
111    }
112   
113       ////////////////////////////////////////////
114    @Override
115    public int addVersionCachedRepresentation(Number versionID, Number cachedID){       
116    Map<String, Object> params = new HashMap<String, Object>();
117        params.put("versionId", versionID);
118        params.put("cachedId", cachedID);
119        String sql = "INSERT INTO " + versionsCachedRepresentationsTableName + "(" + version_id + "," + cached_representation_id + " ) VALUES (:versionId, :cachedId)";
120        return getSimpleJdbcTemplate().update(sql, params);
121    }
122   
123   
124    /////////////// DELETERS ////////////////////////
125   
126    @Override
127    public int deleteVersion(Number internalID) {
128        if (versionIsInUse(internalID)) {
129            return 0;
130        }       
131        String sql = "DELETE FROM " + versionTableName + " where " + version_id + " = ?";
132        int result = getSimpleJdbcTemplate().update(sql, internalID);     
133        return result;
134
135    }
136
137   
138   
139    ////////////////////////////////////////////
140    @Override
141    public int deleteVersionCachedRepresentation(Number versionID, Number cachedID){
142    Map<String, Object> params = new HashMap<String, Object>();
143         params.put("versionId", versionID);
144         params.put("cachedId", cachedID);   
145    StringBuilder sql = new StringBuilder("DELETE FROM ");
146    sql.append(versionsCachedRepresentationsTableName).append(" WHERE ").append(version_id).append(" = :versionId AND ");
147    sql.append(cached_representation_id).append("= :cachedId");
148    return (getSimpleJdbcTemplate().update(sql.toString(), params));
149    }
150   
151    ////////////////////////////////////////////
152    @Override
153    public int deleteAllVersionCachedRepresentation(Number versionID){
154    StringBuilder sql = new StringBuilder("DELETE FROM ");
155    sql.append(versionsCachedRepresentationsTableName).append(" WHERE ").append(version_id).append(" = ?");
156    return (getSimpleJdbcTemplate().update(sql.toString(), versionID));
157    }
158       
159 
160 
161}
Note: See TracBrowser for help on using the repository browser.