public List<String> getUnsynchronizedTablesList() throws ReplicatorConnectionException, ReplicatorException { List<String> tables = new ArrayList<String>(); try { Connection remoteConnection = remoteConnector.getNewConnection(); Connection localConnection = null; try { localConnection = localConnector.getNewConnection(); int localCount = getTableRecordsCount(localConnection, localSis.getStudentsTable()); int remoteCount = getTableRecordsCount(remoteConnection, remoteSis.getStudentsTable()); if (localCount != remoteCount) { tables.add(remoteSis.getStudentsTable()); } int staffLocalCount = getTableRecordsCount(localConnection, "users"); int staffRemoteCount = getTableRecordsCount(remoteConnection, "users"); if (staffLocalCount != staffRemoteCount) { tables.add("users"); } return tables; } catch (JdbcConnectorException e) { throw new ReplicatorException("Couldn't connect to local SIS"); } finally { JdbcUtils.closeIfNeededSilently(remoteConnection); JdbcUtils.closeIfNeededSilently(localConnection); } } catch (JdbcConnectorException e) { throw new ReplicatorConnectionException("Couldn't connect to remote SIS"); } }
public void replicate(List<String> tables) throws ReplicatorException { Connection remoteConnection = null; try { remoteConnection = remoteConnector.getNewConnection(); Connection localConnection = null; try { localConnection = localConnector.getNewConnection(); localConnection.setAutoCommit(false); clean(localConnection, localSis.getStudentsTable()); replicateStudentDataFromRemoteSis(remoteConnection, localConnection); clean(localConnection, "users"); replicateStaffDataFromRemoteSis(remoteConnection, localConnection); localConnection.commit(); } catch (SQLException e) { JdbcUtils.rollbackSilently(localConnection); throw new ReplicatorException("Couldn't transfer data from remote to local SIS", e); } catch (JdbcConnectorException e) { throw new ReplicatorException("Couldn't connect to local SIS"); } finally { JdbcUtils.closeIfNeededSilently(localConnection); } } catch (JdbcConnectorException ex) { throw new ReplicatorConnectionException("Couldn't connect to remote SIS", ex); } finally { JdbcUtils.closeIfNeededSilently(remoteConnection); } }
private void fillStatement(PreparedStatement insertStatement, ResultSet resultSet) throws SQLException { insertStatement.setString(1, resultSet.getString(1)); insertStatement.setString(2, resultSet.getString(2)); insertStatement.setString(3, resultSet.getString(3)); int resultSetCoulmnPosition = 4; if (isNotEmpty(remoteSis.activeFieldName())) { insertStatement.setString( resultSetCoulmnPosition, resultSet.getString(resultSetCoulmnPosition)); resultSetCoulmnPosition++; } if (isNotEmpty(remoteSis.getLastNameField())) { insertStatement.setString( resultSetCoulmnPosition, resultSet.getString(resultSetCoulmnPosition++)); insertStatement.setString( resultSetCoulmnPosition, resultSet.getString(resultSetCoulmnPosition)); } }
private String generateSelectSQL(SisSettings sisSettings) { String activeField = isNotEmpty(sisSettings.activeFieldName()) ? ", " + sisSettings.activeFieldName() : ""; String nameFields = isNotEmpty(sisSettings.getLastNameField()) ? ", " + sisSettings.getFirstNameField() + ", " + sisSettings.getLastNameField() + " " : ""; return "select " + sisSettings.studentIDFieldName() + "," + sisSettings.freeFieldName() + ", " + sisSettings.reducedFieldName() + activeField + nameFields + " from " + sisSettings.getStudentsTable(); }
private String generateInsertSQL(SisSettings sisSettings) { return "insert into " + sisSettings.getStudentsTable() + " (" + sisSettings.studentIDFieldName() + ", " + sisSettings.freeFieldName() + ", " + sisSettings.reducedFieldName() + (isNotEmpty(sisSettings.activeFieldName()) ? "," + sisSettings.activeFieldName() : "") + (isNotEmpty(sisSettings.getFirstNameField()) ? "," + sisSettings.getFirstNameField() : "") + (isNotEmpty(sisSettings.getLastNameField()) ? "," + sisSettings.getLastNameField() : "") + ") values ( ?, ?, ?" + (isNotEmpty(sisSettings.activeFieldName()) ? ", ?" : "") + (isNotEmpty(sisSettings.getFirstNameField()) ? ", ?" : "") + (isNotEmpty(sisSettings.getLastNameField()) ? ", ?" : "") + ")"; }