package net.codjo.dataprocess.server.dao; import net.codjo.dataprocess.common.Log; import net.codjo.dataprocess.server.util.SQLUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; /** * */ public class BroadcastDao { public void createExportConfigFromTemplate(Connection con, String periode, List<String> templateDelete, List<String> templateSelect) throws SQLException { con.prepareStatement(createDeleteSql(templateDelete)).executeUpdate(); String sql = createSelectSql(templateSelect); ResultSet rs = con.prepareStatement(sql).executeQuery(); try { while (rs.next()) { int fileId = rs.getInt("FILE_ID"); String fileName = rs.getString("FILE_NAME").replace("$periode$", periode); PreparedStatement pstmt = con.prepareStatement( "insert into PM_BROADCAST_FILES (FILE_ID, FILE_NAME, " + "DESTINATION_SYSTEM, FILE_DESTINATION_LOCATION, FILE_HEADER, " + "FILE_HEADER_TEXT, AUTO_DISTRIBUTION, DISTRIBUTION_METHOD, " + "HISTORISE_FILE, CFT_BATCH_FILE, SECTION_SEPARATOR) " + "select ?, ?, DESTINATION_SYSTEM, FILE_DESTINATION_LOCATION, FILE_HEADER, " + "FILE_HEADER_TEXT, AUTO_DISTRIBUTION, DISTRIBUTION_METHOD, " + "HISTORISE_FILE, CFT_BATCH_FILE, SECTION_SEPARATOR " + "from PM_BROADCAST_FILES " + "where FILE_ID = ?"); try { int newFileId = SQLUtil.getNextId(con, "PM_BROADCAST_FILES", "FILE_ID"); pstmt.setInt(1, newFileId); pstmt.setString(2, fileName); pstmt.setInt(3, fileId); pstmt.executeUpdate(); duplicateDataInBroadcastFileContents(con, fileId, newFileId); } finally { pstmt.close(); } } } finally { rs.close(); } } String createSelectSql(List<String> templateSelect) { StringBuilder part = new StringBuilder(); for (String str : templateSelect) { str = str.trim(); if (str.startsWith("not")) { part.append(" FILE_NAME not like '").append(str.substring(4)).append("' "); } else { part.append(" FILE_NAME like '").append(str).append("' "); } if (templateSelect.size() > 1) { part.append(" and "); } } String sql = "select FILE_ID, FILE_NAME from PM_BROADCAST_FILES where "; sql = sql + part; if (templateSelect.size() > 1) { sql = sql.substring(0, sql.length() - " and ".length()); } sql = sql + " order by FILE_ID, FILE_NAME"; Log.debug(getClass(), sql); return sql; } String createDeleteSql(List<String> templateDelete) { StringBuilder part = new StringBuilder(); for (String str : templateDelete) { str = str.trim(); if (str.startsWith("not")) { part.append(" FILE_NAME not like '").append(str.substring(4)).append("' "); } else { part.append(" FILE_NAME like '").append(str).append("' "); } if (templateDelete.size() > 1) { part.append(" and "); } } String sql = "delete from PM_BROADCAST_FILES where "; sql = sql + part; if (templateDelete.size() > 1) { sql = sql.substring(0, sql.length() - " and ".length()); } Log.debug(getClass(), sql); return sql; } private static void duplicateDataInBroadcastFileContents(Connection con, int fileId, int newFileId) throws SQLException { PreparedStatement pstmt = con.prepareStatement( "select SECTION_ID, SECTION_POSITION, SECTION_HEADER, SECTION_HEADER_TEXT, COLUMN_SEPARATOR, COLUMN_HEADER " + " from PM_BROADCAST_FILE_CONTENTS " + " where FILE_ID = ?"); try { pstmt.setInt(1, fileId); ResultSet rs = pstmt.executeQuery(); try { PreparedStatement pstmt2 = con.prepareStatement("insert into PM_BROADCAST_FILE_CONTENTS " + " (CONTENT_ID, FILE_ID, SECTION_ID, SECTION_POSITION, SECTION_HEADER, SECTION_HEADER_TEXT, COLUMN_SEPARATOR, COLUMN_HEADER)" + " values (?, ?, ?, ?, ?, ?, ?, ?)"); try { while (rs.next()) { pstmt2.setInt(1, SQLUtil.getNextId(con, "PM_BROADCAST_FILE_CONTENTS", "CONTENT_ID")); pstmt2.setInt(2, newFileId); pstmt2.setInt(3, rs.getInt("SECTION_ID")); pstmt2.setInt(4, rs.getInt("SECTION_POSITION")); pstmt2.setBoolean(5, rs.getBoolean("SECTION_HEADER")); pstmt2.setString(6, rs.getString("SECTION_HEADER_TEXT")); pstmt2.setString(7, rs.getString("COLUMN_SEPARATOR")); pstmt2.setBoolean(8, rs.getBoolean("COLUMN_HEADER")); pstmt2.executeUpdate(); } } finally { pstmt2.close(); } } finally { rs.close(); } } finally { pstmt.close(); } } }