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

import data.*;

/**
 *
 * @author chislim
 */

//spravene "ukazkovo" vsetko cez get set ale podla mna viac neprehladne ako predtym..

public class ZrusenieImplikacii {

    public  ZrusenieImplikacii() 
    {
        Uzol.f.vypis3("\n\nZRUSENIE IMPLIKACII \n");
    }

    public void runZrusenieImplikacii(Uzol u) {

        if (u instanceof UzolOperacia) 
        {
           
            if (((UzolOperacia) u).getSign() == Utils.implikacia) 
            {
               
                ((UzolOperacia) u).setSign(Utils.or);
                Uzol w;
                w = u.getLavySyn();
               
                if ((w instanceof UzolOperacia) || (w instanceof UzolOperand))
                {
                    w = w.getOtec();
                    Uzol n = new UzolUnarny(w, "" + Utils.negacia);
                    n.setLavySyn(w.getLavySyn());
                    
                    (w.getLavySyn()).setOtec(n);
                    w.setLavySyn(n);
                } 
                else 
                {
                    while ((w instanceof UzolUnarny) && (w.getLavySyn() != null))
                    {
                        w = w.getLavySyn();
                    }
                    w = w.getOtec();

                    if (((UzolUnarny) w).getUnarna() == Utils.negacia)
                    {
                        w.getOtec().setLavySyn(w.getLavySyn());
                        w.getLavySyn().setOtec(w.getOtec());
                    } 
                    else
                    {
                        Uzol n = new UzolUnarny(w, "" + Utils.negacia);
                        n.setLavySyn(w.getLavySyn());
                        w.getLavySyn().setOtec(n);
                        w.setLavySyn(n);
                    }
                }
            }
        }
       
        if (u.getLavySyn() != null) 
        {
            runZrusenieImplikacii(u.getLavySyn());
        }
      
        if (u.getPravySyn() != null) 
        {
            runZrusenieImplikacii(u.getPravySyn());
        }

    }
}
