Package com.calexo.openhra.serveur.ejb

Source Code of com.calexo.openhra.serveur.ejb.GestionClientsBean$OpenHRAComp

/**
* Package des EJB
* @author Calexo
*/
package com.calexo.openhra.serveur.ejb;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

import javax.ejb.CreateException;
import javax.naming.NamingException;

import org.jboss.logging.Logger;

import com.calexo.openhra.interfaces.ejb.*;
import com.calexo.openhra.serveur.Javixo4OpenHRA;
import com.calexo.openhra.serveur.RandPass;

/**
*
* Bean de service de OpenHRA<br>
* Permet d'interagir avec les diff�rents Bean CMP et BMP.<br>
*
* @author calexo
*
* @ejb.bean name="GestionClients"
*           display-name="Gestion OpenHRA"
*           description="Gestion : Session Bean unique du OpenHRA"
*           jndi-name="ejb/GestionClients"
*           type="Stateless"
*           view-type="remote"
* @ejb.util generate = "physical"
*
*/
public class GestionClientsBean implements SessionBean {

  /**
   *
   */
  private static final long serialVersionUID = 1L;

  /**
   * Contient le password CmdMail issu du ConfigBean
   * @see com.calexo.openhra.serveur.ejb.ConfigBean
   */
  private static String cmdPassword;
  /**
   * Contient le requester CmdMail issu du ConfigBean
   * @see com.calexo.openhra.serveur.ejb.ConfigBean
   */
  private static String cmdMailRequester;

  /**
   * Logger
   */
  private static final Logger logger = Logger.getLogger(GestionClients.class);

  /**
   * Constructeur du bean
   */
  public GestionClientsBean() {
    super();

    cmdPassword=getConfig("clxcmdpass");
    cmdMailRequester=getConfig("HTTP_Serveur_Admin");
  }

  public void setSessionContext(SessionContext ctx)
    throws EJBException,
    RemoteException {

  }

  public void ejbRemove() throws EJBException, RemoteException {

  }

  public void ejbActivate() throws EJBException, RemoteException {

  }

  public void ejbPassivate() throws EJBException, RemoteException {

  }

  /**
   * Default create method
   * @throws CreateException
   * @ejb.create-method
   */
  public void ejbCreate() throws CreateException {
  }

  /**
   * Renvoie le login libre, a partir du nom
   * @param pName Nom du login
   * @return String : Login G�n�r�
   */
  private String generateLoginFromName(final java.lang.String pName) {

    ClientLocalHome ch = null;
    String retLogin;
    int maxLoginIndex = 0;
    int tmpind;

    String Prefix = pName.substring(0, 2).toUpperCase();
    Prefix = Prefix.replaceAll("[^\\w]", "X");

    try {
      ch = ClientUtil.getLocalHome();
      final Iterator it = ch.findByLogin(Prefix + "%").iterator();
      while (it.hasNext()) {
        tmpind = Integer.parseInt(((ClientLocal) it.next()).getLogin()
          .substring(2, 5));
        if (tmpind > maxLoginIndex)
        {
          maxLoginIndex = tmpind;
        }
      }
      final int NewLoginNum = maxLoginIndex + 1;
      retLogin = Prefix;
      for (int i = 3; i > String.valueOf(NewLoginNum).length(); i--)
      {
        retLogin += "0";
      }
      retLogin += String.valueOf(NewLoginNum);

    } catch (NamingException e1) {
      e1.printStackTrace();
      return null;
    } catch (FinderException e) {
      e.printStackTrace();

      return pName.substring(0, 2).toUpperCase() + "001";
    }

    return retLogin;

  }

  /**
   *
   * Cr�e un client avec le Nom<br>
   * <i>Obsolete</i>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @Deprecated Utiliser ClientSave
   */
  public boolean ClientCreate(final java.lang.String pName) {
    ClientLocal c;
    try {
      c = ClientUtil.getLocalHome().create(
        pName,
        "",
        generateLoginFromName(pName));
      c.setCreated(Boolean.TRUE);
    } catch (NamingException e) {
      e.printStackTrace();
      return false;
    } catch (CreateException e) {
      e.printStackTrace();
      return false;
    }
    return ((c != null) && (c.getName().equals(pName)));
  }

  private class OpenHRAComp implements Comparator, Serializable {
    private static final long serialVersionUID = 1L;

    public int compare (Object o1, Object o2) {
      try{
        if (o1 instanceof ClientValue)
          return ((ClientValue)o1).getLogin().compareTo(((ClientValue)o2).getLogin());
        else if (o1 instanceof BaseDonneesValue)
          return ((BaseDonneesValue)o1).getNom().compareTo(((BaseDonneesValue)o2).getNom());
        else if (o1 instanceof SiteValue)
          return ((SiteValue)o1).getId().compareTo(((SiteValue)o2).getId());
        else if (o1 instanceof CmdMailValue)
          return ((CmdMailValue)o1).getId().compareTo(((CmdMailValue)o2).getId());
        else return 0;
      } catch (Exception e) {
        System.err.println("OpenHRAComp : " + e.getMessage());
        return 0;
      }
      }
  }

