Creado el Servidor de gestorSubastas
[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                 return (clienteSubastas[])clientes.toArray();
34         }
35
36         public String descripcion() {
37                 return descripcion;
38         }
39
40         public String estado() {
41                 return estado;
42         }
43
44         public synchronized clienteSubastas ganador() {
45         //Si la puja esta cerrada devuelve ganador
46         //sino se bloquea hasta que se cierre
47                 try {
48                         while(!estado.equals("Cerrada"))
49                                 wait();
50                 } catch (InterruptedException e) {
51                         // TODO Auto-generated catch block
52                         e.printStackTrace();
53                 }
54         return ganador_provisional;
55         }
56
57         public clienteSubastas ganador_provisional() {
58                 return ganador_provisional;
59         }
60
61         public void inscribirCliente(clienteSubastas cl) {
62         //estaria bien lanzar una excepcion
63         if(estado.equals("Inscripcion"))
64             clientes.add(cl);
65
66         }
67
68         public synchronized boolean pujar(float cantidad, clienteSubastas cl) {
69                 try {
70                         while(estado.equals("Inscripcion"))
71                                 wait();
72                 } catch (InterruptedException e) {
73                         // TODO Auto-generated catch block
74                         e.printStackTrace();
75                 }
76         if(estado.equals("Cerrada"))
77             return false;
78         else{
79             if (clientes.contains(cl)){
80                 if (cantidad > valor){
81                     valor = cantidad;
82                     ganador_provisional = cl;
83                     return true;
84                 }
85                 else
86                     return false;
87             }
88             else{
89                 //quizas mejor una excepcion
90                 return false;
91             }
92         }
93
94         }
95
96         synchronized public void ultimaPuja(clienteSubastas cl) {
97         if (clientes.contains(cl)){
98             clientes.remove(cl);
99         }
100         if (clientes.size() == 0) {
101             estado = "Cerrada";
102             notifyAll();
103         }
104         }
105
106         public float valor() {
107                 return valor;
108         }
109
110 }