/* This file was generated by SableCC (http://www.sablecc.org/). */

package uk.co.zonetora.fj.ast.node;

import java.util.*;
import uk.co.zonetora.fj.ast.analysis.*;

public final class AThisFieldAssig extends PThisFieldAssig
{
    private TThis _this_;
    private TPeriod _period_;
    private TIdentifier _leftField_;
    private TEq _eq_;
    private TIdentifier _rightField_;
    private TSemicolon _semicolon_;

    public AThisFieldAssig()
    {
    }

    public AThisFieldAssig(
        TThis _this_,
        TPeriod _period_,
        TIdentifier _leftField_,
        TEq _eq_,
        TIdentifier _rightField_,
        TSemicolon _semicolon_)
    {
        setThis(_this_);

        setPeriod(_period_);

        setLeftField(_leftField_);

        setEq(_eq_);

        setRightField(_rightField_);

        setSemicolon(_semicolon_);

    }
    public Object clone()
    {
        return new AThisFieldAssig(
            (TThis) cloneNode(_this_),
            (TPeriod) cloneNode(_period_),
            (TIdentifier) cloneNode(_leftField_),
            (TEq) cloneNode(_eq_),
            (TIdentifier) cloneNode(_rightField_),
            (TSemicolon) cloneNode(_semicolon_));
    }

    public void apply(Switch sw)
    {
        ((Analysis) sw).caseAThisFieldAssig(this);
    }

    public TThis getThis()
    {
        return _this_;
    }

    public void setThis(TThis node)
    {
        if(_this_ != null)
        {
            _this_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _this_ = node;
    }

    public TPeriod getPeriod()
    {
        return _period_;
    }

    public void setPeriod(TPeriod node)
    {
        if(_period_ != null)
        {
            _period_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _period_ = node;
    }

    public TIdentifier getLeftField()
    {
        return _leftField_;
    }

    public void setLeftField(TIdentifier node)
    {
        if(_leftField_ != null)
        {
            _leftField_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _leftField_ = node;
    }

    public TEq getEq()
    {
        return _eq_;
    }

    public void setEq(TEq node)
    {
        if(_eq_ != null)
        {
            _eq_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _eq_ = node;
    }

    public TIdentifier getRightField()
    {
        return _rightField_;
    }

    public void setRightField(TIdentifier node)
    {
        if(_rightField_ != null)
        {
            _rightField_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _rightField_ = node;
    }

    public TSemicolon getSemicolon()
    {
        return _semicolon_;
    }

    public void setSemicolon(TSemicolon node)
    {
        if(_semicolon_ != null)
        {
            _semicolon_.parent(null);
        }

        if(node != null)
        {
            if(node.parent() != null)
            {
                node.parent().removeChild(node);
            }

            node.parent(this);
        }

        _semicolon_ = node;
    }

    public String toString()
    {
        return ""
            + toString(_this_)
            + toString(_period_)
            + toString(_leftField_)
            + toString(_eq_)
            + toString(_rightField_)
            + toString(_semicolon_);
    }

    void removeChild(Node child)
    {
        if(_this_ == child)
        {
            _this_ = null;
            return;
        }

        if(_period_ == child)
        {
            _period_ = null;
            return;
        }

        if(_leftField_ == child)
        {
            _leftField_ = null;
            return;
        }

        if(_eq_ == child)
        {
            _eq_ = null;
            return;
        }

        if(_rightField_ == child)
        {
            _rightField_ = null;
            return;
        }

        if(_semicolon_ == child)
        {
            _semicolon_ = null;
            return;
        }

    }

    void replaceChild(Node oldChild, Node newChild)
    {
        if(_this_ == oldChild)
        {
            setThis((TThis) newChild);
            return;
        }

        if(_period_ == oldChild)
        {
            setPeriod((TPeriod) newChild);
            return;
        }

        if(_leftField_ == oldChild)
        {
            setLeftField((TIdentifier) newChild);
            return;
        }

        if(_eq_ == oldChild)
        {
            setEq((TEq) newChild);
            return;
        }

        if(_rightField_ == oldChild)
        {
            setRightField((TIdentifier) newChild);
            return;
        }

        if(_semicolon_ == oldChild)
        {
            setSemicolon((TSemicolon) newChild);
            return;
        }

    }
}
