diff --git a/tools/AccountSynchronizer/accountSynchronizer/.classpath b/tools/AccountSynchronizer/accountSynchronizer/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..a93d1d27dfe497ed471fc8affaf275148c1aa766 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/.classpath @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="resources"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="lib" path="/home/phoebus/BFROSIK/trunk/tools/AccountSynchronizer/lib/ojdbc7.jar"/> + <classpathentry kind="lib" path="/home/phoebus/BFROSIK/trunk/tools/AccountSynchronizer/lib/postgresql-9.4-1201.jdbc4.jar"/> + <classpathentry kind="lib" path="/home/phoebus/BFROSIK/trunk/tools/AccountSynchronizer/lib/unboundid-ldapsdk-me.jar"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/tools/AccountSynchronizer/accountSynchronizer/.project b/tools/AccountSynchronizer/accountSynchronizer/.project new file mode 100644 index 0000000000000000000000000000000000000000..fadf94e22c49d9cb39bb0421583c0ff94d57ebbb --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>accountSynchronizer</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/config.properties b/tools/AccountSynchronizer/accountSynchronizer/bin/config.properties new file mode 100644 index 0000000000000000000000000000000000000000..57dc30333f2995f8026ac59b596bbb24e63a67b4 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/bin/config.properties @@ -0,0 +1,38 @@ +### log congiguration +log.file = accountSynchronizer%g.log +log.limit = 6000 +log.count = 2 + +### +### Oracle database settings +### +oracle.database.connection = jdbc:oracle:thin:@ra.aps.anl.gov:1527:aps1 +oracle.database.username = glob_conn +### oracle.database.password = +oracle.database.table = DCC.FL$03_BL_APV_VIEW_V2 + +### +### Postgresql database settings +### +dm.database.connection = jdbc:postgresql://127.0.0.1:11136/dm +### dm.database.username = +### dm.database.password = + +### Connection settings for LDAP +### +# +#ldap.server.address = blacklab.xray.aps.anl.gov +#ldap.server.port = 389 +#ldap.server.username = uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov +#ldap.server.password = + +### +### LDAP user account settings +### +#ldap.accounts.baseDN = ou=People, o=aps.anl.gov, dc=aps,dc=anl,dc=gov + +### General account settings +### +# The user name prefix that gets append to every badge number. +user.userid.prefix = d + diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/DmUser.class b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/DmUser.class new file mode 100644 index 0000000000000000000000000000000000000000..b9481185b28a557856bd1601a23e5980bfd6e2a6 Binary files /dev/null and b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/DmUser.class differ diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/LdapConn.class b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/LdapConn.class new file mode 100644 index 0000000000000000000000000000000000000000..c2229790de19ef19fa006ccad6ec9c97857d1258 Binary files /dev/null and b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/LdapConn.class differ diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/OracleConnection.class b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/OracleConnection.class new file mode 100644 index 0000000000000000000000000000000000000000..c24a3a11a5a149597b48a7ed62bd38ba462edb22 Binary files /dev/null and b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/OracleConnection.class differ diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/PsqlConnection.class b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/PsqlConnection.class new file mode 100644 index 0000000000000000000000000000000000000000..e669cd3e40a08076bbcc683d521b454b40ad81c8 Binary files /dev/null and b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/PsqlConnection.class differ diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/Synchronizer.class b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/Synchronizer.class new file mode 100644 index 0000000000000000000000000000000000000000..342f96db99a2d7f13d43c74dda2e27791b12baf5 Binary files /dev/null and b/tools/AccountSynchronizer/accountSynchronizer/bin/gov/anl/aps/dm/sync/Synchronizer.class differ diff --git a/tools/AccountSynchronizer/accountSynchronizer/bin/oracleTable.properties b/tools/AccountSynchronizer/accountSynchronizer/bin/oracleTable.properties new file mode 100644 index 0000000000000000000000000000000000000000..eb47ccb280cf5aa57bab3a0454afca5c7dab7178 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/bin/oracleTable.properties @@ -0,0 +1,13 @@ +# To change this license header, choose License Headers in Project Properties. +# To change this template file, choose Tools | Templates +# and open the template in the editor. + +firstName = FIRST_NAME +lastName = LAST_NAME +middleName = MIDDLE_NAME +email = EMAIL +badge = BADGE_NO +password = PWD_HASH_VALUE +notEmployee = IS_USRNOT_ANL_EMP +inactive = INACTIVE +recordUpdate = LAST_CHANGE_DATE diff --git a/tools/AccountSynchronizer/accountSynchronizer/manifest.txt b/tools/AccountSynchronizer/accountSynchronizer/manifest.txt new file mode 100644 index 0000000000000000000000000000000000000000..a4b070588c8c56470cfe5154de504106bdc05b5e --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/manifest.txt @@ -0,0 +1,2 @@ +Main-Class: gov.anl.aps.dm.sync.Synchronizer +Class-Path: ../lib/ojdbc7.jar ../lib/postgresql-9.4-1201.jdbc4.jar ../lib/unboundid-ldapsdk-me.jar resources diff --git a/tools/AccountSynchronizer/accountSynchronizer/resources/config.properties b/tools/AccountSynchronizer/accountSynchronizer/resources/config.properties new file mode 100644 index 0000000000000000000000000000000000000000..57dc30333f2995f8026ac59b596bbb24e63a67b4 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/resources/config.properties @@ -0,0 +1,38 @@ +### log congiguration +log.file = accountSynchronizer%g.log +log.limit = 6000 +log.count = 2 + +### +### Oracle database settings +### +oracle.database.connection = jdbc:oracle:thin:@ra.aps.anl.gov:1527:aps1 +oracle.database.username = glob_conn +### oracle.database.password = +oracle.database.table = DCC.FL$03_BL_APV_VIEW_V2 + +### +### Postgresql database settings +### +dm.database.connection = jdbc:postgresql://127.0.0.1:11136/dm +### dm.database.username = +### dm.database.password = + +### Connection settings for LDAP +### +# +#ldap.server.address = blacklab.xray.aps.anl.gov +#ldap.server.port = 389 +#ldap.server.username = uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov +#ldap.server.password = + +### +### LDAP user account settings +### +#ldap.accounts.baseDN = ou=People, o=aps.anl.gov, dc=aps,dc=anl,dc=gov + +### General account settings +### +# The user name prefix that gets append to every badge number. +user.userid.prefix = d + diff --git a/tools/AccountSynchronizer/accountSynchronizer/resources/oracleTable.properties b/tools/AccountSynchronizer/accountSynchronizer/resources/oracleTable.properties new file mode 100644 index 0000000000000000000000000000000000000000..eb47ccb280cf5aa57bab3a0454afca5c7dab7178 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/resources/oracleTable.properties @@ -0,0 +1,13 @@ +# To change this license header, choose License Headers in Project Properties. +# To change this template file, choose Tools | Templates +# and open the template in the editor. + +firstName = FIRST_NAME +lastName = LAST_NAME +middleName = MIDDLE_NAME +email = EMAIL +badge = BADGE_NO +password = PWD_HASH_VALUE +notEmployee = IS_USRNOT_ANL_EMP +inactive = INACTIVE +recordUpdate = LAST_CHANGE_DATE diff --git a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/DmUser.java b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/DmUser.java new file mode 100644 index 0000000000000000000000000000000000000000..f35756130a9b42ae9d9b1e84d5f29117e543f763 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/DmUser.java @@ -0,0 +1,21 @@ +package gov.anl.aps.dm.sync; + +public class DmUser { + String username; + String firstName; + String lastName; + String middleName; + String email; + String badge; + String password; + + void clear() { + username = null; + firstName = null; + lastName = null; + middleName = null; + email = null; + badge = null; + password = null; + } +} diff --git a/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/LdapConn.java b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/LdapConn.java new file mode 100644 index 0000000000000000000000000000000000000000..01321d700cf7f062c251a928bcaa29e4acce9d0d --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/LdapConn.java @@ -0,0 +1,73 @@ +package gov.anl.aps.dm.sync; + +import com.unboundid.ldap.sdk.BindRequest; +import com.unboundid.ldap.sdk.BindResult; +import com.unboundid.ldap.sdk.LDAPConnection; +import com.unboundid.ldap.sdk.LDAPException; +import com.unboundid.ldap.sdk.SimpleBindRequest; +import com.unboundid.util.ssl.SSLUtil; +import com.unboundid.util.ssl.TrustAllTrustManager; +import java.security.GeneralSecurityException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.net.SocketFactory; + +public class LdapConn { + LDAPConnection connection = null; + private Logger logger; + + public LdapConn(Logger logger) { + this.logger = logger; + } + + + void connect() { + // Use no key manager, and trust all certificates. This would not be used + // in non-trivial code. + SSLUtil sslUtil = new SSLUtil(null,new TrustAllTrustManager()); + + SocketFactory socketFactory; + LDAPConnection ldapConnection = null; + try { + + // Create the socket factory that will be used to make a secure + // connection to the server. + socketFactory = sslUtil.createSSLSocketFactory(); + try { + ldapConnection = new LDAPConnection(socketFactory,"blacklab.xray.aps.anl.gov",636); + System.out.println("seems connected "+ ldapConnection.toString()); + } catch (LDAPException ex) { + logger.log(Level.SEVERE, null, ex); + } + + } catch(GeneralSecurityException exception) { + + System.err.println(exception); + System.exit(1); + + } + + try { + + String dn = "uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov"; + String password = "pass"; + long maxResponseTimeMillis = 1000; + + BindRequest bindRequest = new SimpleBindRequest(dn,password); + bindRequest.setResponseTimeoutMillis(maxResponseTimeMillis); + BindResult bindResult = ldapConnection.bind(bindRequest); + + System.out.println("connected to ldap " +bindResult.toString()); + + } catch(LDAPException ldapException) { + + ldapConnection.close(); + System.err.println(ldapException); + System.exit(ldapException.getResultCode().intValue()); + + } } + + void close() { + connection.close(); + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..6bb00dabf601d3cb0b22f9f707b32cf5143c4949 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/OracleConnection.java @@ -0,0 +1,58 @@ +package gov.anl.aps.dm.sync; + +import java.sql.DriverManager; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class OracleConnection { + Connection connection = null; + private Logger logger; + + public OracleConnection(Logger logger) { + this.logger = logger; + } + + void connect(Properties config) throws SQLException { + try { + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + + } catch (SQLException e) { + logger.log(Level.SEVERE, "Can't establish Oracle Driver", e); + throw e; + } + logger.log(Level.INFO, "Oracle JDBC Driver Registered!"); + + try { + connection = DriverManager.getConnection( + config.getProperty("oracle.database.connection"), + config.getProperty("oracle.database.username"), + config.getProperty("oracle.database.password")); + } catch (SQLException e) { + logger.log(Level.SEVERE, "Can't connect to Oracle data base", e); + throw e; + } + } + + ResultSet getUsers(String table) throws SQLException { + try { + Statement statement = connection.createStatement(); + return statement.executeQuery("select * from " + table); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "table {0} does not exist", table); + throw ex; + } + } + + void close() { + try { + connection.close(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "problem closing Oracle connection ", ex); + } + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..f333df32b725ba9917337f56b3ac02951bb95881 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/PsqlConnection.java @@ -0,0 +1,195 @@ +package gov.anl.aps.dm.sync; + +import java.sql.DriverManager; +import java.sql.Connection; +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.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PsqlConnection { + Connection connection = null; + private final Map<String, String> dmUsers = new HashMap<>(); // <username, username> + private PreparedStatement insertQuery; + private PreparedStatement updateQuery; + private final String userTable = "user_info"; + private Date lastUpdate; + + private Logger logger; + + public PsqlConnection(Logger logger) { + this.logger = logger; + } + + void connect(Properties config) throws SQLException { + try { + Class.forName("org.postgresql.Driver"); + } catch (ClassNotFoundException e) { + logger.log(Level.SEVERE, "Can't establish PosgreSQL Driver", e); + System.exit(0); + } + logger.log(Level.INFO, "PostgreSQL JDBC Driver Registered!"); + + try { + connection = DriverManager.getConnection( + config.getProperty("dm.database.connection"), + config.getProperty("dm.database.username"), + config.getProperty("dm.database.password")); + } catch (SQLException e) { + logger.log(Level.SEVERE, "Can't connect to PostgreSQL data base"); + throw e; + } + } + + void init() throws SQLException { + Statement statement = null; + try { + statement = connection.createStatement(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "can't create statement for postgreSQL connection"); + throw ex; + } + ResultSet results = null; + try { + if (statement != null) { + results = statement.executeQuery("SELECT * FROM " + userTable + ";"); + } + } catch (SQLException ex) { + logger.log(Level.SEVERE, "can't execute SELECT query from " + userTable + " table"); + throw ex; + } + try { + if (results != null) { + while (results.next()) { + String username = results.getString("username"); + dmUsers.put(username, username); + } + results.close(); + } + if (statement != null) { + statement.close(); + } + } catch (SQLException ex) { + logger.log(Level.WARNING, "query results processing error ", ex); + } + + // 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 = ?"); + } 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(); + } + } + + 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) { + try { + insertQuery.setString(1, dmuser.username); + insertQuery.setString(2, dmuser.firstName); + insertQuery.setString(3, dmuser.lastName); + insertQuery.setString(4, dmuser.middleName); + insertQuery.setString(5, dmuser.email); + insertQuery.setString(6, dmuser.badge); + insertQuery.execute(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "can't execute query to add user ", ex); + } + } + + void updateUser(DmUser dmuser) { + try { + updateQuery.setString(1, dmuser.email); + updateQuery.setString(2, dmuser.lastName); + updateQuery.setString(3, dmuser.username); + updateQuery.executeUpdate(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "can't execute query to update user", ex); + } + } + + void close() { + try { + insertQuery.close(); + updateQuery.close(); + connection.close(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "problem closing PostgreSQL connection ", 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 new file mode 100644 index 0000000000000000000000000000000000000000..4b843535be52adc8a15f694d9e7d7864fb557219 --- /dev/null +++ b/tools/AccountSynchronizer/accountSynchronizer/src/gov/anl/aps/dm/sync/Synchronizer.java @@ -0,0 +1,159 @@ +package gov.anl.aps.dm.sync; + +import java.io.IOException; +import java.io.InputStream; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Date; +import java.util.Properties; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Synchronizer { +// private final LdapConn lConnection = new LdapConn(); + private OracleConnection oConnection; + private PsqlConnection pConnection; + private final Properties config = new Properties(); + private final String configFile = "config.properties"; + private final Properties tableRows = new Properties(); + private final String oracleTable = "oracleTable.properties"; + private FileHandler fileHandler; + + private static final Logger logger = Logger.getLogger("AccountSynchronizerLogger"); + + public static void main(String[] argv) { + Synchronizer sync = new Synchronizer(); + sync.loadProperties(sync.configFile); + sync.initLogger(); + sync.oConnection = new OracleConnection(logger); + sync.pConnection = new PsqlConnection(logger); + sync.connectAndInit(); + sync.synchronize(); + } + + private void loadProperties(String configFile) { + InputStream configInputStream = getClass().getClassLoader().getResourceAsStream(configFile); + if (configInputStream != null) { + try { + this.config.load(configInputStream); + } catch (IOException ex) { + initDefaultLogger(); + logger.log(Level.SEVERE, "can't load configuration ", ex); + System.exit(-1); + } + } else { + initDefaultLogger(); + logger.log(Level.SEVERE, "can't find configuration file"); + System.exit(-1); + } + + InputStream tableInputStream = getClass().getClassLoader().getResourceAsStream(oracleTable); + if (tableInputStream != null) { + try { + this.tableRows.load(tableInputStream); + } catch (IOException ex) { + logger.log(Level.SEVERE, "can't load Oracle table rows definitions ", ex); + System.exit(-1); + } + } + } + + private void initDefaultLogger() { + try { + fileHandler = new FileHandler("accountSynchronizer.log"); + logger.addHandler(fileHandler); + logger.log(Level.WARNING, "Using default logger "); + } catch (SecurityException | IOException ex) { + ex.printStackTrace(); + System.exit(-1); + } + } + + private void initLogger() { + String pattern = config.getProperty("log.file"); + int limit = 0; + int count = 0; + try { + String limitProperty = config.getProperty("log.limit"); + limit = Integer.decode(limitProperty); + count = Integer.decode(config.getProperty("log.count")); + } catch (NumberFormatException e) { + initDefaultLogger(); + logger.log(Level.WARNING, "The logger limit or count are not configured properly. ", e); + System.exit(-1); + } + try { + fileHandler = new FileHandler(pattern, limit, count); + logger.addHandler(fileHandler); + } catch (SecurityException | IOException e) { + e.printStackTrace(); + System.exit(-1); + } + } + + private void connectAndInit() { + // lConnection.connect(); + try { + pConnection.connect(config); + } + catch (SQLException e) { + System.exit(-1); + } + try { + oConnection.connect(config); + } + catch (SQLException e) { + pConnection.close(); + System.exit(-1); + } + try { + pConnection.init(); + } + catch (SQLException e) { + pConnection.close(); + oConnection.close(); + System.exit(-1); + } + } + + private void synchronize() { + Date lastUpdate = pConnection.getLastUpdate(); + DmUser dmuser = new DmUser(); + try { + ResultSet results = oConnection.getUsers(config.getProperty("oracle.database.table")); + while (results.next()) { + 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)) { + // update user + dmuser.email = results.getString("EMAIL"); + dmuser.username = username; + dmuser.lastName = results.getString("LAST_NAME"); + pConnection.updateUser(dmuser); + dmuser.clear(); + } + } else { + // add user + dmuser.badge = badge; + dmuser.email = results.getString("EMAIL"); + dmuser.firstName = results.getString("FIRST_NAME"); + dmuser.lastName = results.getString("LAST_NAME"); + dmuser.middleName = results.getString("MIDDLE_NAME"); + dmuser.username = username; + pConnection.addUser(dmuser); + dmuser.clear(); + } + } + pConnection.setLastUpdate(); + } catch (SQLException ex) { + logger.log(Level.SEVERE, "table processing error ", ex); + } + finally { + pConnection.close(); + oConnection.close(); + } + } + +} diff --git a/tools/AccountSynchronizer/lib/ojdbc7.jar b/tools/AccountSynchronizer/lib/ojdbc7.jar new file mode 100755 index 0000000000000000000000000000000000000000..fd38a6c4a5087be6da928776b920d6b9fbe70454 Binary files /dev/null and b/tools/AccountSynchronizer/lib/ojdbc7.jar differ diff --git a/tools/AccountSynchronizer/lib/postgresql-9.4-1201.jdbc4.jar b/tools/AccountSynchronizer/lib/postgresql-9.4-1201.jdbc4.jar new file mode 100755 index 0000000000000000000000000000000000000000..0cd5ce20e02fb5632acd2158c2d98ccf2d5c94a0 Binary files /dev/null and b/tools/AccountSynchronizer/lib/postgresql-9.4-1201.jdbc4.jar differ diff --git a/tools/AccountSynchronizer/lib/unboundid-ldapsdk-me.jar b/tools/AccountSynchronizer/lib/unboundid-ldapsdk-me.jar new file mode 100755 index 0000000000000000000000000000000000000000..040b0ac9ac77d4db5d40ac184f20e1a625107f1d Binary files /dev/null and b/tools/AccountSynchronizer/lib/unboundid-ldapsdk-me.jar differ