ServiceBanqueBean.java 3.56 KB
package ejb.sessions;

import java.util.Collection;
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import ejb.entites.Action;
import ejb.entites.Compte;
import ejb.entites.LigneAction;

@javax.ejb.Stateless
public class ServiceBanqueBean 
  implements ServiceBanqueLocal, ServiceBanqueRemote {
	@PersistenceContext(unitName="appliBanque") protected EntityManager em ;
	@Override
	public void addCompte(int numeroCompte, String nomTitulaire, double soldeDepart)
			throws CompteDejaExistantException {
		try {
			this.getCompte(numeroCompte) ;
			throw new CompteDejaExistantException() ;
		} catch(CompteInconnuException e) {
		  Compte c=new Compte() ;
		  c.setNumero(numeroCompte); c.setSolde(soldeDepart);
		  c.setTitulaire(nomTitulaire);
		  em.persist(c);
		}
	}

	@Override
	public void addAction(String nomAction, double taux)
			throws ActionDejaExistanteException {
		try {
			this.getAction(nomAction) ;
			throw new ActionDejaExistanteException() ;
		} catch(ActionInconnueException e) {
		  Action a=new Action() ;
		  a.setNom(nomAction); a.setTaux(taux);
		  em.persist(a);
		}

	}

	private Action getAction(String nomAction) throws ActionInconnueException {
		Action a= (Action) em.find(Action.class, nomAction) ;
		if (a==null) throw new ActionInconnueException() ;
		return a ;
	}

	@Override
	public void crediterCompte(int numeroCompte, double montant)
			throws CompteInconnuException {
		Compte c = this.getCompte(numeroCompte) ;
		c.setSolde(c.getSolde()+montant);
	}

	@Override
	public void debiterCompte(int numeroCompte, double montant)
			throws CompteInconnuException {
		Compte c = this.getCompte(numeroCompte) ;
		c.setSolde(c.getSolde()-montant);

	}

	@Override
	public void virementVers(int numCompteDebit, int numCompteCredit,
			double montant) throws CompteInconnuException,
			ApprovisionnementException {
		

	}

	@Override
	public void acheteActions(int numeroCompte, String nomAction, int nb)
			throws CompteInconnuException, ActionInconnueException,
			ApprovisionnementException {
		Compte c = this.getCompte(numeroCompte) ;
		Action a = this.getAction(nomAction) ;
		if (c.getSolde()< nb*a.getTaux())
			throw new ApprovisionnementException() ;
		else
			c.setSolde(c.getSolde()-nb*a.getTaux()) ;
		boolean trouve=false ;
		for (LigneAction la : c.getLignesactions()) 
			if (la.getAction().getNom().equals(nomAction)) {
				trouve=true ; la.setNombre(la.getNombre()+nb);
			}
		if (!trouve) {
			LigneAction la = new LigneAction() ;
			la.setAction(a); la.setProprietaire(c) ; la.setNombre(nb);
			em.persist(la);
		}
	}

	@Override
	public void vendActions(int numeroCompte, String nomAction, int nb)
			throws CompteInconnuException, ActionInconnueException,
			ApprovisionnementException {
		Compte c = this.getCompte(numeroCompte) ;
		LigneAction la=null ;
		for (LigneAction vla : c.getLignesactions()) 
			if (vla.getAction().getNom().equals(nomAction)) {
				la=vla ; 
			}
		if (la != null) {
			if (nb > la.getNombre()) 
				throw new ApprovisionnementException() ;
			else {
				c.setSolde(c.getSolde()+nb*la.getAction().getTaux());
				la.setNombre(la.getNombre()-nb) ;
				if (la.getNombre()==0) em.remove(la);
			}
		}
	}

	@Override
	public Set<LigneAction> getActionsAchetees(int numeroCompte)
			throws CompteInconnuException {
		Compte c = this.getCompte(numeroCompte) ;
		return c.getLignesactions() ;
	}
	
	@Override public Compte getCompte(int numeroCompte) throws CompteInconnuException {
		Compte c= (Compte) em.find(Compte.class, numeroCompte) ;
		if (c==null) throw new CompteInconnuException() ;
		return c;
	}

}