import fr.gouv.finances.dgfip.xemelios.data.impl.sqlconfig.TEtat;
import fr.gouv.finances.dgfip.xemelios.data.impl.sqlconfig.TPersistenceConfig;
import fr.gouv.finances.dgfip.xemelios.data.impl.sqlconfig.TSqlIndex;
+import fr.gouv.finances.dgfip.xemelios.data.impl.sqlconfig.TTable;
import fr.gouv.finances.dgfip.xemelios.utils.GZipUtils;
/**
return ret.toString();
}
+ @Override
+ public boolean removeArchive(final HashMap<String, DocumentModel> dms, final String archiveName, final XemeliosUser user) throws DataConfigurationException, DataAccessException, UnauthorizedException {
+ if (!user.hasRole(XemeliosUser.ROLE_IMPORT)) {
+ throw new UnauthorizedException("Vous n'êtes pas autorisé à supprimer des données.");
+ }
+ Connection con = null;
+ PreparedStatement ps = null;
+
+ // Suppression des données à partir des docId du manifeste
+ try {
+ con = this.getConnection();
+ for (final DocumentModel dm : dms.values()) {
+ if (dm != null) {
+ final TDocument pc = this.getPersistenceConfig(dm, user).getLayer(this.getLayerName()).getDocument(dm.getId());
+ for (final TEtat etat : pc.getEtats()) {
+ // Suppression des documents index
+ for (final TTable table : pc.getEtat(etat.getId()).getIndexTables()) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DELETE FROM ").append(table.getBaseName()).append(" WHERE ARCHIVE_NAME = ?");
+ logger.debug(sb.toString());
+ ps = con.prepareStatement(sb.toString());
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+ }
+ // Suppression des documents de l'etat
+ final StringBuilder queryDocument = new StringBuilder();
+ queryDocument.append("DELETE FROM ").append(pc.getEtat(etat.getId()).getDocumentTable().getBaseName()).append(" WHERE ARCHIVE_NAME = ?");
+ logger.debug(queryDocument.toString());
+ ps = con.prepareStatement(queryDocument.toString());
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+ }
+ // Suppression des special keys du doc
+ if (pc.getSpecialKeyTable() != null) {
+ final StringBuilder querySps = new StringBuilder();
+ querySps.append("DELETE FROM ").append(pc.getSpecialKeyTable().getBaseName()).append(" WHERE ARCHIVE_NAME = ?");
+ logger.debug(querySps.toString());
+ ps = con.prepareStatement(querySps.toString());
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+ }
+
+ // Suppression des budget/collectivite du doc
+ final StringBuilder queryBc = new StringBuilder();
+ queryBc.append("DELETE FROM ").append(pc.getListBcTable().getBaseName()).append(" WHERE ARCHIVE_NAME = ?");
+ logger.debug(queryBc.toString());
+ ps = con.prepareStatement(queryBc.toString());
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+ }
+ }
+
+ // suppression des PJs asscoiées a cette archive
+ ps = con.prepareStatement("DELETE FROM ATTACHMENTS WHERE ARCHIVE_NAME = ?");
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+
+ // suppression de l'entrée dans IMPORTED_ARCHIVES
+ ps = con.prepareStatement("DELETE FROM IMPORTED_ARCHIVES WHERE ARCHIVE_NAME=?");
+ ps.setString(1, archiveName);
+ ps.executeUpdate();
+ ps.close();
+ adaptCommitForDatabaseEngine(con);
+
+ } catch (final Exception e) {
+ logger.error(e, e);
+ throw new DataConfigurationException("Problème lors de la suppression des données de l'archive !", e);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (final Throwable t) {
+ logger.info("can not close ps !", t);
+ }
+ }
+ if (con != null) {
+ this.releaseConnection(con);
+ con = null;
+ }
+ }
+ return true;
+ }
+
public abstract Connection getConnection() throws SQLException;
public abstract void releaseConnection(final Connection con);
protected abstract String adaptSqlForDatabaseEngine(String sql);
+ protected abstract void adaptCommitForDatabaseEngine(final Connection connection) throws SQLException;
+
}