Пример #1
0
        /// <summary>
        /// Starts the pipeline tracking.
        /// </summary>
        /// <param name="pipelineManager">The pipeline manager.</param>
        /// <param name="pipelineName">Name of the pipeline.</param>
        /// <param name="pipelineDomain">The pipeline domain.</param>
        public static void StartPipelineTracking(this PipelineManager pipelineManager, string pipelineName, string pipelineDomain)
        {
            Assert.ArgumentNotNull(pipelineManager, "pipelineManager");

            PipelineDefinition pipelineDefinition = pipelineManager.GetPipelineDefinition(pipelineName, pipelineDomain);

            Assert.IsNotNull(pipelineDefinition, "Pipeline with name '{0}' was not found in domain '{1}'", pipelineName, pipelineDomain);

            for (int index = 0; index < pipelineDefinition.Processors.Count; ++index)
            {
                ProcessorDefinition processorDefinition = pipelineDefinition.Processors[index];

                Assert.IsNotNull(processorDefinition.Type, "Referenced processors are not supported.");

                if (ReflectionUtil.GetTypeInfo(processorDefinition.Type) != typeof(ProcessorProxy))
                {
                    processorDefinition.ProcessorElement = new XElement(ProcessorElementName, new XAttribute(TypeAttributeName, ReflectionUtil.GetTypeString(typeof(ProcessorProxy))), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, PipelineNameAttributeValue), new XText(pipelineDefinition.Name)), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, PipelineDomainAttributeValue), new XText(pipelineDefinition.Domain)), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, ProcessorIndexAttributeValue), new XText(index.ToString(CultureInfo.InvariantCulture))), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, ProcessorDefinitionAttributeValue), new XCData(processorDefinition.ProcessorElement.ToString())));
                }
                else if (processorDefinition.ProcessorElement.Elements(ParameterElementName).Single(parameterElement => parameterElement.Attribute(DescriptionAttributeName).Value == ProcessorDefinitionAttributeValue).Value == string.Empty)
                {
                    pipelineDefinition.Processors.RemoveAt(index--);
                }
            }

            pipelineDefinition.Processors.Add(new ProcessorDefinition(new XElement(ProcessorElementName, new XAttribute(TypeAttributeName, ReflectionUtil.GetTypeString(typeof(ProcessorProxy))), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, PipelineNameAttributeValue), new XText(pipelineDefinition.Name)), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, PipelineDomainAttributeValue), new XText(pipelineDefinition.Domain)), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, ProcessorIndexAttributeValue), new XText(pipelineDefinition.Processors.Count.ToString(CultureInfo.InvariantCulture))), new XElement(ParameterElementName, new XAttribute(DescriptionAttributeName, ProcessorDefinitionAttributeValue))))
            {
                RunIfAborted = true
            });

            pipelineManager.UpdatePipelineDefinition(pipelineDefinition);
        }
Пример #2
0
        /// <summary>
        /// Stops the pipeline tracking.
        /// </summary>
        /// <param name="pipelineManager">The pipeline manager.</param>
        /// <param name="pipelineName">Name of the pipeline.</param>
        /// <param name="pipelineDomain">The pipeline domain.</param>
        public static void StopPipelineTracking(this PipelineManager pipelineManager, string pipelineName, string pipelineDomain)
        {
            Assert.ArgumentNotNull(pipelineManager, "pipelineManager");

            PipelineDefinition pipelineDefinition = pipelineManager.GetPipelineDefinition(pipelineName, pipelineDomain);

            Assert.IsNotNull(pipelineDefinition, "Pipeline with name '{0}' was not found in domain '{1}'", pipelineName, pipelineDomain);

            for (int index = 0; index < pipelineDefinition.Processors.Count; ++index)
            {
                ProcessorDefinition processorDefinition = pipelineDefinition.Processors[index];

                if ((processorDefinition.Type != null) && (ReflectionUtil.GetTypeInfo(processorDefinition.Type) == typeof(ProcessorProxy)))
                {
                    string processorDefinitionRawValue = processorDefinition.ProcessorElement.Elements(ParameterElementName).Single(element => element.Attribute(DescriptionAttributeName).Value == ProcessorDefinitionAttributeValue).Value;

                    if (processorDefinitionRawValue == string.Empty)
                    {
                        pipelineDefinition.Processors.RemoveAt(index--);
                    }
                    else
                    {
                        processorDefinition.ProcessorElement = XElement.Parse(processorDefinitionRawValue);
                    }
                }
            }

            pipelineManager.UpdatePipelineDefinition(pipelineDefinition);
        }