Implementados todos los sirvientes...
authordanigm <danigm@arch_box>
Wed, 11 Jun 2008 11:46:32 +0000 (13:46 +0200)
committerdanigm <danigm@arch_box>
Wed, 11 Jun 2008 11:46:32 +0000 (13:46 +0200)
src/subastas/coordinadorSubastaImpl.java
src/subastas/gestorSubastasImpl.java

index 5c967a2..ee70836 100644 (file)
@@ -1,5 +1,5 @@
-import java.utils.*;
 package subastas;
+import java.util.Vector;
 
 /**
  * @author danigm
@@ -7,27 +7,28 @@ package subastas;
  */
 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() {
@@ -38,53 +39,67 @@ public class coordinadorSubastaImpl extends coordinadorSubastaPOA {
                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;
        }
index a14080e..0c5aa8c 100644 (file)
@@ -1,46 +1,84 @@
-/**
- * 
- */
 package subastas;
 
+import java.util.Vector;
+
+import org.omg.CORBA.*;
+import org.omg.CORBA.ORBPackage.InvalidName;
+import org.omg.PortableServer.POA;
+import org.omg.PortableServer.POAHelper;
+import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
+import org.omg.PortableServer.POAPackage.ServantNotActive;
+import org.omg.PortableServer.POAPackage.WrongPolicy;
+
+
+
 /**
  * @author danigm
  *
  */
 public class gestorSubastasImpl extends gestorSubastasPOA {
 
-       /**
-        * 
-        */
+    private Vector<coordinadorSubasta> subastas;
+    private ORB orb;
+    private POA poa;
        public gestorSubastasImpl() {
-               // TODO Auto-generated constructor stub
+        super();
+        subastas = new Vector<coordinadorSubasta>();
+
+        //inicializacion del orb
+        orb = ORB.init();
+
+        //creacion del poa raiz
+        try {
+                       poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+               } catch (InvalidName e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+
+        //crear y activar sirvientes
+        try {
+                       poa.the_POAManager().activate();
+               } catch (AdapterInactive e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+
        }
 
-       /* (non-Javadoc)
-        * @see subastas.gestorSubastasOperations#crearSubasta(float, java.lang.String)
-        */
-       @Override
        public coordinadorSubasta crearSubasta(float valor, String desc) {
-               // TODO Auto-generated method stub
-               return null;
+               coordinadorSubasta c = null;
+        coordinadorSubastaImpl coord = new coordinadorSubastaImpl(valor, desc);
+        org.omg.CORBA.Object obj;
+               try {
+                       obj = poa.servant_to_reference(coord);
+                       c = coordinadorSubastaHelper.narrow(obj);
+                       subastas.add(c);
+               } catch (ServantNotActive e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               } catch (WrongPolicy e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+               
+        return c;
        }
 
-       /* (non-Javadoc)
-        * @see subastas.gestorSubastasOperations#destruirSubasta(subastas.coordinadorSubasta)
-        */
-       @Override
        public void destruirSubasta(coordinadorSubasta cs) {
-               // TODO Auto-generated method stub
-
+        if (cs.estado().equals("Cerrada")){
+            subastas.remove(cs);
+        }
        }
 
-       /* (non-Javadoc)
-        * @see subastas.gestorSubastasOperations#localizarSubasta(java.lang.String)
-        */
-       @Override
        public coordinadorSubasta[] localizarSubasta(String palabra) {
-               // TODO Auto-generated method stub
-               return null;
+        Vector<coordinadorSubasta> encontradas = new Vector<coordinadorSubasta>();
+        for(int i=0; i<subastas.size(); i++){
+            if (subastas.get(i).descripcion().contains(palabra)){
+                encontradas.add(subastas.get(i));
+            }
+        }
+               return (coordinadorSubasta[])encontradas.toArray();
        }
 
 }