/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sdsimulator.runnable;
import myuml.*;
import java.util.Random;

/**
 *
 * 7.
 * @author Miguel Herreros
 */
public class FrameAltEjecutable extends FrameEjecutable{
    private int elegido;
    
    public FrameAltEjecutable(MyFrame myFrame, VectorOrdenado eventos, ContextoEjecucion contexto, AsincronosPendientes asincronos){
        super(myFrame,eventos,contexto,asincronos);
        
        elegirBloqueAleatorio();    
    }
    
    //..........................................................................
    @Override
    public ResultadoEjecucion run(){
        return runStep();
    }
    
    //..........................................................................
    /** Tan sólo vamos a redefinir el comportamiento cuando se detecta el frame.
     * 
     */
    @Override
    public ResultadoEjecucion runStep(){
        switch (indiceEjecucion){
            case -1: return detectadoComienzo();
            default: return super.runStep();
        }
    }
    
    //..........................................................................
    @Override
    protected ResultadoEjecucion detectadoComienzo(){
        ResultadoEjecucion retorno = new ResultadoEjecucion();
        
        retorno=new ResultadoEjecucion();
        retorno.x=getX();
        retorno.y=getY();
        myFrame.setCol(sdsimulator.Main.EN_CURSO);
        indiceEjecucion++;
        retorno.traza = bundle.getString("FRAME");
        retorno.traza+= myFrame.getName();
        retorno.traza+= bundle.getString("FRAME1");
        retorno.traza+= myFrame.getID();
        retorno.traza+= bundle.getString("FRAME2");
        retorno.traza+= bundle.getString("ALEATORIO");
        retorno.traza+= elegido;
        retorno.traza+= bundle.getString("ALEATORIO1");
        
        return retorno;
    }
    
    //..........................................................................
    /** Devuelve el frame a su estado inicial, listo para comenzar una nueva si-
     * mulación.
     */ 
    @Override
    public void reset(){
        super.reset();
        elegirBloqueAleatorio();
    }
    
    //..........................................................................
    /**Elige un bloque aleatorio para ejecutar.
     */
    private void elegirBloqueAleatorio(){
        Random random=new Random();
        elegido = random.nextInt(numBloques());
        
        super.anularTodos();
        super.activarBloque(elegido);
    }
}
