/**
* Procesa una cola de manera que al llegar un elemento a la posición 0 se comprueba si puede ser
* atendido en ese momento (a través de un método aleatorio que devuelve True o False). Si puede ser
* atendido se le saca de la cola. Si no puede ser atendido en ese momento, se le pasa a la posición
* 10 de la cola,
*
*/
public class Cola {
private java.util.ArrayList<String> cola = null;
private java.util.Random alea = new java.util.Random();
private boolean isDebug = true;
public Cola(){
cola = new java.util.ArrayList<String>();
this.runProccess();
}
private boolean isAccepted(){
return ((int) alea.nextInt(2)) == 0;
}
private void muestraCola(){
if(isDebug) System.out.println("-------------------------------------------");
System.out.print("[");
String sep = "";
for(String c : cola){
System.out.print(sep + c);
sep = ", ";
}
System.out.print("]\n");
if(isDebug) System.out.println("-------------------------------------------");
}
private void runProccess(){
int pos = 0;
int final_size = cola.size();
while(pos < final_size){
if(isDebug) System.out.println(String.format("Atendiendo posición %d[%s]",pos, cola.get(pos)));
if(this.isAccepted()){
cola.remove(pos);
if(isDebug) System.out.println("Aceptado, se le atiende y se saca de la cola");
} else {
if(isDebug) System.out.println("No se puede atender en estos momentos");
if(cola.size() > 10){
for(int nJ = pos; nJ < final_size; nJ++){
if(cola.size() > (10+nJ)){
if(isDebug) System.out.println(String.format("Se mueve a %s de la posición %d a la posición %d en la que está %s", cola.get(pos),pos,(10+nJ),cola.get(10+nJ)));
java.util.Collections.swap(cola, pos, 10+nJ);
}else{
cola.add(cola.get(pos));
cola.remove(pos);
break;
}
if(isDebug) System.out.println("La cola queda así:");
if(isDebug) muestraCola();
}
} else {
java.util.Collections.swap(cola, pos, cola.size()-1);
if(isDebug) System.out.println("Se mueve al final");
}
}
final_size = cola.size();
if(isDebug) System.out.println("La cola queda así:");
muestraCola();
}
}
public void setAllItems(String[] items){
this.cola = new java.util.ArrayList<String>(java.util.Arrays.asList(items));
}
public void addItem(String nuevo){
this.cola.add(nuevo);
}
public java.util.ArrayList<String> getCola(){
return this.cola;
}
public static void main(String[] args){
Cola c = new Cola();
c.setAllItems(new String[] {"enero[1]","febrero[2]","marzo[3]","abril[4]","mayo[5]","junio[6]",
"julio[7]","agosto[8]","septiembre[9]","octubre[10]","noviembre[11]","diciembre[12]"});
System.out.println("La cola comienza así:");
c.muestraCola();
c.runProccess();
System.out.println("La cola termina así:");
c.muestraCola();
}
}