import java.io.IOException;
import java.sql.Connection;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Collections;
import javax.naming.ldap.PagedResultsControl;
import javax.naming.ldap.PagedResultsResponseControl;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import fr.gouv.finances.dgfip.utils.QueryProvider;
import fr.gouv.finances.dgfip.xemelios.data.DataLayerManager;
import fr.gouv.finances.dgfip.xemelios.data.impl.pool.PoolManager;
import fr.gouv.finances.dgfip.xemelios.data.utils.jdbc.JdbcUtils;
+import fr.gouv.finances.dgfip.xemelios.data.utils.jdbc.PStmtBinder;
import fr.gouv.finances.dgfip.xemelios.data.utils.jdbc.PStmtBinder.SimplePStmtBinderBuilder;
import fr.gouv.finances.dgfip.xemelios.data.utils.jdbc.RowMapper;
String adUser = getProps().getProperty(AD_USERNAME_PROP);
String adPassword = Scramble.unScramblePassword(getProps().getProperty(AD_PASSWORD_PROP));
String adResultPageSize = getProps().getProperty(AD_RESULT_PAGE_SIZE_PROP);
+ String adFullSync = getProps().getProperty(SYNC_FULL_PROP);
adBaseDn = getProps().getProperty(AD_BASE_DN_PROP);
- resultPageSize = Integer.parseInt(adResultPageSize);
- fullSync = Boolean.valueOf(getProps().getProperty(SYNC_FULL_PROP));
+ resultPageSize = (StringUtils.isEmpty(adResultPageSize) ? 100 : Integer.parseInt(adResultPageSize));
+ fullSync = (StringUtils.isEmpty(adFullSync) ? false : Boolean.valueOf(adFullSync));
logger.debug("LDAP - url=" + adURL + " - user=" + adUser);
protected void buildUserScopes(Connection connection) throws SQLException {
String cleanQuery = queryProvider.getQuery("buildUserScopes.clean");
- String fillQuery = queryProvider.getQuery("buildUserScopes.insertScopes");
+ String getUsers = queryProvider.getQuery("buildUserScopes.getUsers");
+ String insertUserScope = queryProvider.getQuery("buildUserScopes.insertUserScope");
JdbcUtils.executeUpdate(connection, cleanQuery);
- JdbcUtils.executeUpdate(connection, fillQuery);
+ connection.commit();
+
+ List<BuildScopeUser> users = JdbcUtils.queryObjects(connection, getUsers, new RowMapper.ClassRowMapper(BuildScopeUser.class));
+ for (BuildScopeUser u : users) {
+ logger.debug("Build user scope : " + u.getUtiId() + " (dep:" + u.getDepCode() + ")");
+ JdbcUtils.executeUpdate(connection, insertUserScope, new PStmtBinder.SimplePStmtBinder(new Object[] { u.getUtiId(), u.getDepCode() }));
+ connection.commit();
+ }
}
protected String getActiveDirectoryCurrentTime(DirContext adContext) throws NamingException, ParseException {
return result;
}
+ public static class BuildScopeUser {
+
+ private Long utiId;
+ private String depCode;
+
+ public BuildScopeUser(ResultSet rs) throws SQLException {
+ utiId = rs.getLong(1);
+ depCode = rs.getString(2);
+ }
+
+ public Long getUtiId() {
+ return utiId;
+ }
+
+ public String getDepCode() {
+ return depCode;
+ }
+
+ }
+
private static class ActiveDirectoryUser {
private static final int AD_ACCOUNT_ENABLED = 512;
updateUserProfiles.clean=DELETE FROM AUTH_UTI_PRF WHERE UTI_ID = ?
updateUserProfiles.insertProfiles=INSERT INTO AUTH_UTI_PRF(UTI_ID, PRF_CODE) VALUES (?, ?)
-buildUserScopes.clean=DELETE FROM AUTH_HAB_COL
-buildUserScopes.insertScopes=\
- INSERT INTO AUTH_HAB_COL (UTI_ID, TID_CODE, COL_CLEF) \
- SELECT DISTINCT UTI.UTI_ID, 'SIRET', REF_COLL.IDCOLL \
+buildUserScopes.clean=TRUNCATE TABLE AUTH_HAB_COL
+buildUserScopes.getUsers=\
+ SELECT UTI.UTI_ID, REF_CRC_DEPT.RFC_DEP_CODE \
FROM AUTH_UTILISATEUR UTI \
- JOIN REF_CRC_DEPT ON REF_CRC_DEPT.RFC_CRC_NOM = UTI.UTI_CRC \
- JOIN REF_COLL_SPL_IX REF_COLL ON SUBSTR(REF_COLL.CODIC, 0, 3) = LPAD(REF_CRC_DEPT.RFC_DEP_CODE, 3, '0')
+ JOIN REF_CRC_DEPT ON REF_CRC_DEPT.RFC_CRC_NOM = UTI.UTI_CRC
+
+buildUserScopes.insertUserScope=\
+ INSERT INTO AUTH_HAB_COL (UTI_ID, TID_CODE, COL_CLEF) \
+ SELECT DISTINCT ?, 'SIRET', REF_COLL.IDCOLL \
+ FROM REF_COLL_SPL_IX REF_COLL \
+ WHERE SUBSTR(REF_COLL.CODIC, 0, 3) = LPAD(?, 3, '0')
unsynchronizeUser.cleanProfiles=DELETE FROM AUTH_UTI_PRF WHERE UTI_ID = ?