-import java.utils.*;
package subastas;
+import java.util.Vector;
/**
* @author danigm
*/
public class coordinadorSubastaImpl extends coordinadorSubastaPOA {
private clienteSubastas ganador_provisional;
- private Vector clientes;
+ private Vector<clienteSubastas> 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<clienteSubastas>();
+ 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() {
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;
}