package cl.jtv;
/*
 * ReferencesMachine.java
 *
 * Created on 13 de enero de 2003, 02:28 AM
 */

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


public class ReferencesMachine {

    /** Creates new ReferencesMachine */
    public static Hashtable dicOfReferences=new Hashtable();
    public static boolean flagClipboard=false;
        
        public Maquina machine;
        public Integer id;
        public Integer idPrevia;
        public Integer idProxima;
        
        ReferencesMachine(){
               
        }
        
        public static void put(ReferencesMachine referencesMachine){
            
            dicOfReferences.put(referencesMachine.id,referencesMachine);
            
        }
        
        public static void clear(){
            
            dicOfReferences.clear();
            //dicOfReferences=null;
            
        }
        
        public static void buildReferences(){
            
            Enumeration en = dicOfReferences.elements();
            while(en.hasMoreElements())
                ((ReferencesMachine)en.nextElement()).setReferences();
            
            if(flagClipboard){
                en = null;
                en = dicOfReferences.elements();
                while(en.hasMoreElements()){
                    ReferencesMachine rm = (ReferencesMachine)en.nextElement();
                    if((rm.machine instanceof Enlace) && rm.machine.proxima==null){
                        dicOfReferences.remove(rm.id);                       
                    }
                }

                en = null;
                en = dicOfReferences.elements();
                while(en.hasMoreElements()){
                    ReferencesMachine rm = (ReferencesMachine)en.nextElement();
                    EnlaceCompuesto enlaceCompuesto = null;
                    if(rm.machine instanceof EnlaceCompuesto){
                        enlaceCompuesto = (EnlaceCompuesto) rm.machine;
                        Enumeration en2 = enlaceCompuesto.getEnlaces();
                        while(en2.hasMoreElements()){
                            Enlace enlace = (Enlace)en2.nextElement();
                            if(enlace.proxima==null) enlaceCompuesto.eliminar(enlace);

                        }
                        if(enlaceCompuesto.getSize()==0){
                            enlaceCompuesto.previa.proxima=null;
                            dicOfReferences.remove(rm.id);
                        }
                    }                
                }
            }
            
            en = null;
            en = dicOfReferences.elements();
            while(en.hasMoreElements())
                ((ReferencesMachine)en.nextElement()).setPoints();            
        }
        
        public void setReferences(){
             ReferencesMachine referenciaPrevia = idPrevia==null?null:(ReferencesMachine)dicOfReferences.get(idPrevia);
             ReferencesMachine referenciaProxima = idProxima==null?null:(ReferencesMachine)dicOfReferences.get(idProxima);
             machine.setPrevMaquina(referenciaPrevia==null?null:referenciaPrevia.machine);
             machine.setProxMaquina(referenciaProxima==null?null:referenciaProxima.machine);
            /* if(machine instanceof Enlace) 
                 ((Enlace)machine).setPoints();
             else if(!(machine instanceof EnlaceCompuesto))
                 machine.setNombre(machine.getNombre()); */
             
             if(!(machine instanceof Enlace) && !(machine instanceof EnlaceCompuesto))
                 machine.setNombre(machine.getNombre());
             
        }
        
        public void setPoints(){
            
            if(machine instanceof Enlace)
                 ((Enlace)machine).setPoints();             
        }
        
        
        
        public static Maquina get(Integer id){
            
            return (Maquina)dicOfReferences.get(id);
            
        }

}
