Ignore:
Timestamp:
08/22/13 13:18:54 (11 years ago)
Author:
olhsha
Message:

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:
1 edited

Legend:

Unmodified
Added
Removed
  • DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/dao/impl/JdbcSourceDao.java

    r3455 r3459  
    4747    }
    4848
    49    
    50 
    51     ///////////////////////////////////////////////////////////////////////////////
     49
     50    //////////////////////// GETTERS ///////////////////////////////////
    5251    @Override
    5352    public Source getSource(Number internalID) {
     
    7170        }
    7271    };
    73 
    74     ///////////////////////////////////////////////////////////////////
    75     @Override
    76     public int deleteSource(Number internalID) {
    77         if (sourceIsInUse(internalID)){
    78             return 0;
    79         }
    80         String sqlSourcesVersions = "DELETE FROM " + sourceTableName + " WHERE " + source_id + " = ? ";
    81         int result = getSimpleJdbcTemplate().update(sqlSourcesVersions, internalID);
    82         return result;
    83 
    84     }
    85 
    86    
    87     ///////////////////////////////////////////////////////////////////
    88     @Override
    89     public int deleteAllSourceVersion(Number internalID) {
    90         String sqlSourcesVersions = "DELETE FROM " + sourcesVersionsTableName + " WHERE " + source_id + " = ?";
    91         int result = getSimpleJdbcTemplate().update(sqlSourcesVersions, internalID);
    92         return result;
    93 
    94     }
    95 
    96     ///////////////////////////////////////////////////////////////////
     72   
     73    /////////////////////////////////////////
     74    @Override
     75    public List<Number> retrieveVersionList(Number sourceID) {
     76        String sql = "SELECT " + version_id + " FROM " + sourcesVersionsTableName + " WHERE " + source_id + " = ?";
     77        List<Number> result = getSimpleJdbcTemplate().query(sql, versionIDRowMapper, sourceID);
     78        return result;
     79    }
     80
     81   
     82     ///////////////////////////////////////////////////////////////////
     83    @Override
     84    public List<SourceInfo> getSourceInfos(List<Number> sources) {
     85        if (sources == null) {
     86            return null;
     87        }
     88        if (sources.isEmpty()) {
     89            return new ArrayList<SourceInfo>();
     90        }
     91
     92        String sourceIDs = makeListOfValues(sources);
     93        String sql = "SELECT " + external_id + "," + link_uri + "," + version + " FROM " + sourceTableName + " WHERE " + source_id + " IN " + sourceIDs;
     94        List<SourceInfo> result = getSimpleJdbcTemplate().query(sql, SourceInfoRowMapper);
     95        return result;
     96    }
     97    private final RowMapper<SourceInfo> SourceInfoRowMapper = new RowMapper<SourceInfo>() {
     98        @Override
     99        public SourceInfo mapRow(ResultSet rs, int rowNumber) throws SQLException {
     100            return constructSourceInfo(UUID.fromString(rs.getString(external_id)), rs.getString(link_uri), rs.getString(version));
     101        }
     102    };
     103
     104 
     105    /////////////////////////////////////////////////////
     106    @Override
     107    public List<Number> getSourcesForLink(String link) {
     108        StringBuilder sql = new StringBuilder("SELECT ");
     109        sql.append(source_id).append(" FROM ").append(sourceTableName).append(" WHERE ").append(link_uri).append(" LIKE '%").append(link).append("%'");
     110        List<Number> result = getSimpleJdbcTemplate().query(sql.toString(), internalIDRowMapper);
     111        return result;
     112    }
     113
     114   
     115    /////////////////////////////////////////////////
     116    @Override
     117    public boolean sourceIsInUse(Number sourceID) {
     118        String sqlAnnotations = "SELECT " + annotation_id + " FROM " + annotationsSourcesTableName + " WHERE " + source_id + "= ? LIMIT 1";
     119        List<Number> resultAnnotations = getSimpleJdbcTemplate().query(sqlAnnotations, annotationIDRowMapper, sourceID);
     120        if (resultAnnotations.size() > 0) {
     121            return true;
     122        }
     123        String sqlVersions = "SELECT " + version_id + " FROM " + sourcesVersionsTableName + " WHERE " + source_id + "= ? LIMIT 1";
     124        List<Number> resultVersions = getSimpleJdbcTemplate().query(sqlVersions, versionIDRowMapper, sourceID);
     125        if (resultVersions.size() > 0) {
     126            return true;
     127        }
     128        return false;
     129    }
     130   
     131 
     132   
     133
     134    ///////////////////////// ADDERS /////////////////////////////////
    97135    @Override
    98136    public Number addSource(Source source) throws SQLException {       
     
    108146    }
    109147   
    110     ///////////////////////////////
    111    
    112148   
    113149    ///////////////////////////////////////////////////////////////////
     
    121157    }
    122158   
    123 
    124     /////////////////////////////////////////
    125     @Override
    126     public List<Number> retrieveVersionList(Number sourceID) {
    127         String sql = "SELECT " + version_id + " FROM " + sourcesVersionsTableName + " WHERE " + source_id + " = ?";
    128         List<Number> result = getSimpleJdbcTemplate().query(sql, versionsSourcesRunnerRowMapper, sourceID);
    129         return result;
    130     }
    131     private final RowMapper<Number> versionsSourcesRunnerRowMapper = new RowMapper<Number>() {
    132         @Override
    133         public Number mapRow(ResultSet rs, int rowNumber) throws SQLException {
    134             Number result = rs.getInt(version_id);
    135             return result;
    136         }
    137     };
    138 
     159////////////////////// DELETERS ////////////////////////
     160    @Override
     161    public int deleteSource(Number internalID) {
     162        if (sourceIsInUse(internalID)){
     163            return 0;
     164        }
     165        String sqlSourcesVersions = "DELETE FROM " + sourceTableName + " WHERE " + source_id + " = ? ";
     166        int result = getSimpleJdbcTemplate().update(sqlSourcesVersions, internalID);
     167        return result;
     168
     169    }
     170
     171   
    139172    ///////////////////////////////////////////////////////////////////
    140173    @Override
    141     public List<SourceInfo> getSourceInfos(List<Number> sources) {
    142         if (sources == null) {
    143             return null;
    144         }
    145         if (sources.isEmpty()) {
    146             return new ArrayList<SourceInfo>();
    147         }
    148 
    149         String sourceIDs = makeListOfValues(sources);
    150         String sql = "SELECT " + external_id + "," + link_uri + "," + version + " FROM " + sourceTableName + " WHERE " + source_id + " IN " + sourceIDs;
    151         List<SourceInfo> result = getSimpleJdbcTemplate().query(sql, SourceInfoRowMapper);
    152         return result;
    153     }
    154     private final RowMapper<SourceInfo> SourceInfoRowMapper = new RowMapper<SourceInfo>() {
    155         @Override
    156         public SourceInfo mapRow(ResultSet rs, int rowNumber) throws SQLException {
    157             return constructSourceInfo(UUID.fromString(rs.getString(external_id)), rs.getString(link_uri), rs.getString(version));
    158         }
    159     };
    160 
     174    public int deleteAllSourceVersion(Number internalID) {
     175        String sqlSourcesVersions = "DELETE FROM " + sourcesVersionsTableName + " WHERE " + source_id + " = ?";
     176        int result = getSimpleJdbcTemplate().update(sqlSourcesVersions, internalID);
     177        return result;
     178
     179    }
    161180 
    162     /////////////////////////////////////////////////////
    163     @Override
    164     public List<Number> getSourcesForLink(String link) {
    165         StringBuilder sql = new StringBuilder("SELECT ");
    166         sql.append(source_id).append(" FROM ").append(sourceTableName).append(" WHERE ").append(link_uri).append(" LIKE '%").append(link).append("%'");
    167         List<Number> result = getSimpleJdbcTemplate().query(sql.toString(), internalIDRowMapper);
    168         return result;
    169     }
    170 
    171    
    172 
    173     @Override
    174     public boolean sourceIsInUse(Number sourceID) {
    175         String sql = "SELECT " + annotation_id + " FROM " + annotationsSourcesTableName + " WHERE " + source_id + "= ? LIMIT 1";
    176         List<Number> result = getSimpleJdbcTemplate().query(sql, annotationIDRowMapper, sourceID);
    177         if (result.size() > 0) {
    178             return true;
    179         }
    180         return false;
    181     }
    182    
    183       private final RowMapper<Number> annotationIDRowMapper = new RowMapper<Number>() {
    184         @Override
    185         public Number mapRow(ResultSet rs, int rowNumber) throws SQLException {
    186             return rs.getInt(annotation_id);
    187         }
    188     };
    189    
     181   
    190182  /////////// HELPERS  ////////////////
    191183   
Note: See TracChangeset for help on using the changeset viewer.