Implementados todos los sirvientes...
[pcd.git] / src / subastas / coordinadorSubastaImpl.java
index 5c967a2..ee70836 100644 (file)
@@ -1,5 +1,5 @@
-import java.utils.*;
 package subastas;
 package subastas;
+import java.util.Vector;
 
 /**
  * @author danigm
 
 /**
  * @author danigm
@@ -7,27 +7,28 @@ package subastas;
  */
 public class coordinadorSubastaImpl extends coordinadorSubastaPOA {
        private clienteSubastas ganador_provisional;
  */
 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;
 
     private float valor;
     private String descripcion;
     // Inscripcion -> Abierta -> Cerrada
     private String estado;
 
-       public coordinadorSubastaImpl() {
+       public coordinadorSubastaImpl(float v_inicial, String desc) {
                super();
                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() {
        public void abrirSubasta() {
-               // TODO Auto-generated method stub
-
+        if(estado.equals("Inscripcion"))
+            estado = "Abierta";
        }
 
        public clienteSubastas[] clientes() {
        }
 
        public clienteSubastas[] clientes() {
-               return clientes.toArray();
+               return (clienteSubastas[])clientes.toArray();
        }
 
        public String descripcion() {
        }
 
        public String descripcion() {
@@ -38,53 +39,67 @@ public class coordinadorSubastaImpl extends coordinadorSubastaPOA {
                return estado;
        }
 
                return estado;
        }
 
-       public clienteSubastas ganador() {
+       public synchronized clienteSubastas ganador() {
         //Si la puja esta cerrada devuelve ganador
         //sino se bloquea hasta que se cierre
         //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;
        }
 
        }
 
        public clienteSubastas ganador_provisional() {
                return ganador_provisional;
        }
 
-       /* (non-Javadoc)
-        * @see subastas.coordinadorSubastaOperations#inscribirCliente(subastas.clienteSubastas)
-        */
-       @Override
        public void inscribirCliente(clienteSubastas cl) {
        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) {
        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;
        }
        public float valor() {
                return valor;
        }