  /**
   * Liste les clients.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ClientValue
   *
   */
  public Collection ClientsList() {
    Collection coll = null;
    HashSet result = new HashSet();

    try {
      coll = ClientUtil.getLocalHome().findAll();

      final Iterator it = coll.iterator();
      while (it.hasNext()) {
        final ClientLocal cli = (ClientLocal) it.next();
        final ClientValue clidata = cli.getClientValue();
        result.add(clidata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }

    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;

  }

  /**
   * Ram�ne les Clients dont le login debute par pLogin
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ClientValue
   *
   */
  public Collection ClientSearchByLogin(final String pLogin) {
    Collection result = new HashSet();
    try {
      Collection resultCliLocal = ClientUtil.getLocalHome().findByLogin(
        pLogin);
      if (resultCliLocal == null) {
        throw new FinderException("resultCliLocal null");
      }
      Iterator it = resultCliLocal.iterator();
      while (it.hasNext()) {
        ClientLocal cliloc = (ClientLocal) it.next();
        result.add(cliloc.getClientValue());
      }
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }

    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;

  }

  /**
   * Ramene les Clients dont le Login, NomPrenom ou eMail debute par pCrit
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ClientValue
   * @param String pCrit Crit�re
   */
  public Collection ClientSearchMultiCritere(final String pCrit) {
    Collection result = new HashSet();
    try {
      Collection resultCliLocal = ClientUtil.getLocalHome().findMultiCritere(pCrit);
      if (resultCliLocal == null) {
        throw new FinderException("resultCliLocal null");
      }
      Iterator it = resultCliLocal.iterator();
      while (it.hasNext()) {
        ClientLocal cliloc = (ClientLocal) it.next();
        result.add(cliloc.getClientValue());
      }
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }

    try {
      Set set = new TreeSet ( new OpenHRAComp());
      set.addAll(result);
      return set;
    } catch (Exception e) {
      logger.error("ClientSearchMultiCritere - Tri - ",e);
      return null;
    }

  }

  /**
   * Liste les nouveaux clients.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ClientValue
   *
   */
  public Collection ClientListNew() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = ClientUtil.getLocalHome().findNew();

      Iterator it = coll.iterator();
      while (it.hasNext()) {
        ClientLocal cli = (ClientLocal) it.next();
        ClientValue clidata = cli.getClientValue();
        result.add(clidata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }
    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;
  }

  /**
   * Liste les clients modifi�s.
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ClientValue
   *
   */
  public Collection ClientListUpdated() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = ClientUtil.getLocalHome().findNew();

      Iterator it = coll.iterator();
      while (it.hasNext()) {
        ClientLocal cli = (ClientLocal) it.next();
        ClientValue clidata = cli.getClientValue();
        result.add(clidata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }

    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;
  }


  /**
   * Supprime un Client<br>
   * Utilisation d�conseill�e
   * @ejb.interface-method  view-type = "remote"
   * @Deprecated
   */
  public boolean ClientDelete(final java.lang.String pLogin) {
    boolean ret = false;
    Collection result;
    try {
      result = ClientUtil.getLocalHome().findByLogin(pLogin);
      if (result.size() != 1) {
        throw new EJBException("Plusieurs Login correspondant � '"
          + pLogin
          + "'");
      }
      ((ClientLocal) result.iterator().next()).remove();
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    } catch (RemoveException e) {
      e.printStackTrace();
    }

    return ret;
  }

  /**
   * Reset le password et g�n�re l'avis
   * @ejb.interface-method  view-type = "remote"
   * @return boolean indiquant la r�ussite de l'op�ration
   */
  public boolean ClientGeneratePass(
      final com.calexo.openhra.interfaces.ejb.ClientValue clientValue)
  {
    String newPass = new RandPass().getPass(8);

    clientValue.setMotDePasse(newPass);

    ClientSave(clientValue);

    // CmdMail
    // Inutile car changement mot de passe g�r� dans ClientSave

    // Avixo
    // Inutile car changement mot de passe g�r� dans ClientSave

    return true;

  }

  /**
   * Sauve un client<br>
   * Ajout ou modification (en se basant sur le login)<BR>
   * Toujours cr�ation si le login n'est pas fourni
   * @ejb.interface-method  view-type = "remote"
   * @return String indiquant le login du client
   */
  public String ClientSave(
    com.calexo.openhra.interfaces.ejb.ClientValue clientValue)
    throws RuntimeException
  {

    ClientLocal cliLoc = null;
    ClientLocalHome cliLocHome = null;
    boolean bCreation = false; // Cr�� ou juste cr�� avant
    boolean isPassChanged = false;
    String cmdAdduser=null;
    // CmdAdduser=adduser -mk -d /home/%% -s /bin/false -g users -c%% %%

    try {
      cliLocHome = ClientUtil.getLocalHome();
    } catch (NamingException ne) {
      throw new EJBException(ne.getMessage());
    }

    if (clientValue.getLogin() == null)
    {
      logger.debug("Login est null");
      bCreation = true;
    }
    else
    {
      try {
        cliLoc = cliLocHome.findByPrimaryKey(clientValue.getLogin());
        // Le client existe deja -> modification
        if (cliLoc.getMotDePasse()==null
          || clientValue.getMotDePasse()==null
          || !cliLoc.getMotDePasse().equals(clientValue.getMotDePasse()) )
        {
          isPassChanged = true;
        }
      } catch (FinderException fe) {
        bCreation = true;
      }
    }

    // On verifie qu'il n'existe pas un autre Client avec cet email
    if ( clientValue.getEMail()!=null && !"".equalsIgnoreCase(clientValue.getEMail()) )
    {
      String email = clientValue.getEMail();
      ClientLocal emailExistsClient;
      Collection candidats;
      try {
        candidats = cliLocHome.findByEmail(email);
        Iterator it = candidats.iterator();
        boolean emailExists = false;
        while (it.hasNext())
        {
          emailExistsClient = (ClientLocal)it.next();
          if (bCreation) // Si c'est une creation, l'autre est forc�ment pas lui
            emailExists=true;
          else if (!emailExistsClient.getLogin().equals(clientValue.getLogin())) // Sinon, on regarde si c'est lui via le login
            emailExists=true;
          if (emailExists)
          {
            logger.error("Il existe deja un client avec l'email " + email + " : " + emailExistsClient.getLogin());
            throw new RuntimeException("Il existe deja un client avec l'email " + email + " : " + emailExistsClient.getLogin());
            //return null;
          }
        }
      } catch (FinderException e) {
        // Si rien trouv�, c'est Ok
      }

    }

    // Si c'est un nouveau, on le cr�e
    if (bCreation)
    {
      try {
        clientValue.setLogin(generateLoginFromName(clientValue.getName()));
        cliLoc = cliLocHome.create(clientValue.getName(),
              clientValue.getPrenom(),
              clientValue.getLogin());
        cliLoc.setCreated(Boolean.TRUE);
      } catch (CreateException e) {
        logger.error("Impossible de cr�er le Client",e);
        throw new RuntimeException("Impossible de cr�er le Client");
        // return null;
      }

      if (clientValue.getMotDePasse()==null || clientValue.getMotDePasse().length()==0)
      {
        clientValue.setMotDePasse("xxx");
      }

      // On cherche la commande cmdMail � utiliser pour cr��er le compte Unix
      cmdAdduser = getConfig("CmdAdduser");
      if (cmdAdduser==null) {
        cmdAdduser = "echo No cmdAdduser - Create %%";
      }

      // On cr�e le compte Unix via CmdMail
      CmdMailCreate(cmdMailRequester,
            "Cr�ation Client " + clientValue.getLogin(),
            "cmd",cmdAdduser.replaceAll("%%",clientValue.getLogin()),
            cmdPassword);

      // Cr�ation du compte Mysql
      // On cherche la commande cmdMail � utiliser pour cr��er le compte MySql
      String cmdAddMysqlUser=getConfig("CmdAddMysqlUser");
      if (cmdAddMysqlUser==null) {
        cmdAddMysqlUser = "echo No cmdAddMysqlUser - Create Mysql User %%";
      }
      // On cr�e le compte Unix via CmdMail
      CmdMailCreate("OpenHRA",
            "Cr�ation User MySql " + clientValue.getLogin(),
            "cmd",cmdAddMysqlUser.replaceAll("%%1",clientValue.getLogin())
                .replaceAll("%%2", clientValue.getMotDePasse()),
            cmdPassword);

      // Avixo suite � cr�ation du client
      if (clientValue.getEMail()!=null
          && clientValue.getEMail().contains("@") )
      {
        Javixo4OpenHRA avis = new Javixo4OpenHRA();
        String CFG_ModeleOpenHRANewClient,
            CFG_MSWSignature;
        CFG_ModeleOpenHRANewClient = getConfig("ModeleOpenHRANewClient");
        CFG_MSWSignature = getConfig("MSWSignature");

        avis.setEmail( clientValue.getEMail() );
        avis.setRefExt("CLI" + clientValue.getLogin());
        if (avis.getRefExt().length()>15) {
          avis.setRefExt(avis.getRefExt().substring(0,12));
        }
        String cliId="";
        if ((clientValue.getPrenom()!=null) && (!clientValue.getPrenom().equals("")))
          cliId=clientValue.getPrenom() + " ";
        cliId+=clientValue.getName();

        avis.setMessage(cliId + ";;;" + clientValue.getLogin());
        avis.setModele(CFG_ModeleOpenHRANewClient);
        avis.setSignature(CFG_MSWSignature);

        String ret = avis.send();
        logger.debug("Javixo : " + ret);
      }
    } else {
      cliLoc.setCreated(Boolean.FALSE);
      cliLoc.setUpdated(Boolean.TRUE);
    }
    cliLoc.setClientValue(clientValue);

    // Changement mot de passe
    if (( bCreation || isPassChanged )
        && cliLoc.getMotDePasse()!=null
        && !cliLoc.getMotDePasse().equals("xxx") /* Mot de passe temp */
    )
    {
      // On cherche la commande cmdMail � utiliser pour cr��er le compte MySql
      String cmdChgMysqlPass=getConfig("CmdChgMysqlPass");
      if (cmdChgMysqlPass==null) {
        cmdChgMysqlPass = "echo No cmdAddMysqlUser - Change Mdp Mysql User %%";
      }
      // On cr�e le compte Unix via CmdMail
      CmdMailCreate("OpenHRA",
            "Changement Mot de passe MySql " + cliLoc.getLogin(),
            "cmd",cmdChgMysqlPass.replaceAll("%%1",cliLoc.getLogin())
                .replaceAll("%%2", cliLoc.getMotDePasse()),
            cmdPassword);

      // Unix
      String cmdChgPass=getConfig("CmdChgPass");
      if (cmdChgPass==null) {
        cmdChgPass = "echo No cmdChgPass - Change Mdp User %%";
      }
      // On modifie le compte Unix via CmdMail
      CmdMailCreate("OpenHRA",
            "Changement Mot de passe " + cliLoc.getLogin(),
            "cmd",cmdChgPass.replaceAll("%%1",cliLoc.getLogin())
                .replaceAll("%%2", cliLoc.getMotDePasse()),
            cmdPassword);

      // JAvixo changement mot de passe
      if (cliLoc.getEMail()!=null
          && cliLoc.getEMail().contains("@") )
      {
        //Javixo avis = new Javixo();
        Javixo4OpenHRA avis = new Javixo4OpenHRA();

        String //CFG_EndPoint = getConfig("AvixoEndPoint"),
            cfg_ModeleOpenHRAMdpChanged = getConfig("ModeleCRASMdpChanged"),
            CFG_MSWSignature = getConfig("MSWSignature");

        avis.setEmail( cliLoc.getEMail() );
        avis.setRefExt("CLI" + cliLoc.getLogin());
        if (avis.getRefExt().length()>15)
        {
          avis.setRefExt(avis.getRefExt().substring(0,12));
        }
        // cliId
        String cliId="";
        if ((cliLoc.getPrenom()!=null) && (!cliLoc.getPrenom().equals("")))
          cliId=cliLoc.getPrenom() + " ";
        cliId+=cliLoc.getName();
        avis.setMessage(cliId + ";;;" + cliLoc.getMotDePasse());
        avis.setModele(cfg_ModeleOpenHRAMdpChanged);
        avis.setSignature(CFG_MSWSignature);

        //avis.setEndPoint(CFG_EndPoint);

        String ret = avis.send();
        if (ret!=null)
          logger.debug("ClientGeneratePass - Javixo : " + ret);
        else
        {
          logger.error("ClientGeneratePass - Javixo - ERROR");
          //return false;
        }
        //System.out.println(ret);
      }
    }

    return clientValue.getLogin();
  }

  public String getConfig(String key) {

    try {
      ConfigLocalHome ch = ConfigUtil.getLocalHome();
      ConfigLocal cfg = ch.findByPrimaryKey(key);
      return cfg.getConfigString();
    } catch (NamingException e) {
      logger.error("getConfig",e);
      e.printStackTrace();
    } catch (FinderException e) {
      logger.error("Config : " + key + " non d�fini !");
    } catch (Exception e) {
      logger.error("Erreur",e);
    }

    return null;
  }

  /**
   * Liste les sites
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de SiteValue
   *
   */
  public Collection SitesList() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = SiteUtil.getLocalHome().findAll();

      Iterator it = coll.iterator();
      while (it.hasNext()) {
        SiteLocal ste = (SiteLocal) it.next();
        SiteValue stedata = ste.getSiteValue();
        result.add(stedata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }
    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;


  }

  /**
   * Sauve un site<br>
   * Ajout ou modification
   * @ejb.interface-method  view-type = "remote"
   * @return boolean indiquant la r�ussite de l'op�ration
   *
   */
  public boolean SiteSave(com.calexo.openhra.interfaces.ejb.SiteValue siteValue) {

    SiteLocal steLoc = null;
    SiteLocalHome steLocHome = null;
    boolean bCreation = false;

    if (siteValue.getId()== null || "".equals(siteValue.getId())) {
      logger.error("Site Save - Id non pr�cis�");
      return false;
    }

    try {
      steLocHome = SiteUtil.getLocalHome();
    } catch (NamingException ne) {
      throw new EJBException(ne.getMessage());
    }

    // On verifie que le DocRoot n'est pas deja utilis�
    if ( siteValue.getDocRoot()!=null && !"".equalsIgnoreCase(siteValue.getDocRoot()) )
    {
      String docRoot = siteValue.getDocRoot();
      SiteLocal existsSite;
      Collection candidats;
      try {
        candidats = steLocHome.findByDocRoot(docRoot);
        Iterator it = candidats.iterator();
        while (it.hasNext())
        {
          existsSite = (SiteLocal)it.next();
          if (!existsSite.getId().equals(siteValue.getId())) // On regarde si c'est lui via l'Id
          {
            logger.error("Il existe deja un site avec le DocRoot " + docRoot + " : " + existsSite.getId());
            return false;
          }
        }
      } catch (FinderException e) {
        // Si rien trouv�, c'est OK, on continue
      }
    }

    // On verifie que l'UrlPrincipale n'est pas deja utilis�e
    if ( siteValue.getUrlPrincipale()!=null && !"".equalsIgnoreCase(siteValue.getUrlPrincipale()) )
    {
      String urlPrinc = siteValue.getUrlPrincipale();
      SiteLocal existsSite;
      Collection candidats;
      try {
        candidats = steLocHome.findByUrlPrincipale(urlPrinc);
        Iterator it = candidats.iterator();
        while (it.hasNext())
        {
          existsSite = (SiteLocal)it.next();
          if (!existsSite.getId().equals(siteValue.getId())) // On regarde si c'est lui via l'Id
          {
            logger.error("Il existe deja un site avec l'UrlPrincipale " + urlPrinc + " : " + existsSite.getId());
            return false;
          }
        }
      } catch (FinderException e) {
        // Si rien trouv�, c'est Ok
      }

    }

    // On trouve le site existant, sinon on le cr�e
    try {
      steLoc = steLocHome.findByPrimaryKey(siteValue.getId());
    } catch (FinderException fe) {
      try { // Nouveau
        steLoc = steLocHome.create(siteValue.getId());
        bCreation=true;
      } catch (CreateException ce) {
        throw new EJBException(ce.getMessage());
      }
    } catch (Exception e) {
      logger.error("Erreur dans SiteSave(Site : findByPrimaryKey (" + siteValue.getId() +")",e);
      return false;
    }

    if (bCreation)
    {
      // Avis de creation du site
      // Impossible car Client pas connu... -> Associate

    }

    logger.debug("setSiteValue..." + siteValue.getId());
    //logger.debug("setSiteValue..." + siteValue.getDirectoryIndex());
    steLoc.setSiteValue(siteValue);

    if (steLoc.getDateDebut() == null)
      steLoc.setDateDebut( new Date() );

    return true;
  }

  /**
   * Recherche un site par son Id
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return SiteValue ou NULL
   *
   */
  public SiteValue SiteSearchById(String pId) {
    SiteValue result = null;
    try {
      SiteLocal steLoc = SiteUtil.getLocalHome().findByPrimaryKey(pId);
      if (steLoc == null) {
        throw new FinderException("steLoc null");
      }
      result = steLoc.getSiteValue();
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }
    return result;

  }

  /**
   * Associe un site � un client
   * @return Ancien ClientLocal si existant
   * @ejb.interface-method  view-type = "remote"
   *
   */
  public ClientValue AssociateClientSite(String pClient_id, String pSite_id) {

    ClientLocal pClient = null;
    SiteLocal pSite = null;

    logger.debug("AssociateClientSite - Associe " + pSite_id + " avec " + pClient_id);

    // Recherche du site par Id
    try {
      pSite = SiteUtil.getLocalHome().findByPrimaryKey(pSite_id);
    } catch (FinderException e) {
      pSite=null;
      logger.error(pSite_id  + " n'est pas un id de site valable");
    } catch (NamingException e) {
      logger.error("Exception : ", e);
      e.printStackTrace();
    }

    // Recherche du client par Id (Login)
    try {
      pClient = ClientUtil.getLocalHome().findByPrimaryKey(pClient_id);
    } catch (FinderException e) {
      logger.trace(pClient_id  + " n'est pas un id de client valable");
      pClient=null;
    } catch (NamingException e) {
      e.printStackTrace();
    }

//     Recherche du client par NomPrenom
    if (pClient==null)
    {
      try {
        Collection clis = ClientUtil.getLocalHome().findByNamePrenom(pClient_id);
        Iterator it = clis.iterator();
        if (it.hasNext())
        {
          pClient = (ClientLocal)it.next();
          if (it.hasNext())  // Si result > 1, rien
          {
            pClient = null;
            logger.error(pClient_id  + " correspond � plusieurs NomPrenom de clients");
          }
        }
      } catch (FinderException e) {
        logger.trace(pClient_id  + " n'est pas un NomPrenom de client valable");
        pClient=null;
      } catch (NamingException e) {
        e.printStackTrace();
      }
    }

    // Recherche du client par eMail
    if (pClient==null)
    {
      try {
        Collection clis = ClientUtil.getLocalHome().findByEmail(pClient_id);
        Iterator it = clis.iterator();
        if (it.hasNext())
        {
          pClient = (ClientLocal)it.next();
          if (it.hasNext())  // Si result > 1, rien
          {
            pClient = null;
            logger.error(pClient_id  + " correspond � plusieurs emails de clients");
          }
        }
      } catch (FinderException e) {
        logger.trace(pClient_id  + " n'est pas un Email de client valable");
        pClient=null;
      } catch (NamingException e) {
        e.printStackTrace();
      }
    }


    if (pClient==null)
    {
      logger.error( "AssociateClientSite - Client non trouv�");
      return null;
    }
    if (pSite==null)
    {
      logger.error( "AssociateClientSite - Site non trouv�");
      return null;
    }

    // CmdMail creation repertoire
    // TODO CmdAddSite relanc� � chaque fois... pas bloquant, mais bof...
    String cmdAddSite = getConfig("CmdAddSite");
    if (cmdAddSite==null) {
      cmdAddSite = "echo No cmdAddSite - Create %%";
    }
    CmdMailCreate(cmdMailRequester,
          "Cr�ation Repertoire site " + pSite.getDocRoot(),
          "cmd",cmdAddSite.replaceAll("%%1",pClient.getLogin())
                  .replaceAll("%%2", pSite.getDocRoot()) ,
          cmdPassword);

    // JAvixo
    if (pClient.getEMail()!=null && pSite.getClient()==null) // Nouveau
    {
      Javixo4OpenHRA avis = new Javixo4OpenHRA();
      avis.setEmail( pClient.getEMail() );
      avis.setRefExt( "CLI" + pClient.getLogin());
      //avis.setEndPoint( getConfig("AvixoEndPoint"));
      String sDirIndex;
      if ((pSite.getDirectoryIndex()==null) || ("".equals(pSite.getDirectoryIndex())) )
        sDirIndex = getConfig("HTTP_Default_DirIndex");
      else
        sDirIndex = pSite.getDirectoryIndex();
      String sServAlias;
      if ( (pSite.getServerAliases()==null) || ("".equals(pSite.getServerAliases())) )
        sServAlias = "";
      else
        sServAlias = " et " + pSite.getServerAliases();

      avis.setMessage( pClient.getPrenom() + " " + pClient.getName() + ";;;"
          + pSite.getId() + ";;;"
          + pSite.getUrlPrincipale() + ";;;"
          + sServAlias + ";;;"
          + sDirIndex + ";;;"
          + getConfig("HTTP_Site_Suffix"));
      avis.setModele( getConfig("ModeleOpenHRASite"));
      avis.setSignature( getConfig("MSWSignature") );
      logger.debug( avis.send() );
    }

    ClientLocal exCli = null;
    if (pSite != null) {
      exCli = pSite.getClient();
      pSite.setClient(pClient);
    }
    if (exCli==null)
      return null;

    return exCli.getClientValue();
  }

  /**
   * Retrouve les sites d'un client donn�
   * @return Collection de SiteValue du Client
   * @ejb.interface-method  view-type = "remote"
   */
  public Collection getClientSites(String pClient_id) {

    ClientLocal pClient = null;
    Collection ret = new HashSet();
    SiteValue siteValue;

    try {
      pClient = ClientUtil.getLocalHome().findByPrimaryKey(pClient_id);
      Iterator sites = pClient.getSites().iterator();
      while (sites.hasNext()) {
        siteValue = ((SiteLocal) sites.next()).getSiteValue();
        ret.add(siteValue);
      }
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }

    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(ret);
    return set;

  }


  /**
   * Retrouve les bases d'un client donn�
   * @return Collection de BaseDonneesValue du Client
   * @ejb.interface-method  view-type = "remote"
   */
  public Collection getClientBasesDonnees(String pClient_id) {

    ClientLocal pClient = null;
    Collection ret = new HashSet();
    BaseDonneesValue baseValue;

    try {
      pClient = ClientUtil.getLocalHome().findByPrimaryKey(pClient_id);
      Iterator bases = pClient.getBasesDonnees().iterator();
      while (bases.hasNext()) {
        baseValue = ((BaseDonneesLocal) bases.next()).getBaseDonneesValue();
        ret.add(baseValue);
      }
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }

    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(ret);
    return set;
  }

  /**
   * Ajoute un mois de validit� au site
   * @return Collection de SiteValue du Client
   * @ejb.interface-method  view-type = "remote"
   * @return Nouvelle date d'expiration du site
   *
   */
  public Date SiteAddMonths(String pSiteId, Integer pNbMonths) {

    SiteLocal pSite = null;
    Date newFinDate=null;
    Calendar newFinDateCal= new java.util.GregorianCalendar();

    try {
      pSite = SiteUtil.getLocalHome().findByPrimaryKey(pSiteId);
      newFinDateCal.setTime(pSite.getDateFin());
      newFinDateCal.add(Calendar.MONTH,pNbMonths.intValue());
      newFinDate =newFinDateCal.getTime();
      pSite.setDateFin(newFinDate);
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }
    return newFinDate; // NULL si Erreur
  }


  /**
   * Liste les CmdMails.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de CmdMailValue
   */
  public Collection CmdMailList() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = CmdMailUtil.getLocalHome().findAll();

      Iterator it = coll.iterator();
      while (it.hasNext()) {
        CmdMailLocal cm = (CmdMailLocal) it.next();
        CmdMailValue cmdata = cm.getCmdMailValue();
        result.add(cmdata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }
    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;

  }

  /**
   * Annule un CmdMail
   * @ejb.interface-method  view-type = "remote"
   */
  public void CmdMailCancel(Integer pId) {
    try {
      CmdMailLocal cm = CmdMailUtil.getLocalHome().findByPrimaryKey(pId);
      cm.setCancelled(Boolean.TRUE);
      System.out.println("Gestion - CmdMailsCancel : " + pId.toString());
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }
  }


  /**
   * Cr�e un nouveau CmdMail, sans n�cessit� de mot de passe<br/>
   * pRequester=Requester par d�faut<br/>
   * pCmd=cmd<br/>
   * @ejb.interface-method view-type = "remote"
   * @param String pMotif
   * @param String pArg
   */
  public void CmdMailCreate(String pMotif, String pArg) {
    CmdMailCreate(cmdMailRequester, pMotif, "cmd", pArg, cmdPassword);
  }

  /**
   * Cr�e un nouveau CmdMail
   * @ejb.interface-method  view-type = "remote"
   * @param String pRequester
   * @param String pMotif
   * @param String pCmd
   * @param String pArg
   * @param String pPassword
   * @throws OpenHRAException
   */
  public void CmdMailCreate(String pRequester, String pMotif, String pCmd, String pArg, String pPassword) {
    try {
      CmdMailLocalHome cmh = CmdMailUtil.getLocalHome();
      CmdMailLocal newCM = cmh.create(pRequester,pMotif,pCmd, pArg, pPassword);
      if (CmdMailCheckPassword(pPassword).equals(Boolean.FALSE)) {
        newCM.setCancelled(Boolean.TRUE);
        System.out.println("Gestion - CmdMailsCreate : Mauvais Password");
      }
      System.out.println("Gestion - CmdMailsCreate : " + newCM.getId());
    } catch (CreateException e) {
      e.printStackTrace();
      try {
        throw new OpenHRAException();
      } catch (OpenHRAException e1) {
        e1.printStackTrace();
      }
    } catch (NamingException e) {
      e.printStackTrace();
      try {
        throw new OpenHRAException();
      } catch (OpenHRAException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    }
  }

  /**
   * Verification du mot de passe CmdMail
   * @ejb.interface-method  view-type = "remote"
   * @return TRUE s'il s'agit du bon
   */
  public Boolean CmdMailCheckPassword(String pPassword) {
    //return new Boolean ();
    return Boolean.valueOf(pPassword.equals(cmdPassword));
  }

  /**
   * Liste les �l�ments de Compta
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de ComptaValue
   *
   */
  public Collection ComptaList() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = ComptaUtil.getLocalHome().findAll();

      Iterator it = coll.iterator();
      while (it.hasNext()) {
        ComptaLocal cpt = (ComptaLocal) it.next();
        ComptaValue cptdata = cpt.getComptaValue();
        result.add(cptdata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }
    return result;

  }

  /**
   * Cr�e un �l�ment Compta
   * @ejb.interface-method  view-type = "remote"
   */
  public void ComptaCreate(Float pMontant,
              String pMoyenP,
              String pCodeP,
              String pComm,
              String pClientLogin,
              String pSiteId) {

    ClientLocal pClient=null;
    SiteLocal pSite=null;

    try {
      ComptaLocalHome cph = ComptaUtil.getLocalHome();
      ComptaLocal newCpt = cph.create(pMontant,pMoyenP);
      newCpt.setCodePaiement(pCodeP);
      newCpt.setCommentaire(pComm);
      if (pSiteId!=null)
      {
        pSite = SiteUtil.getLocalHome().findByPrimaryKey(pSiteId);
        newCpt.setSite(pSite);
      }
      if (pClientLogin!=null)
      {
        pClient = ClientUtil.getLocalHome().findByPrimaryKey(pClientLogin);
        newCpt.setClient(pClient);
      }
      System.out.println("Gestion - ComptaCreate : " + newCpt.getId());
      if (pClient!=null)
        System.out.println("Gestion - ComptaCreate associ� avec Client " + pClient.getLogin());
    } catch (CreateException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    } catch (FinderException e) {
      e.printStackTrace();
    }
  }

  /**
   * Liste les bases de donnees.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Collection de BaseDonneesValue
   */
  public Collection BasesDonneesList() {
    Collection coll = null;
    Collection result = new HashSet();
    try {
      coll = BaseDonneesUtil.getLocalHome().findAll();

      final Iterator it = coll.iterator();
      while (it.hasNext()) {
        final BaseDonneesLocal base = (BaseDonneesLocal) it.next();
        final BaseDonneesValue basedata = base.getBaseDonneesValue();
        result.add(basedata);
      }
    } catch (FinderException e) {
      result = null;
    } catch (NamingException e) {
      result = null;
    }
    Set set = new TreeSet ( new OpenHRAComp());
    set.addAll(result);
    return set;
  }


  /**
   * Sauvegarde un objet Base de donn�es.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Nom de la base sauvegard�e - <i>null</i> si pas modifi�e
   * @since Bug90, SVN497
   */
  public String BaseDonneesSave ( BaseDonneesValue bddValue )
  {
    BaseDonneesLocal bdd;
    try {
      bdd = BaseDonneesUtil.getLocalHome().findByPrimaryKey(bddValue.getNom());
      logger.debug("Ancien comm : " + bdd.getCommentaire());
      logger.debug("Nouvo  comm : " + bddValue.getCommentaire());
      bdd.setCommentaire(bddValue.getCommentaire());
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }
    return bddValue.getNom();
  }

  /**
   * Cr�e une base de donnees.<br>
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return Nom de la base cr��e - <i>null</i> si pas cr��e
   */
  public String BaseDonneesCreate( BaseDonneesValue bddValue )
  {
    // Si pas d'etat -> etat "A Cr�er"
    if (bddValue.getEtat()==null
        || "".equals(bddValue.getEtat()))
    {
      logger.debug("BaseDonneesCreate - Etat set'� A");
      bddValue.setEtat("A");
    }
    else
      logger.debug("BaseDonneesCreate - Etat : " + bddValue.getEtat());

    // Si pas de nom et/ou pas de client, return null
    if (bddValue.getNom()==null
      || bddValue.getClientValue()==null
    )
    {
      logger.error("BaseDonneesCreate - Nom ou Client null");
      return null;
    }

    // Persistance
    BaseDonneesLocal bdd;
    try {
      bdd = BaseDonneesUtil.getLocalHome().create(bddValue.getNom());
      //bdd.setBaseDonnees(bddValue);
      AssociateClientBaseDonnees(bddValue.getClientValue().getLogin(), bddValue.getNom());
      bdd.setCommentaire(bddValue.getCommentaire());
      bdd.setEtat(bddValue.getEtat());
      bdd.setQuota(bddValue.getQuota());
      bdd.setQuotaUtilise(bddValue.getQuotaUtilise());
    } catch (NamingException e) {
      logger.error("BaseDonneesCreate",e);
      return null;
    } catch (CreateException e) {
      logger.error("BaseDonneesCreate",e);
      return null;
    }

    if ((bdd != null) && ("A".equals(bdd.getEtat())) && (bdd.getNom().equals(bddValue.getNom())))
    {
      // CmdMail Creation Base
      logger.debug("BaseDonneesCreate - CmdMail Creation Base");
      String cmdAddMysqlDb = getConfig("CmdAddMysqlDb");
      if (cmdAddMysqlDb==null) cmdAddMysqlDb = "ERROR";
      CmdMailCreate(cmdMailRequester,
          "Cr�ation BaseDonnees " + bddValue.getNom(),
          "cmd",cmdAddMysqlDb.replaceAll("%%1",bddValue.getNom()).replaceAll("%%2",bddValue.getClientValue().getLogin()),
          cmdPassword);

      // CmdMail Grant
      /*logger.debug("BaseDonneesCreate - CmdMail Grant");
      String cmdAddMysqlDbGrant = getConfig("CmdAddMysqlDbGrant");
      if (cmdAddMysqlDbGrant==null) cmdAddMysqlDbGrant = "ERROR";
      CmdMailCreate("OpenHRA",
          "Cr�ation BaseDonnees - Grant " + bddValue.getNom(),
          "cmd",cmdAddMysqlDbGrant.replaceAll("%%b",bddValue.getNom()).replaceAll("%%c", bddValue.getClientValue().getLogin()),
          password);*/
      // Desormais compris dans cmdAddMysqlDb

      bdd.setEtat("C");

      // Avixo
      if ( bddValue.getClientValue().getEMail()!=null  )
      {
        logger.debug("BaseDonneesCreate - Javixo - " + bddValue.getClientValue().getEMail());
        Javixo4OpenHRA avis = new Javixo4OpenHRA();
        avis.setEmail(bddValue.getClientValue().getEMail());
        avis.setModele(getConfig("ModeleOpenHRANewBdd"));
        avis.setSignature(getConfig("MSWSignature"));
        avis.setMessage( bddValue.getClientValue().getPrenom() + " " + bddValue.getClientValue().getName() + ";;;" + bddValue.getNom());
        //avis.setEndPoint(getConfig("AvixoEndPoint"));
        avis.setRefExt("CLI" + bddValue.getClientValue().getLogin());
        logger.debug( avis.send() );
      }

      logger.debug("BaseDonneesCreate - retourne " + bddValue.getNom());
      return bddValue.getNom();
    }

    return null;

  }

  /**
   * Recherche une BaseDonnees par son nom
   * @ejb.interface-method  view-type = "remote"
   * @ejb.facade-method
   * @return BaseDonneesValue ou <i>NULL</i>
   *
   */
  public BaseDonneesValue BaseDonneesSearchById(String pId) {
    BaseDonneesValue result = null;
    try {
      BaseDonneesLocal bddLoc = BaseDonneesUtil.getLocalHome().findByPrimaryKey(pId);
      if (bddLoc == null) {
        throw new FinderException("bddLoc null");
      }
      result = bddLoc.getBaseDonneesValue();
    } catch (FinderException e) {
      e.printStackTrace();
    } catch (NamingException e) {
      e.printStackTrace();
    }
    return result;

  }

  /**
   * Associe une AssociateClientBaseDonnees � un client
   * @return Ancien ClientLocal si existant
   * @ejb.interface-method  view-type = "remote"
   *
   */
  public ClientValue AssociateClientBaseDonnees(String pClient_id, String pBddNom) {

    ClientLocal pClient = null;
    BaseDonneesLocal pBdd = null;

    logger.debug("AssociateClientBaseDonnees - Associe " + pBddNom + " avec " + pClient_id);

    // Recherche du site par Id
    try {
      pBdd = BaseDonneesUtil.getLocalHome().findByPrimaryKey(pBddNom);
    } catch (FinderException e) {
      pBdd=null;
      logger.error(pBddNom + " n'est pas un nom de BaseDonnees valable");
    } catch (NamingException e) {
      logger.error("Exception : ", e);
      e.printStackTrace();
    }

    // Recherche du client par Id (Login)
    try {
      pClient = ClientUtil.getLocalHome().findByPrimaryKey(pClient_id);
    } catch (FinderException e) {
      logger.trace(pClient_id  + " n'est pas un id de client valable");
      pClient=null;
    } catch (NamingException e) {
      e.printStackTrace();
    }

//     Recherche du client par NomPrenom
    if (pClient==null)
    {
      try {
        Collection clis = ClientUtil.getLocalHome().findByNamePrenom(pClient_id);
        Iterator it = clis.iterator();
        if (it.hasNext())
        {
          pClient = (ClientLocal)it.next();
          if (it.hasNext())  // Si result > 1, rien
          {
            pClient = null;
            logger.error(pClient_id  + " correspond � plusieurs NomPrenom de clients");
          }
        }
      } catch (FinderException e) {
        logger.trace(pClient_id  + " n'est pas un NomPrenom de client valable");
        pClient=null;
      } catch (NamingException e) {
        e.printStackTrace();
      }
    }

    // Recherche du client par eMail
    if (pClient==null)
    {
      try {
        Collection clis = ClientUtil.getLocalHome().findByEmail(pClient_id);
        Iterator it = clis.iterator();
        if (it.hasNext())
        {
          pClient = (ClientLocal)it.next();
          if (it.hasNext())  // Si result > 1, rien
          {
            pClient = null;
            logger.error(pClient_id  + " correspond � plusieurs emails de clients");
          }
        }
      } catch (FinderException e) {
        logger.trace(pClient_id  + " n'est pas un Email de client valable");
        pClient=null;
      } catch (NamingException e) {
        e.printStackTrace();
      }
    }


    if (pClient==null)
      logger.error( "AssociateClientBaseDonnees - Client non trouv�");
    if (pBdd==null)
      logger.error( "AssociateClientBaseDonnees - BaseDonnees non trouv�e");

    ClientLocal exCli = null;
    if (pBdd != null) {
      exCli = pBdd.getClient();
      pBdd.setClient(pClient);
    }
    if (exCli==null)
      return null;

    return exCli.getClientValue();
  }
}
TOP

Related Classes of com.calexo.openhra.serveur.ejb.GestionClientsBean$OpenHRAComp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.