package cl.jtv;
/*
 * DiccionarioMetavalores.java
 *
 * Created on 17 de noviembre de 2002, 07:14 PM
 */

/**
 *
 * @author  Administrador
 * @version 
 */
import java.util.*;

public class DiccionarioMetavalores implements Cloneable{

    /** Creates new DiccionarioMetavalores */
    private Hashtable variables;
    private Hashtable parametros;
    private Hashtable variables0;
    private Hashtable parametros0;
    
    public DiccionarioMetavalores() {
        
        variables = new Hashtable();
        parametros = new Hashtable();
        variables0 = new Hashtable();
        parametros0 = new Hashtable();
        
    }
    
    public DiccionarioMetavalores(Hashtable newVariables,Hashtable newParametros) {
        
        variables = (Hashtable)newVariables.clone();
        parametros = (Hashtable)newParametros.clone();
        variables0 = (Hashtable)newVariables.clone();
        parametros0 = (Hashtable)newParametros.clone();
        
    }
    
    
    private DiccionarioMetavalores(Hashtable newVariables,Hashtable newParametros,Hashtable newVariables0,Hashtable newParametros0){   
        variables = (Hashtable)newVariables.clone();
        parametros = (Hashtable)newParametros.clone();
        variables0 = (Hashtable)newVariables.clone();
        parametros0 = (Hashtable)newParametros.clone();
    }
    
    public void insertaVariable(Variable variable) throws NonSetException{
        variables.put(variable.getNombre(),variable);       
    }
    
    public void insertaParametro(Parametro parametro) throws NonSetException{
        parametros.put(parametro.getNombre(),parametro);
    }
    
    public Variable getVariable(String nombreVariable){
        return  (Variable) variables.get(nombreVariable);
    }
    
    public Parametro getParametro(String nombreParametro){
        return (Parametro) parametros.get(nombreParametro);
    }
    
    public Metavalor getMetavalor(String nombreMetavalor){
        
        Object out = getVariable(nombreMetavalor); 
        if(out==null) out = getParametro(nombreMetavalor);
        
        return (Metavalor)out;
        
    }
    
    public boolean hasMetavalor(String nombreMetavalor){
        
        return this.parametros.containsKey(nombreMetavalor) || this.variables.containsKey(nombreMetavalor);
        
    }
    
    public Object clone(){ 
        return new DiccionarioMetavalores(this.variables,this.parametros,this.variables0,this.parametros0);
    }
    
    public void setValoresIniciales(){
        variables = (Hashtable)variables0.clone();
        parametros = (Hashtable)parametros0.clone();
    }
    
     public void setValoresIniciales0(){
        variables0 = (Hashtable)variables.clone();
        parametros0 = (Hashtable)parametros.clone();
    }
    
     public void limpiar(){
        variables.clear();
        parametros.clear();
        variables0.clear();
        parametros0.clear();
    }
    
    public void limpiar2(){
        variables.clear();        
        variables0.clear();        
    }
    
    /** Getter for property parametros.
     * @return Value of property parametros.
     */
    public java.util.Hashtable getParametros() {
        return parametros;
    }    
    
    /** Setter for property parametros.
     * @param parametros New value of property parametros.
     */
    public void setParametros(java.util.Hashtable parametros) {
        this.parametros = parametros;
    }    

    /** Getter for property parametros0.
     * @return Value of property parametros0.
     */
    public java.util.Hashtable getParametros0() {
        return parametros0;
    }
    
    /** Setter for property parametros0.
     * @param parametros0 New value of property parametros0.
     */
    public void setParametros0(java.util.Hashtable parametros0) {
        this.parametros0 = parametros0;
    }
    
}
