package monopoly.partecipanti; import monopoly.tavola.ContrattoTerreno; import monopoly.tavola.casella.Proprieta; import monopoly.tavola.casella.Terreno; /** * @author MAP tutor * */ public class Transazione { private static int progressivo = 0; private int numeroTransazione; private Attore acquirente; private Attore venditore; private Proprieta proprieta; private int costo; private TipoOperazione tipologia; /** * Utilizzato per la gestione delle operazioni di tipo COMPRAVENDITA delle proprietà * E’ evidente come questa classe possa essere utilizzata sia per le transazioni * di vendita che di acquisto (invertendo acquirente e venditore) * * @param acquirente * @param venditore * @param proprieta * @param costo */ public Transazione(Attore acquirente, Attore venditore, Proprieta proprieta, int costo) { numeroTransazione = progressivo; progressivo++; this.acquirente = acquirente; this.venditore = venditore; this.proprieta = proprieta; this.costo = costo; this.tipologia = TipoOperazione.COMPRAVENDITA; } /** * Utilizzato per la gestione delle operazioni di tipo ALBERGO, CASA, IPOTECA. * Il costo non viene passato in input ma viene ricavato dal contratto della relativa proprietà. * * @param acquirente * @param venditore * @param proprieta * @param operazione */ public Transazione(Attore acquirente, Attore venditore, Proprieta proprieta, TipoOperazione operazione){ numeroTransazione = progressivo; progressivo++; this.acquirente = acquirente; this.venditore = venditore; this.proprieta = proprieta; this.tipologia = operazione; switch (operazione) { case CASA : this.costo = ((ContrattoTerreno)proprieta.getContratto()).getCostoCasa(); break; case ALBERGO : this.costo = ((ContrattoTerreno)proprieta.getContratto()).getCostoAlbergo(); break; case IPOTECA : this.costo = proprieta.getContratto().getIpoteca(); break; default : break; } } /** *

Metodo che permette di effettuare una transazione. * @return */ public boolean eseguiTransazione() { switch (tipologia) { case COMPRAVENDITA : if (acquirente.coperturaFinanziaria(costo)){ acquirente.operazioneAcquisto(proprieta,costo); venditore.operazioneVendita(proprieta,costo); return true; } break; case CASA: if (acquirente.coperturaFinanziaria(costo)){ acquirente.operazioneAcquistoCasa((Terreno) proprieta); venditore.operazioneVenditaCasa((Terreno) proprieta); } break; case ALBERGO: if (acquirente.coperturaFinanziaria(costo)){ acquirente.operazioneAcquistoAlbergo((Terreno) proprieta); venditore.operazioneVenditaAlbergo((Terreno) proprieta); } break; case IPOTECA: //il venditore e colui che concede l'ipoteca if (venditore.coperturaFinanziaria(costo)){ acquirente.operazioneConcessioneIpoteca((Terreno) proprieta); venditore.operazioneRiscattoIpoteca((Terreno) proprieta); } break; default : return false; } return true; } }