/// <summary>
        /// Helper method to get get the <see cref="IGatewayProviderSettings"/> from the appropriate resolver
        /// </summary>
        /// <param name="gatewayProvider">The <see cref="GatewayProviderDisplay"/></param>
        /// <param name="gatewayProviderType">The gateway provider type</param>
        /// <returns>A <see cref="IGatewayProviderSettings"/> or null</returns>
        private IGatewayProviderSettings GetGatewayProviderFromResolver(GatewayProviderDisplay gatewayProvider, GatewayProviderType gatewayProviderType)
        {
            GatewayProviderBase provider = null;

            switch (gatewayProviderType)
            {
            case GatewayProviderType.Notification:
                provider = _gatewayContext.Notification.GetProviderByKey(gatewayProvider.Key, false);
                break;

            case GatewayProviderType.Payment:
                provider = _gatewayContext.Payment.GetProviderByKey(gatewayProvider.Key, false);
                break;

            case GatewayProviderType.Shipping:
                provider = _gatewayContext.Shipping.GetProviderByKey(gatewayProvider.Key, false);
                break;

            case GatewayProviderType.Taxation:
                provider = _gatewayContext.Taxation.GetProviderByKey(gatewayProvider.Key, false);
                break;
            }

            return(provider != null ? provider.GatewayProviderSettings : null);
        }
        public HttpResponseMessage PutGatewayProvider(GatewayProviderDisplay gatewayProviderDisplay)
        {
            var response = Request.CreateResponse(HttpStatusCode.OK);

            try
            {
                var provider = _gatewayProviderService.GetGatewayProviderByKey(gatewayProviderDisplay.Key);
                _gatewayProviderService.Save(gatewayProviderDisplay.ToGatewayProvider(provider));
            }
            catch (Exception ex)
            {
                response = Request.CreateResponse(HttpStatusCode.NotFound, String.Format("{0}", ex.Message));
            }

            return(response);
        }
        public HttpResponseMessage DeactivateGatewayProvider(GatewayProviderDisplay gatewayProvider)
        {
            var response = Request.CreateResponse(HttpStatusCode.OK);

            try
            {
                var gatewayProviderType = EnumTypeFieldConverter.GatewayProvider.GetTypeField(gatewayProvider.ProviderTfKey);

                var provider = GetGatewayProviderFromResolver(gatewayProvider, gatewayProviderType);

                if (provider == null || !provider.Activated)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, string.Format("{0}", "Provider could not be found or is already not activated")));
                }

                ToggleProviderActivation(provider, gatewayProviderType);
            }
            catch (Exception ex)
            {
                response = Request.CreateResponse(HttpStatusCode.InternalServerError, string.Format("{0}", ex.Message));
            }

            return(response);
        }