From 4a126a60ae034679f9cd8c4ef8e9edeeb6a1ac01 Mon Sep 17 00:00:00 2001
From: "Barbara B. Frosik" <bfrosik@aps.anl.gov>
Date: Tue, 7 Jul 2015 21:25:05 +0000
Subject: [PATCH] changes for the user_info additional columns

---
 .../gov/anl/aps/dm/sync/OracleConnection.java |  2 +-
 .../gov/anl/aps/dm/sync/PsqlConnection.java   | 92 ++++---------------
 .../src/gov/anl/aps/dm/sync/Synchronizer.java | 16 ++--
 3 files changed, 26 insertions(+), 84 deletions(-)

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 6bb00dab..0c1a57cc 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 f333df32..714e67ca 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 f9525559..4e021eea 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 {
-- 
GitLab