VersiĆ³n chachi guay funcional 0.1 creo que funciona :D
[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         synchronized public void abrirSubasta() {
26         if(estado.equals("Inscripcion")){
27             estado = "Abierta";
28             notifyAll();
29         }
30         }
31
32         public clienteSubastas[] clientes() {
33                 clienteSubastas[] cs = new clienteSubastas[clientes.size()];
34                 for (int i=0; i<clientes.size(); i++)
35                         cs[i] = clientes.get(i);
36                 return cs;
37         }
38
39         public String descripcion() {
40                 return descripcion;
41         }
42
43         public String estado() {
44                 return estado;
45         }
46
47         public synchronized clienteSubastas ganador() {
48         //Si la puja esta cerrada devuelve ganador
49         //sino se bloquea hasta que se cierre
50                 try {
51                         while(!estado.equals("Cerrada"))
52                                 wait();
53                 } catch (InterruptedException e) {
54                         // TODO Auto-generated catch block
55                         e.printStackTrace();
56                 }
57         return ganador_provisional;
58         }
59
60         public clienteSubastas ganador_provisional() {
61                 return ganador_provisional;
62         }
63
64         public void inscribirCliente(clienteSubastas cl) {
65         //estaria bien lanzar una excepcion
66         if(estado.equals("Inscripcion"))
67             clientes.add(cl);
68
69         }
70
71         public synchronized boolean pujar(float cantidad, clienteSubastas cl) {
72                 String id = cl.identificacion();
73                 try {
74                         while(estado.equals("Inscripcion"))
75                                 wait();
76                 } catch (InterruptedException e) {
77                         // TODO Auto-generated catch block
78                         e.printStackTrace();
79                 }
80         if(estado.equals("Cerrada"))
81             return false;
82         else{
83             if (clientes.contains(cl)){
84                 if (cantidad > valor){
85                     valor = cantidad;
86                     ganador_provisional = cl;
87                     return true;
88                 }
89                 else
90                     return false;
91             }
92             else{
93                 //quizas mejor una excepcion
94                 return false;
95             }
96         }
97
98         }
99
100         synchronized public void ultimaPuja(clienteSubastas cl) {
101         if (clientes.contains(cl)){
102             clientes.remove(cl);
103         }
104         if (clientes.size() == 0) {
105             estado = "Cerrada";
106             notifyAll();
107         }
108         }
109
110         public float valor() {
111                 return valor;
112         }
113
114 }