-import java.utils.*;
package subastas;
+import java.util.Vector;
/**
* @author danigm
*/
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() {
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;
}
-/**
- *
- */
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();
}
}