diff --git a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/OracleConnection.java b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/OracleConnection.java index 6bb00dabf601d3cb0b22f9f707b32cf5143c4949..0c1a57cc09ea7aa0b983d34ac99cee464d453cc4 100644 --- a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/OracleConnection.java +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/OracleConnection.java @@ -25,7 +25,7 @@ public class OracleConnection { logger.log(Level.SEVERE, "Can't establish Oracle Driver", e); throw e; } - logger.log(Level.INFO, "Oracle JDBC Driver Registered!"); +// logger.log(Level.INFO, "Oracle JDBC Driver Registered!"); try { connection = DriverManager.getConnection( diff --git a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/PsqlConnection.java b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/PsqlConnection.java index f333df32b725ba9917337f56b3ac02951bb95881..714e67ca457554c46b2747186963c1dff5546747 100644 --- a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/PsqlConnection.java +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/PsqlConnection.java @@ -6,8 +6,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.sql.Date; -import java.util.Calendar; +import java.sql.Timestamp; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -16,11 +15,10 @@ import java.util.logging.Logger; public class PsqlConnection { Connection connection = null; - private final Map<String, String> dmUsers = new HashMap<>(); // <username, username> + private final Map<String, Timestamp> dmUsers = new HashMap<>(); // <username, lastUpdate> private PreparedStatement insertQuery; private PreparedStatement updateQuery; private final String userTable = "user_info"; - private Date lastUpdate; private Logger logger; @@ -35,7 +33,7 @@ public class PsqlConnection { logger.log(Level.SEVERE, "Can't establish PosgreSQL Driver", e); System.exit(0); } - logger.log(Level.INFO, "PostgreSQL JDBC Driver Registered!"); +// logger.log(Level.INFO, "PostgreSQL JDBC Driver Registered!"); try { connection = DriverManager.getConnection( @@ -69,7 +67,8 @@ public class PsqlConnection { if (results != null) { while (results.next()) { String username = results.getString("username"); - dmUsers.put(username, username); + Timestamp lastUpdate = results.getTimestamp("last_update"); + dmUsers.put(username, lastUpdate); } results.close(); } @@ -82,83 +81,23 @@ public class PsqlConnection { // prepare statements try { - insertQuery = connection.prepareStatement ("INSERT INTO user_info (username, first_name, last_name, middle_name, email, badge) VALUES (?, ?, ?, ?, ?, ?)"); - updateQuery = connection.prepareStatement ("UPDATE user_info SET email = ?, last_name = ? WHERE username = ?"); + insertQuery = connection.prepareStatement ("INSERT INTO user_info (username, first_name, last_name, middle_name, email, badge, is_local_user, last_update) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + updateQuery = connection.prepareStatement ("UPDATE user_info SET email = ?, last_name = ?, last_update = ? WHERE username = ?"); } catch (SQLException ex) { logger.log(Level.SEVERE, "Can't get peaparedStatement from connection ", ex); throw ex; } - // get the last update - String lastUpdateTable = "users_last_update"; - try { - statement = connection.createStatement(); - } catch (SQLException ex) { - logger.log(Level.SEVERE, "can't create statement for postgreSQL connection"); - throw ex; - } - results = null; - try { - if (statement != null) { - results = statement.executeQuery("SELECT * FROM " + lastUpdateTable + " WHERE id = 1;"); - } - } catch (SQLException ex) { - logger.log(Level.WARNING, "can't execute query from {0} table", lastUpdateTable); - addLastUpdate(); - } - try { - if (results != null) { - results.next(); - lastUpdate = results.getDate("last_update"); - results.close(); - } - if (statement != null) { - statement.close(); - } - } catch (SQLException ex) { - logger.log(Level.WARNING, "The table {0} is empty", lastUpdateTable); - addLastUpdate(); - } } - + + protected Timestamp getUserLastUpdate(String username) { + return dmUsers.get(username); + } boolean isUser(String username) { return dmUsers.containsKey(username); } - Date getLastUpdate() { - return lastUpdate; - } - - void addLastUpdate() { - java.util.Calendar cal = java.util.Calendar.getInstance(); - cal.set(1990, Calendar.JANUARY, 1); - try { - lastUpdate = new Date(cal.getTimeInMillis()); - try ( - PreparedStatement setUpdate = connection.prepareStatement("INSERT INTO users_last_update (id, last_update) VALUES (1, ?)")) { - setUpdate.setDate(1, lastUpdate); - setUpdate.executeUpdate(); - } - } catch (SQLException ex) { - logger.log(Level.WARNING, "can't update last update table ", ex); - } - } - - void setLastUpdate() { - java.util.Calendar cal = java.util.Calendar.getInstance(); - try { - lastUpdate = new Date(cal.getTimeInMillis()); - try ( - PreparedStatement setUpdate = connection.prepareStatement("UPDATE users_last_update SET last_update = ?")) { - setUpdate.setDate(1, lastUpdate); - setUpdate.execute(); - } - } catch (SQLException ex) { - logger.log(Level.WARNING, "can't update last update table ", ex); - } - } - - void addUser(DmUser dmuser) { + void addUser(DmUser dmuser, Timestamp currentTime) { try { insertQuery.setString(1, dmuser.username); insertQuery.setString(2, dmuser.firstName); @@ -166,17 +105,20 @@ public class PsqlConnection { insertQuery.setString(4, dmuser.middleName); insertQuery.setString(5, dmuser.email); insertQuery.setString(6, dmuser.badge); + insertQuery.setBoolean(7, false); + insertQuery.setTimestamp(8, currentTime); insertQuery.execute(); } catch (SQLException ex) { logger.log(Level.SEVERE, "can't execute query to add user ", ex); } } - void updateUser(DmUser dmuser) { + void updateUser(DmUser dmuser, Timestamp currentTime) { try { updateQuery.setString(1, dmuser.email); updateQuery.setString(2, dmuser.lastName); - updateQuery.setString(3, dmuser.username); + updateQuery.setTimestamp(3, currentTime); + updateQuery.setString(4, dmuser.username); updateQuery.executeUpdate(); } catch (SQLException ex) { logger.log(Level.SEVERE, "can't execute query to update user", ex); diff --git a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/Synchronizer.java b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/Synchronizer.java index f9525559c632523ca74fdba4d7aa382ca3999aa7..4e021eea3defe3f31214e0dc41214c0fc1ed0b1b 100644 --- a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/Synchronizer.java +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/Synchronizer.java @@ -5,7 +5,7 @@ import java.io.InputStream; import java.io.FileInputStream; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Date; +import java.sql.Timestamp; import java.util.Properties; import java.util.logging.FileHandler; import java.util.logging.Level; @@ -98,7 +98,6 @@ public class Synchronizer { } private void connectAndInit() { - // lConnection.connect(); try { pConnection.connect(config); } @@ -123,7 +122,8 @@ public class Synchronizer { } private void synchronize() { - Date lastUpdate = pConnection.getLastUpdate(); + java.util.Calendar cal = java.util.Calendar.getInstance(); + Timestamp current = new Timestamp(cal.getTimeInMillis()); DmUser dmuser = new DmUser(); try { ResultSet results = oConnection.getUsers(config.getProperty("oracle.database.table")); @@ -131,12 +131,13 @@ public class Synchronizer { String badge = results.getString("BADGE_NO"); String username = config.getProperty("user.userid.prefix") + badge; if (pConnection.isUser(username)) { - if ((results.getDate("LAST_CHANGE_DATE") == null) || (results.getDate("LAST_CHANGE_DATE").compareTo(lastUpdate) >= 0)) { + Timestamp userLastUpdate = pConnection.getUserLastUpdate(username); + if ((results.getTimestamp("LAST_CHANGE_DATE") == null) || (userLastUpdate == null) || (results.getTimestamp("LAST_CHANGE_DATE").compareTo(userLastUpdate) >= 0)) { // update user dmuser.email = results.getString("EMAIL"); dmuser.username = username; dmuser.lastName = results.getString("LAST_NAME"); - pConnection.updateUser(dmuser); + pConnection.updateUser(dmuser, current); dmuser.clear(); } } else { @@ -147,12 +148,11 @@ public class Synchronizer { dmuser.lastName = results.getString("LAST_NAME"); dmuser.middleName = results.getString("MIDDLE_NAME"); dmuser.username = username; - pConnection.addUser(dmuser); + pConnection.addUser(dmuser, current); dmuser.clear(); } } - pConnection.setLastUpdate(); - } catch (SQLException ex) { + } catch (SQLException ex) { logger.log(Level.SEVERE, "table processing error ", ex); } finally {