Package metier.commandes

Source Code of metier.commandes.MetierCommandes

/**
*     This file is part of eCommerce.
*
*    Foobar is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 2 of the License, or
*    (at your option) any later version.
*
*    Foobar is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with Foobar; if not, write to the Free Software
*    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*
*    2007 Matej Hausenblas matej.hausenblas@gmail.com
*
*/
package metier.commandes;

import factories.FClients;
import factories.FCommandes;
import factories.FProduits;
import factories.exceptions.FactoriesException;
import interfaces.commandes.IMetierCommandes;
import interfaces.exceptions.MetierException;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import metier.produits.MetierProduits;
import base.Client;
import base.Commande;
import base.Produit;
import database.GestionConnection;

/**
*
*/
public class MetierCommandes /*extends UnicastRemoteObject*/ implements IMetierCommandes, Serializable{

  /**
   * Generated Serial Version UID
   */
  private static final long serialVersionUID = 5448745543595402858L;

  /*
   * Fabrique de commandes, a la creation de cette classe,
   * on souhaite pouvoir utiliser la fabrique eventuellement a plusieurs
   * endroits, on la retrouve alors et initialise sa connexion.
   */
  private FCommandes fc;
 
  private FClients fcli;
 
  private FProduits fprod;
 



  /**
   * Constructeur métier
   *
   * @throws MetierException
   */
  public MetierCommandes() throws /*RemoteException,*/ MetierException{
    /*super();*/
    this.fc = FCommandes.getInstance();
    this.fcli = FClients.getInstance();
    this.fprod = FProduits.getInstance();
    // s'assurer que la fabrique a bien une connexion a la base de donnees.
    try
      if(! fc.hasConnection()){
        fc.setConnection(GestionConnection.getInstance().getConnection());
      }
      if(! fcli.hasConnection()){
        fcli.setConnection(GestionConnection.getInstance().getConnection());
      }
      if(! fprod.hasConnection()){
        fprod.setConnection(GestionConnection.getInstance().getConnection());
      }
     
     
      // Mise a jour de la base de donnees:
     
    }catch(SQLException se){
      throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
    }
   
  }


  /*
   * (non-Javadoc)
   * @see interfaces.commandes.IMetierCommandes#getDelai(base.Commande)
   */
  public int getDelai(Commande c) throws RemoteException, MetierException {
   
    int delai = 0;
   
    // Recuperation de tous les produits concernes
    for(Iterator<String> it = c.getLesProduits().keySet().iterator();
      it.hasNext();){
      String refProd = it.next();
      try {
        Produit p = fprod.rechercherProduit(refProd);
        // mise a jour du max(Delai disponible)
        if(p.getDelaiDisponible() > delai)
          delai = p.getDelaiDisponible();
       
      } catch (SQLException e) {
        throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
      }
     
    }
   
    return delai;
   
  }



  /* (non-Javadoc)
   * @see interfaces.commandes.IMetierCommandes#ajouterCommande(base.Commande)
   */
  public synchronized void ajouterCommande(Commande c) throws RemoteException,
      MetierException {
 
    try {
      fc.creerCommande(c);
    } catch (SQLException e) {
      e.printStackTrace();
      throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
    } catch (FactoriesException e) {
      if(e.getMessage().equals(FactoriesException.COMMANDE_EXISTE_DEJA)){
        // renvoi du message
        throw new MetierException(e.getMessage());
      }
    } 
  }

  /* (non-Javadoc)
   * @see interfaces.commandes.IMetierCommandes#rechercherCommandesClient(java.lang.String)
   */
  public ArrayList<Commande> rechercherCommandesClient(String idClient)
      throws RemoteException, MetierException {
    /* d'abord recherche du client */
    Client cli;
    try {
      cli = fcli.rechercherClient(idClient);
    } catch (SQLException e) {
      throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
    } catch (FactoriesException e) {
      // le client n'existe pas
      throw new MetierException(e.getMessage());
    }
   
    // liste des commandes
    ArrayList<Commande> sesCommandes = new ArrayList<Commande>();
   
    for(Iterator<String> it = cli.getLesCommandes().iterator(); it.hasNext(); ){
      String refCde = it.next();
      try {
        Commande cde = fc.rechercherCommande(refCde, idClient);
        // ajout de la commande trouvee dans la liste
        sesCommandes.add(cde);
      } catch (SQLException e) {
        // Coupure du reseau ou plantage serveur BD
        e.printStackTrace();
        throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
      }
    }
   
    return sesCommandes;
  }

  /* (non-Javadoc)
   * @see interfaces.commandes.IMetierCommandes#supprimerCommande(java.lang.String)
   */
  public synchronized int supprimerCommande(Commande c)
    throws RemoteException, MetierException {
   
    int res;
    // suppression de la commande de la base
    try {
      res = fc.supprimerCommande(c);
    } catch (SQLException e) {
      throw new MetierException(MetierException.CONNEXION_IMPOSSIBLE);
    } catch (FactoriesException e) {
      // la commande n'existe pas dans la base!
      throw new MetierException(e.getMessage());
    }
   
    // mise  a jour des stocks
    // recuperation de tous les produits concernes
    for(Iterator<String> it = c.getLesProduits().keySet().iterator();
      it.hasNext();){
      String refProd = it.next();
      // voici la quantite reservee par cette commande
      int qte = c.getLesProduits().get(refProd).intValue();
      // liberation de la reservation dans la base.
      new MetierProduits().libererProduit(refProd, qte);
      // s'il y a un probleme au cours de route, on s'arrete ici.
    }
   
   
    return res;
  }

}
TOP

Related Classes of metier.commandes.MetierCommandes

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.