package net.codjo.dataprocess.server.dao; import net.codjo.dataprocess.common.DataProcessConstants; import net.codjo.dataprocess.common.Log; import net.codjo.dataprocess.common.context.DataProcessContext; import net.codjo.dataprocess.common.context.DataProcessContextCodec; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Iterator; /** * */ public class ContextDao { public String saveContext(Connection con, String contextName, String contextAsString) throws SQLException { con.setAutoCommit(false); DataProcessContext context = DataProcessContextCodec.decode(contextAsString); PreparedStatement deletePstmt = con.prepareStatement("delete PM_DP_CONTEXT where CONTEXT_NAME = ?"); try { boolean error = false; deletePstmt.setString(1, contextName); deletePstmt.executeUpdate(); for (Iterator<String> iterator = context.keySet().iterator(); iterator.hasNext() && !error;) { String key = iterator.next(); String value = context.getProperty(key); try { saveContextNameKeyValue(con, contextName, key, value, false); } catch (SQLException e) { error = true; Log.error(ContextDao.class, e); } } con.commit(); if (error) { return DataProcessConstants.CONTEXT_SAVE_FAILED; } else { return DataProcessConstants.TRT_OK; } } catch (SQLException ex) { con.rollback(); Log.error(ContextDao.class, "Rollback effectu�", ex); throw ex; } finally { deletePstmt.close(); con.setAutoCommit(true); } } public void saveContextNameKeyValue(Connection con, String contextName, String contextKey, String contextValue, boolean deleteBefore) throws SQLException { String deleteSql = " delete from PM_DP_CONTEXT where CONTEXT_NAME = ? and CONTEXT_KEY = ? "; String sql = " insert into PM_DP_CONTEXT (CONTEXT_NAME, CONTEXT_KEY, CONTEXT_VALUE) values (?,?,?) "; if (deleteBefore) { sql = deleteSql + sql; } PreparedStatement pstmt = con.prepareStatement(sql); try { int idx = 1; if (deleteBefore) { pstmt.setString(idx++, contextName); pstmt.setString(idx++, contextKey); } pstmt.setString(idx++, contextName); pstmt.setString(idx++, contextKey); pstmt.setString(idx, contextValue); pstmt.executeUpdate(); } finally { pstmt.close(); } } public DataProcessContext getDataProcessContext(Connection con, String contextName) throws SQLException { PreparedStatement pstmt = con.prepareStatement( " select CONTEXT_KEY, CONTEXT_VALUE from PM_DP_CONTEXT where CONTEXT_NAME = ? " + " order by CONTEXT_KEY, CONTEXT_VALUE"); try { pstmt.setString(1, contextName); ResultSet rs = pstmt.executeQuery(); try { DataProcessContext context = new DataProcessContext(); while (rs.next()) { context.setProperty(rs.getString("CONTEXT_KEY"), rs.getString("CONTEXT_VALUE")); } return context; } finally { rs.close(); } } finally { pstmt.close(); } } }