Ejemplo n.º 1
0
        /// <summary>
        ///   init the position to start a new chain of search
        /// </summary>
        internal void init(RunTimeEvent rtEvent)
        {
            _rtEvt = rtEvent;
            _task  = _rtEvt.getTask();
            if (_task.isMainProg())
            {
                //phase = PHASE_CONTROL_NON_SPECIFIC;
                _prevTask = _rtEvt.getMainPrgCreator();
                if (_prevTask != null && _prevTask.isMainProg())
                {
                    _prevTask = null;
                }
            }

            if (rtEvent.getType() == ConstInterface.EVENT_TYPE_USER_FUNC)
            {
                _phase = PHASE_CONTROL_NON_SPECIFIC;
            }
            else
            {
                if (rtEvent.getType() == ConstInterface.EVENT_TYPE_USER_FUNC)
                {
                    _phase = PHASE_CONTROL_NON_SPECIFIC;
                }
                else
                {
                    _phase = PHASE_CONTROL_SPECIFIC;
                }
            }

            _orgTask     = _task;
            _orgPrevTask = _prevTask;

            _handlersTab = _task.getHandlersTab();
            if (_handlersTab == null)
            {
                goUpTaskChain();
            }
            _handlerIdx = -1;
        }
Ejemplo n.º 2
0
        /// <summary>
        ///   returns the next event handler
        /// </summary>
        internal EventHandler getNext()
        {
            EventHandler handler;

            if (_handlersTab == null)
            {
                return(null);
            }

            if (_rtEvt.getType() == ConstInterface.EVENT_TYPE_INTERNAL &&
                _rtEvt.getInternalCode() != InternalInterface.MG_ACT_VARIABLE)
            {
                // special treatment for TASK, RECORD and CONTROL level Prefix/Suffix events
                switch (_rtEvt.getInternalCode())
                {
                case InternalInterface.MG_ACT_TASK_PREFIX:
                case InternalInterface.MG_ACT_TASK_SUFFIX:
                case InternalInterface.MG_ACT_REC_PREFIX:
                case InternalInterface.MG_ACT_REC_SUFFIX:
                case InternalInterface.MG_ACT_CTRL_PREFIX:
                case InternalInterface.MG_ACT_CTRL_SUFFIX:
                case InternalInterface.MG_ACT_CTRL_VERIFICATION:

                    if (_handlerIdx == -1)
                    {
                        for (_handlerIdx = _handlersTab.getSize() - 1; _handlerIdx >= 0; _handlerIdx--)
                        {
                            handler = _handlersTab.getHandler(_handlerIdx);
                            if (handler.isNonSpecificHandlerOf(_rtEvt) || handler.isSpecificHandlerOf(_rtEvt))
                            {
                                return(handler);
                            }
                        }
                    }
                    // an event handler was not found or was returned in a previous call to this method
                    return(null);

                default:
                    // other internal events should continue
                    break;
                }
            }

            while (setNextHandlerIdx())
            {
                handler = _handlersTab.getHandler(_handlerIdx);
                switch (_phase)
                {
                case PHASE_CONTROL_SPECIFIC:
                    if (handler.isSpecificHandlerOf(_rtEvt))
                    {
                        return(handler);
                    }
                    continue;

                case PHASE_CONTROL_NON_SPECIFIC:
                    if (handler.isNonSpecificHandlerOf(_rtEvt))
                    {
                        return(handler);
                    }
                    continue;

                case PHASE_GLOBAL_SPECIFIC:
                    if (handler.isGlobalSpecificHandlerOf(_rtEvt))
                    {
                        return(handler);
                    }
                    continue;

                case PHASE_GLOBAL:
                    if (handler.isGlobalHandlerOf(_rtEvt))
                    {
                        return(handler);
                    }
                    continue;

                default:
                    Logger.Instance.WriteExceptionToLog("in EventHandlerPosition.getNext() invalid phase: " + _phase);
                    break;
                }
            }
            return(null);
        }