--- /dev/null
+/*****************************************************************************
+ * Copyright Igor Barma, Eric Brun, Alexandre Desoubeaux, Christian Martel,
+ * (2 décembre 2008)
+ *
+ * Ce logiciel est un programme informatique servant à l'évaluation des
+ * compétences.
+ *
+ * Ce logiciel est régi par la licence CeCILL soumise au droit français et
+ * respectant les principes de diffusion des logiciels libres. Vous pouvez
+ * utiliser, modifier et/ou redistribuer ce programme sous les conditions
+ * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
+ * sur le site "http://www.cecill.info".
+ *
+ * En contrepartie de l'accessibilité au code source et des droits de copie,
+ * de modification et de redistribution accordés par cette licence, il n'est
+ * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
+ * seule une responsabilité restreinte pèse sur l'auteur du programme, le
+ * titulaire des droits patrimoniaux et les concédants successifs.
+ *
+ * A cet égard l'attention de l'utilisateur est attirée sur les risques
+ * associés au chargement, à l'utilisation, à la modification et/ou au
+ * développement et à la reproduction du logiciel par l'utilisateur étant
+ * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
+ * manipuler et qui le réserve donc à des développeurs et des professionnels
+ * avertis possédant des connaissances informatiques approfondies. Les
+ * utilisateurs sont donc invités à charger et tester l'adéquation du
+ * logiciel à leurs besoins dans des conditions permettant d'assurer la
+ * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
+ * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
+ *
+ * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
+ * pris connaissance de la licence CeCILL, et que vous en avez accepté les
+ * termes.
+ *******************************************************************************/
+package com.pentila.evalcomp.manager;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.FileHandler;
+
+import com.pentila.evalcomp.manager.interfacedef.ISynchroBase;
+import com.pentila.evalcomp.synchronization.IDbManager;
+import com.pentila.evalcomp.synchronization.ILdapManager;
+import com.pentila.evalcomp.synchronization.ImportAnnuaire;
+import com.pentila.evalcomp.synchronization.RolesManager;
+import com.pentila.evalcomp.synchronization.SynchroParams;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Class used to synchronize the database in ldap and in sql. If there are a
+ * large number of users and groups, when building filters for searching in ldap
+ * database, an approach of segmentation is used. Each time a certain number of
+ * item in a filter will be found.
+ */
+public class SynchroManager implements ISynchroBase {
+
+ /** The handler. */
+ FileHandler handler;
+
+ /** The db manager. */
+ private IDbManager dbManager;
+
+ /** The import annuaire. */
+ private ImportAnnuaire importAnnuaire;
+
+ /** The ldap manager. */
+ private ILdapManager ldapManager;
+
+ /** The logger. */
+ org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(SynchroManager.class);
+
+ /** The roles manager. */
+ private RolesManager rolesManager;
+
+ /** The synchro. */
+ private SynchroParams synchro;
+
+ /*
+ * addOnly permet de configurer la synchronization
+ * pour qu'elle ne fasse aucune suppression.
+ */
+ /** The add only. */
+ private boolean addOnly = false;
+
+
+ /**
+ * Construction.
+ */
+ public SynchroManager() {
+ try {
+ // set the logger
+ /*
+ * handler = new FileHandler("EvalComp.log");
+ * logger.addHandler(handler);
+ */
+ } catch (SecurityException e) {
+ }
+ }
+
+ /**
+ * Synchroniza from db to ldap. It calls, one by one, all the methods for
+ * the synchronization.
+ */
+ private void dbldap() {/*
+ * dbManager.dbLdapUserAdd();
+ * dbManager.dbLdapUserDelete();
+ * dbManager.dbLdapUserUpdate();
+ *
+ * dbManager.dbLdapGroupAdd();
+ * dbManager.dbLdapGroupDelete();
+ * dbManager.dbLdapGroupUpdate();
+ */
+ }
+
+ /**
+ * This method constructs or updates the DB grup that contains all the users
+ * from the DB and NOT from LDAP.
+ */
+ public void generateOrUpdateAllDbUsersGroup() {
+ dbManager.generateOrUpdateAllDbUsersGroup();
+ }
+
+ /**
+ * Used to import a new ldap data file.
+ *
+ * @param annuaireStream
+ * the annuaire stream
+ */
+ public void importAnnuaire(InputStream annuaireStream) {
+ logger.info(" annuaire import requested... ");
+ importAnnuaire.importAnnuaire(annuaireStream);
+ //logger
+ // .info(" performing synchronization after the new annuaire import...");
+ //this.run();
+ }
+
+
+
+ /**
+ * Ldapdb add only.
+ *
+ * @return the list
+ */
+ private List<String> ldapdbAddOnly(){
+ List<String> result = new ArrayList<String>();
+
+ result.add("AJOUT D'UTILISATEURS");
+ result.add("--------------------");
+
+ logger
+ .info("\n\n ----------------------================== USER ADD ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbUserAdd());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+
+
+
+ result.add("MISE A JOUR D'UTILISATEURS");
+ result.add("--------------------------");
+
+ logger
+ .info("\n\n ----------------------================== USER UPDATE ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbUserUpdate());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+
+ result.add("AJOUT DE GROUPES");
+ result.add("----------------");
+
+ logger
+ .info("\n\n ----------------------================== GROUP ADD ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbGroupAdd());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+
+ result.add("");
+ result.add("MISE A JOUR DE GROUPES");
+ result.add("----------------------");
+
+ logger
+ .info("\n\n ----------------------================== GROUP UPDATE ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbGroupUpdate());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+ return result;
+
+
+ }
+
+
+ /**
+ * Synchroniza from ldap to db. It calls, one by one, all the methods for
+ * the synchronization.
+ *
+ * @return the list< string>
+ */
+ private List<String> ldapdb() {
+ List<String> result = new ArrayList<String>();
+
+ result.add("AJOUT D'UTILISATEURS");
+ result.add("--------------------");
+
+ logger
+ .info("\n\n ----------------------================== USER ADD ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbUserAdd());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+
+ result.add("SUPPRESSION D'UTILISATEURS");
+ result.add("--------------------------");
+
+ logger
+ .info("\n\n ----------------------================== USER DELETE ldap -> db ===================-------------");
+
+ try {
+ result.add(ldapManager.ldapDbUserDelete());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+
+ result.add("MISE A JOUR D'UTILISATEURS");
+ result.add("--------------------------");
+
+ logger
+ .info("\n\n ----------------------================== USER UPDATE ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbUserUpdate());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+
+ result.add("AJOUT DE GROUPES");
+ result.add("----------------");
+
+ logger
+ .info("\n\n ----------------------================== GROUP ADD ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbGroupAdd());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+ result.add("SUPPRESSION DE GROUPES");
+ result.add("----------------------");
+
+ logger
+ .info("\n\n ----------------------================== GROUP DELETE ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbGroupDelete());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+
+ result.add("");
+ result.add("MISE A JOUR DE GROUPES");
+ result.add("----------------------");
+
+ logger
+ .info("\n\n ----------------------================== GROUP UPDATE ldap -> db ===================-------------");
+ try {
+ result.add(ldapManager.ldapDbGroupUpdate());
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+ }
+ return result;
+ }
+
+ /**
+ * Start the role synchronization.
+ */
+ public void roleSynchronization() {
+ logger.info(" performing roles synchronization...");
+ rolesManager.performRoleSynchronization();
+ }
+
+ /**
+ * Main method. Here it is the starting point of the synchronization.
+ *
+ * @return the list< string>
+ */
+ public List<String> run() {
+
+
+ ldapManager.setAddOnly(addOnly);
+
+ List<String> result = new ArrayList<String>();
+
+ // get the set orders
+ int ldap = synchro.getLdapDbOrder();
+ int db = synchro.getDbLdapOrder();
+ // if both greater than 0
+ if (ldap > 0 && db > 0) {
+ // if ldap is first
+ if (ldap <= db) {
+ if (addOnly){
+ ldapdbAddOnly();
+ }else{
+ ldapdb();
+ }
+ dbldap();
+ }// else if db is first
+ else {
+
+ dbldap();
+ if (addOnly){
+ ldapdbAddOnly();
+ }else{
+ ldapdb();
+ }
+ }
+ }// else if ldap is not 0 , do ldap-db without db-ldap
+ else if (ldap > 0) {
+ if (addOnly){
+ result.addAll(ldapdbAddOnly());
+ }else{
+ result.addAll(ldapdb());
+ }
+ }// else if ldap is not 0 , do db-ldap without ldap-db
+ else if (db > 0) {
+ dbldap();
+ }
+
+ result.add("");
+ result.add("SYNCHRONIZATION DES ROLES");
+ result.add("-------------------------");
+ // perform the role synchronization
+ try {
+ roleSynchronization();
+ result.add("OK");
+ } catch (Exception e) {
+ e.printStackTrace();
+ result.add(e.getMessage());
+
+ }
+
+ result.add("");
+ result.add("GENERATION DU GROUPE ETABLISSEMENT");
+ result.add("----------------------------------");
+ try {
+ generateOrUpdateAllDbUsersGroup();
+ result.add("OK");
+ } catch (Exception e) {
+ result.add(e.getMessage());
+ }
+ result.add("");
+ result.add("TERMINER");
+ return result;
+ }
+
+ /**
+ * Sets the db manager.
+ *
+ * @param dbManager
+ * the dbManager to set
+ */
+ public void setDbManager(IDbManager dbManager) {
+ this.dbManager = dbManager;
+ }
+
+ /**
+ * Sets the import annuaire.
+ *
+ * @param importAnnuaire
+ * the importAnnuaire to set
+ */
+ public void setImportAnnuaire(ImportAnnuaire importAnnuaire) {
+ this.importAnnuaire = importAnnuaire;
+ }
+
+ /**
+ * Sets the ldap manager.
+ *
+ * @param ldapManager
+ * the ldapManager to set
+ */
+ public void setLdapManager(ILdapManager ldapManager) {
+ this.ldapManager = ldapManager;
+ }
+
+ /**
+ * Sets the roles manager.
+ *
+ * @param rolesManager
+ * the rolesManager to set
+ */
+ public void setRolesManager(RolesManager rolesManager) {
+ this.rolesManager = rolesManager;
+ }
+
+ /**
+ * Sets the synchro.
+ *
+ * @param synchro
+ * the new synchro
+ */
+ public void setSynchro(SynchroParams synchro) {
+ this.synchro = synchro;
+ }
+
+ /**
+ * Checks if is adds the only.
+ *
+ * @return true, if is adds the only
+ */
+ public boolean isAddOnly() {
+ return addOnly;
+ }
+
+ /**
+ * Sets the adds the only.
+ *
+ * @param addOnly the new adds the only
+ */
+ public void setAddOnly(boolean addOnly) {
+ this.addOnly = addOnly;
+ }
+
+
+}