Beispiel #1
0
        public ITriggerOutcome ProcessTrigger(ITriggerInput TriggerInput)
        {
            //If triggers are not active then just return Report as False
            if (!_TriggersActive)
            {
                return new TriggerOutcome()
                       {
                           Report = false
                       }
            }
            ;

            //Validate TriggerInput
            if (TriggerInput.CrudOperationType == RestEnum.CrudOperationType.None)
            {
                throw new System.NullReferenceException("TriggerInput.CrudOperationType cannot be None");
            }

            if (TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Create ||
                TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Update)
            {
                if (TriggerInput.InboundResource == null)
                {
                    throw new System.NullReferenceException("TriggerInput.InboundResource cannot be null");
                }
            }

            if (TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Create ||
                TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Update ||
                TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Delete)
            {
                if (string.IsNullOrWhiteSpace(TriggerInput.InboundResourceId))
                {
                    throw new System.NullReferenceException("TriggerInput.InboundResourceId cannot be null or empty");
                }
                if (TriggerInput.ResourceType == ResourceType.Resource)
                {
                    throw new System.NullReferenceException("TriggerInput.ResourceType cannot be equal to 'Resource'");
                }
            }

            if (TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Update ||
                TriggerInput.CrudOperationType == RestEnum.CrudOperationType.Delete)
            {
                if (TriggerInput.DbTokenIndexList == null)
                {
                    throw new System.NullReferenceException("TriggerInput.DbTokenIndexList cannot be null for Update or Delete actions");
                }
            }

            ITriggerOutcome TriggerOutcomeMain = null;

            //Resource Specific
            var ResourceSpecificList = ITriggerServiceList.Where(x => x.ResourceTypeToTriggerFor == TriggerInput.ResourceType);

            foreach (var TriggerService in ResourceSpecificList)
            {
                TriggerOutcomeMain = CollateOutcomes(TriggerOutcomeMain, TriggerService.ProcessTrigger(TriggerInput));
            }

            //All Resource Types
            ResourceSpecificList = ITriggerServiceList.Where(x => x.ResourceTypeToTriggerFor == ResourceType.Resource);
            foreach (var TriggerService in ResourceSpecificList)
            {
                TriggerOutcomeMain = CollateOutcomes(TriggerOutcomeMain, TriggerService.ProcessTrigger(TriggerInput));
            }

            return(TriggerOutcomeMain);
        }