package org.onosproject.pcepio.protocol;

import org.jboss.netty.buffer.ChannelBuffer;
import org.onosproject.pcepio.exceptions.PcepParseException;

/**
 * Abstraction of an entity Provides PCEP Message PAth for update message.
 * Reference :PCE extensions for stateful draft-ietf-pce-stateful-pce-10.
 */
public interface PcepMsgPath {

    /**
     * Returns object of PcepEroObject.
     *
     * @return eroObject
     */
    PcepEroObject getEroObject();

    /**
     * Returns object of PcepAttribute.
     *
     * @return pcepAttribute
     */
    PcepAttribute getPcepAttribute();

    /**
     * Sets PcepEroObject.
     *
     * @param eroObject PCEP ERO Object.
     */
    void setEroObject(PcepEroObject eroObject);

    /**
     * Sets PcepAttribute.
     *
     * @param pcepAttribute PCEP-Attribute.
     */
    void setPcepAttribute(PcepAttribute pcepAttribute);

    /**
     * reads ERO object and attribute list.
     *
     * @param bb of type channel buffer
     * @return PcepMsgPath
     * @throws PcepParseException while parsing Message Path from Channel Buffer.
     */
    public PcepMsgPath read(ChannelBuffer bb) throws PcepParseException;

    /**
     * writes ERO object and attribute list to channel.
     *
     * @param bb of type channel buffer
     * @return object length index
     * @throws PcepParseException while writing Message Path into Channel Buffer.
     */

    public int write(ChannelBuffer bb) throws PcepParseException;

    /**
     * Prints the attributes of PCEP message path.
     */
    void print();

    /**
     * Builder interface with get and set functions to build PcepMsgPath.
     */
    public interface Builder {

        /**
         * Builds PcepMsgPath.
         *
         * @return PcepMsgPath
         * @throws PcepParseException when mandatory object is not set
         */
        PcepMsgPath build() throws PcepParseException;

        /**
         * Returns object of PcepEroObject.
         *
         * @return PcepEroObject
         */
        PcepEroObject getEroObject();

        /**
         * Returns object of PcepAttribute.
         *
         * @return pcepAttribute
         */
        PcepAttribute getPcepAttribute();

        /**
         * Sets PcepEroObject.
         *
         * @param eroObject PcepEroObject
         * @return Builder by setting ERO object.
         */
        Builder setEroObject(PcepEroObject eroObject);

        /**
         * Sets PcepAttribute.
         *
         * @param pcepAttribute PCEP-Attribute
         * @return Builder by setting PCEP-Attribute.
         */
        Builder setPcepAttribute(PcepAttribute pcepAttribute);
    }
}
