Implementados todos los sirvientes...
[pcd.git] / src / subastas / coordinadorSubastaImpl.java
1 package subastas;
2 import java.util.Vector;
3
4 /**
5  * @author danigm
6  *
7  */
8 public class coordinadorSubastaImpl extends coordinadorSubastaPOA {
9         private clienteSubastas ganador_provisional;
10     private Vector<clienteSubastas> clientes;
11     private float valor;
12     private String descripcion;
13     // Inscripcion -> Abierta -> Cerrada
14     private String estado;
15
16         public coordinadorSubastaImpl(float v_inicial, String desc) {
17                 super();
18         estado = "Inscripcion";
19         ganador_provisional=null;
20         clientes = new Vector<clienteSubastas>();
21         valor = v_inicial;
22         descripcion = desc;
23         }
24
25         public void abrirSubasta() {
26         if(estado.equals("Inscripcion"))
27             estado = "Abierta";
28         }
29
30         public clienteSubastas[] clientes() {
31                 return (clienteSubastas[])clientes.toArray();
32         }
33
34         public String descripcion() {
35                 return descripcion;
36         }
37
38         public String estado() {
39                 return estado;
40         }
41
42         public synchronized clienteSubastas ganador() {
43         //Si la puja esta cerrada devuelve ganador
44         //sino se bloquea hasta que se cierre
45                 try {
46                         while(!estado.equals("Cerrada"))
47                                 wait();
48                 } catch (InterruptedException e) {
49                         // TODO Auto-generated catch block
50                         e.printStackTrace();
51                 }
52         return ganador_provisional;
53         }
54
55         public clienteSubastas ganador_provisional() {
56                 return ganador_provisional;
57         }
58
59         public void inscribirCliente(clienteSubastas cl) {
60         //estaria bien lanzar una excepcion
61         if(estado.equals("Inscripcion"))
62             clientes.add(cl);
63
64         }
65
66         public synchronized boolean pujar(float cantidad, clienteSubastas cl) {
67                 try {
68                         while(estado.equals("Inscripcion"))
69                                 wait();
70                 } catch (InterruptedException e) {
71                         // TODO Auto-generated catch block
72                         e.printStackTrace();
73                 }
74         if(estado.equals("Cerrada"))
75             return false;
76         else{
77             if (clientes.contains(cl)){
78                 if (cantidad > valor){
79                     valor = cantidad;
80                     ganador_provisional = cl;
81                     return true;
82                 }
83                 else
84                     return false;
85             }
86             else{
87                 //quizas mejor una excepcion
88                 return false;
89             }
90         }
91
92         }
93
94         public void ultimaPuja(clienteSubastas cl) {
95         if (clientes.contains(cl)){
96             clientes.remove(cl);
97         }
98         if (clientes.size() == 0) {
99             estado = "Cerrada";
100         }
101         }
102
103         public float valor() {
104                 return valor;
105         }
106
107 }