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

/**
 *
 * @author Miguel Herreros
 */
public class AsignacionValor {
    private Object[] representacionArreglo; //así es como se guarda en MyUML 
    private Variable parteIzqda; 
    private String   parteDcha;
    private java.util.ResourceBundle bundle;
    
    //..........................................................................
    public AsignacionValor(Object expresion, ContextoEjecucion contexto){           
        bundle = java.util.ResourceBundle.getBundle("sdsimulator/resources/runnable");
        
        representacionArreglo = (Object[]) expresion;
                
        parteIzqda=buscarParteIzquierda(contexto);
        parteDcha =buscarParteDerecha();
    }
    //..........................................................................
    public void run(){
        parteIzqda.setValor(parteDcha);
    }
    //..........................................................................
    @Override
    public String toString(){
        String retorno= bundle.getString("UPDATE")   + parteIzqda.getNombrePropietario()  +
                        "." + parteIzqda.getNombre() + " (" + parteIzqda.getTipo() + ") " +
                        bundle.getString("UPDATE1")  + parteIzqda.getValor()              + 
                        bundle.getString("UPDATE2")  + parteDcha + bundle.getString("UPDATE3");  
        return retorno;
    }
    //..........................................................................
    
    private Variable buscarParteIzquierda(ContextoEjecucion contexto){
        String nombreVariableDestino;
        
        if (representacionArreglo.length >=1)
            nombreVariableDestino =(String)representacionArreglo[0];
        else
            nombreVariableDestino = "";
      
        return contexto.get(nombreVariableDestino);
    }
    
    private String buscarParteDerecha(){
        //Por el momento, en MyUML sólo se guardan asignaciones de valores discretos
        //como actualización a variables. La variable se guarda en la posición 0 
        //En la 1, está el valor a asignar.
        //En caso de permitirse expresiones más complejas, supongo que se guarda-
        //rían en las posiciones 1 y siguientes. 
        //Esta función se encargaría de evaluar la expresión hayada hasta conse-
        //guir un valor discreto, que sería el valor a asignar.
        if (representacionArreglo.length >=2)
            return (String)representacionArreglo[1];
        else
            return "";
    }
}
