# DO NOT EDIT.
# generated by smc (http://smc.sourceforge.net/)
# from file : bgapirequest.sm

import statemap


class BgApiRequestState(statemap.State):

    def Entry(self, fsm):
        pass

    def Exit(self, fsm):
        pass

    def BlankLine(self, fsm):
        self.Default(fsm)

    def CommandReply(self, fsm):
        self.Default(fsm)

    def JobUuid(self, fsm):
        self.Default(fsm)

    def ProcessLine(self, fsm, line):
        self.Default(fsm)

    def ReplyText(self, fsm):
        self.Default(fsm)

    def Default(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write('TRANSITION   : Default\n')
        msg = "\n\tState: %s\n\tTransition: %s" % (
            fsm.getState().getName(), fsm.getTransition())
        raise statemap.TransitionUndefinedException, msg

class MainMap_Default(BgApiRequestState):

    def BlankLine(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.BlankLine()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting blank line")
        finally:
            fsm.setState(endState)

    def CommandReply(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.CommandReply()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting command reply")
        finally:
            fsm.setState(endState)

    def ReplyText(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ReplyText()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting reply text")
        finally:
            fsm.setState(endState)

    def ProcessLine(self, fsm, line):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ProcessLine(line)\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure handling bgapi response - was not expecting line needing to be processed")
        finally:
            fsm.setState(endState)

class MainMap_Startup(MainMap_Default):

    def CommandReply(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Startup.CommandReply()\n")

        fsm.getState().Exit(fsm)
        fsm.setState(MainMap.ApiResponseStarted)
        fsm.getState().Entry(fsm)

class MainMap_ApiResponseStarted(MainMap_Default):

    def ReplyText(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.ApiResponseStarted.ReplyText()\n")

        fsm.getState().Exit(fsm)
        fsm.setState(MainMap.GotReplyText)
        fsm.getState().Entry(fsm)

class MainMap_GotReplyText(MainMap_Default):

    def BlankLine(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.GotReplyText.BlankLine()\n")


    def JobUuid(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.GotReplyText.JobUuid()\n")

        fsm.getState().Exit(fsm)
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.callOrErrback()
        finally:
            fsm.setState(MainMap.Startup)
            fsm.getState().Entry(fsm)

class MainMap:

    Startup = MainMap_Startup('MainMap.Startup', 0)
    ApiResponseStarted = MainMap_ApiResponseStarted('MainMap.ApiResponseStarted', 1)
    GotReplyText = MainMap_GotReplyText('MainMap.GotReplyText', 2)
    Default = MainMap_Default('MainMap.Default', -1)

class BgApiRequest_sm(statemap.FSMContext):

    def __init__(self, owner):
        statemap.FSMContext.__init__(self)
        self._owner = owner
        self.setState(MainMap.Startup)
        MainMap.Startup.Entry(self)

    def BlankLine(self):
        self._transition = 'BlankLine'
        self.getState().BlankLine(self)
        self._transition = None

    def CommandReply(self):
        self._transition = 'CommandReply'
        self.getState().CommandReply(self)
        self._transition = None

    def JobUuid(self):
        self._transition = 'JobUuid'
        self.getState().JobUuid(self)
        self._transition = None

    def ProcessLine(self, *arglist):
        self._transition = 'ProcessLine'
        self.getState().ProcessLine(self, *arglist)
        self._transition = None

    def ReplyText(self):
        self._transition = 'ReplyText'
        self.getState().ReplyText(self)
        self._transition = None

    def getState(self):
        if self._state == None:
            raise statemap.StateUndefinedException
        return self._state

    def getOwner(self):
        return self._owner

