X-Git-Url: http://git.danigm.net/?p=pcd.git;a=blobdiff_plain;f=src%2Fsubastas%2FcoordinadorSubastaImpl.java;h=ee708364f48e224408d47762d3a91fd5d089e252;hp=5c967a2eeceabf4366f635b0919c715cb5c9a9d2;hb=97496c252f638b16e7055dd389769ee847cab4f3;hpb=336dedd91cde0dbf8a54cb0120db2c58d84e7d85 diff --git a/src/subastas/coordinadorSubastaImpl.java b/src/subastas/coordinadorSubastaImpl.java index 5c967a2..ee70836 100644 --- a/src/subastas/coordinadorSubastaImpl.java +++ b/src/subastas/coordinadorSubastaImpl.java @@ -1,5 +1,5 @@ -import java.utils.*; package subastas; +import java.util.Vector; /** * @author danigm @@ -7,27 +7,28 @@ package subastas; */ public class coordinadorSubastaImpl extends coordinadorSubastaPOA { private clienteSubastas ganador_provisional; - private Vector clientes; + private Vector clientes; private float valor; private String descripcion; // Inscripcion -> Abierta -> Cerrada private String estado; - public coordinadorSubastaImpl() { + public coordinadorSubastaImpl(float v_inicial, String desc) { super(); + estado = "Inscripcion"; + ganador_provisional=null; + clientes = new Vector(); + valor = v_inicial; + descripcion = desc; } - /* (non-Javadoc) - * @see subastas.coordinadorSubastaOperations#abrirSubasta() - */ - @Override public void abrirSubasta() { - // TODO Auto-generated method stub - + if(estado.equals("Inscripcion")) + estado = "Abierta"; } public clienteSubastas[] clientes() { - return clientes.toArray(); + return (clienteSubastas[])clientes.toArray(); } public String descripcion() { @@ -38,53 +39,67 @@ public class coordinadorSubastaImpl extends coordinadorSubastaPOA { return estado; } - public clienteSubastas ganador() { + public synchronized clienteSubastas ganador() { //Si la puja esta cerrada devuelve ganador //sino se bloquea hasta que se cierre - - if(estado.equals("Cerrada")) - return ganador_provisional; - else{ - //bloquear - return null; - } + try { + while(!estado.equals("Cerrada")) + wait(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return ganador_provisional; } public clienteSubastas ganador_provisional() { return ganador_provisional; } - /* (non-Javadoc) - * @see subastas.coordinadorSubastaOperations#inscribirCliente(subastas.clienteSubastas) - */ - @Override public void inscribirCliente(clienteSubastas cl) { - // TODO Auto-generated method stub + //estaria bien lanzar una excepcion + if(estado.equals("Inscripcion")) + clientes.add(cl); } - /* (non-Javadoc) - * @see subastas.coordinadorSubastaOperations#pujar(float, subastas.clienteSubastas) - */ - @Override - public boolean pujar(float cantidad, clienteSubastas cl) { - // TODO Auto-generated method stub - return false; + public synchronized boolean pujar(float cantidad, clienteSubastas cl) { + try { + while(estado.equals("Inscripcion")) + wait(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(estado.equals("Cerrada")) + return false; + else{ + if (clientes.contains(cl)){ + if (cantidad > valor){ + valor = cantidad; + ganador_provisional = cl; + return true; + } + else + return false; + } + else{ + //quizas mejor una excepcion + return false; + } + } + } - /* (non-Javadoc) - * @see subastas.coordinadorSubastaOperations#ultimaPuja(subastas.clienteSubastas) - */ - @Override public void ultimaPuja(clienteSubastas cl) { - // TODO Auto-generated method stub - + if (clientes.contains(cl)){ + clientes.remove(cl); + } + if (clientes.size() == 0) { + estado = "Cerrada"; + } } - /* (non-Javadoc) - * @see subastas.coordinadorSubastaOperations#valor() - */ - @Override public float valor() { return valor; }