示例#1
0
        /// <summary>
        /// Creates the service caller.
        /// </summary>
        /// <param name="callDefinition">The call definition.</param>
        /// <returns>IServiceCaller.</returns>
        /// <exception cref="System.ArgumentNullException">callDefinition</exception>
        /// <exception cref="System.ArgumentException">Invalid service definition.;callDefinition</exception>
        public IServiceCaller CreateServiceCaller(IServiceCallDefinition callDefinition)
        {
            if (callDefinition == null)
                throw new ArgumentNullException("callDefinition");

            var webMethodCallDefinition = callDefinition as WebMethodCallDefinition;
            if (webMethodCallDefinition != null)
            {
                var result = WebMethodServiceCallerFactory.CreateExport().Value;
                result.Initialize(webMethodCallDefinition);

                return result;
            }

            var urlCallDefinition = callDefinition as UrlCallDefinition;
            if (urlCallDefinition != null)
            {
                var result = UrlServiceCallerFactory.CreateExport().Value;
                result.Initialize(urlCallDefinition);

                return result;
            }

            throw new ArgumentException("Invalid service definition.", "callDefinition");
        }
        /// <summary>
        /// Initializes the view-model.
        /// </summary>
        /// <param name="commandDefinition">
        /// The command definition.
        /// </param>
        /// <param name="detailsViewModel">
        /// The details view-model.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="commandDefinition"/> parameter is null.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="detailsViewModel"/> parameter is null.
        /// </exception>
        public void Initialize(ExecuteServiceCommandDefinition commandDefinition, IDetailsViewModel detailsViewModel)
        {
            if (commandDefinition == null)
                throw new ArgumentNullException("commandDefinition");

            if (detailsViewModel == null)
                throw new ArgumentNullException("detailsViewModel");

            _commandDefinition = commandDefinition;
            _detailsViewModel = detailsViewModel;
            _canExecuteRule = new HasAccessToExecuteCommandValidator(commandDefinition.SecurityConfigurations.ToArray());

            var serviceManager = DynamicTypeManager.GetIntegrationServiceCallsManager(detailsViewModel.ProcessName);

            if (serviceManager.ContainsService(_commandDefinition.ServiceGuid))
                _callDefinition = serviceManager.GetCallDefinition(_commandDefinition.ServiceGuid);

            CreateDetailsPropertyChangedListener();
        }
        /// <summary>
        /// Creates the lazy service caller.
        /// </summary>
        /// <param name="callDefinition">
        /// The call definition.
        /// </param>
        /// <returns>The service caller.</returns>
        private Lazy<IServiceCaller> CreateLazyServiceCaller(IServiceCallDefinition callDefinition)
        {
            return new Lazy<IServiceCaller>(
                () =>
                {
                    try
                    {
                        return ServiceCallerFactory.CreateServiceCaller(callDefinition);
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(LogSeverity.Error, "Integration service initialization", ex);
                    }

                    return null;
                });
        }
 /// <summary>
 /// Determines whether this instance can execute the specified call definition.
 /// </summary>
 /// <param name="callDefinition">The call definition.</param>
 /// <param name="item">The source item.</param>
 /// <param name="oldItem">The old item.</param>
 /// <returns><c>true</c> if this instance can execute the specified call definition; otherwise, <c>false</c>.</returns>
 private static bool CanExecute(IServiceCallDefinition callDefinition, IEditableRoot item, IEditableRoot oldItem)
 {
     return !ServiceCallContext.IsExecutingService(callDefinition.Guid) && callDefinition.Rules.Any(r => r.CanExecute(item, oldItem));
 }
        /// <summary>
        /// Gets the service caller.
        /// </summary>
        /// <param name="callDefinition">
        /// The call definition.
        /// </param>
        /// <returns>
        /// The <see cref="IServiceCaller"/>.
        /// </returns>
        /// <exception cref="System.InvalidOperationException">
        /// The service could not be initialized.
        /// </exception>
        private IServiceCaller GetServiceCaller(IServiceCallDefinition callDefinition)
        {
            var serviceCaller = _serviceCallers[callDefinition].Value;
            if (serviceCaller == null)
                throw new InvalidOperationException(
                    string.Format(CultureInfo.InvariantCulture, "Service \"{0}\" could not be initialized.", callDefinition.Name));

            return serviceCaller;
        }