From: danigm Date: Wed, 11 Jun 2008 11:46:32 +0000 (+0200) Subject: Implementados todos los sirvientes... X-Git-Url: http://git.danigm.net/?p=pcd.git;a=commitdiff_plain;h=97496c252f638b16e7055dd389769ee847cab4f3 Implementados todos los sirvientes... --- diff --git a/src/subastas/coordinadorSubastaImpl.java b/src/subastas/coordinadorSubastaImpl.java index 5c967a2..ee70836 100644 --- a/src/subastas/coordinadorSubastaImpl.java +++ b/src/subastas/coordinadorSubastaImpl.java @@ -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 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(); + 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; } diff --git a/src/subastas/gestorSubastasImpl.java b/src/subastas/gestorSubastasImpl.java index a14080e..0c5aa8c 100644 --- a/src/subastas/gestorSubastasImpl.java +++ b/src/subastas/gestorSubastasImpl.java @@ -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 subastas; + private ORB orb; + private POA poa; public gestorSubastasImpl() { - // TODO Auto-generated constructor stub + super(); + subastas = new Vector(); + + //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 encontradas = new Vector(); + for(int i=0; i