private void _PopulateController(OutputController controller, XElement element)
        {
            controller.ModuleDataSet = _GetModuleData(element);

            int outputIndex = 0;

            foreach (XElement outputElement in element.Element(ELEMENT_OUTPUTS).Elements(ELEMENT_OUTPUT))
            {
                // Data persisted in the controller instance may exceed the
                // output count.
                if (outputIndex >= controller.OutputCount)
                {
                    break;
                }

                // The outputs were created when the output count was set.
                OutputController.Output output = controller.Outputs[outputIndex];

                output.Name = outputElement.Attribute(ATTR_NAME).Value;

                controller.ClearPostFilters(outputIndex);
                IEnumerable <XElement> filterElements = outputElement.Element(ELEMENT_FILTERS).Elements(ELEMENT_FILTER);
                foreach (XElement filterElement in filterElements)
                {
                    Guid typeId     = Guid.Parse(filterElement.Attribute(ATTR_TYPE_ID).Value);
                    Guid instanceId = Guid.Parse(filterElement.Attribute(ATTR_INSTANCE_ID).Value);
                    IPostFilterModuleInstance filter = Modules.ModuleManagement.GetPostFilter(typeId);
                    filter.InstanceId = instanceId;
                    controller.AddPostFilter(outputIndex, filter);
                }

                outputIndex++;
            }
        }
        protected override void _PopulateObject(OutputController obj, XElement element)
        {
            obj.LinkedTo = Guid.Parse(element.Attribute(ATTR_LINKED_TO).Value);

            if (obj.OutputModule != null)
            {
                obj.OutputModule.TransformModuleData = _GetTransformModuleData(element.Element(ELEMENT_TRANSFORM_DATA));
            }

            int outputIndex = 0;

            foreach (XElement outputElement in element.Element(ELEMENT_OUTPUTS).Elements(ELEMENT_OUTPUT))
            {
                // Data persisted in the controller instance may exceed the
                // output count.
                if (outputIndex >= obj.OutputCount)
                {
                    break;
                }

                // The outputs were created when the output count was set.
                OutputController.Output output = obj.Outputs[outputIndex];

                output.Name = outputElement.Attribute(ATTR_NAME).Value;

                if (obj.OutputModule != null)
                {
                    // Create transform instances.
                    foreach (XElement transformElement in outputElement.Element(ELEMENT_TRANSFORMS).Elements(ELEMENT_TRANSFORM))
                    {
                        Guid moduleTypeId     = Guid.Parse(transformElement.Attribute(ATTR_TYPE_ID).Value);
                        Guid moduleInstanceId = Guid.Parse(transformElement.Attribute(ATTR_INSTANCE_ID).Value);
                        obj.OutputModule.AddTransform(outputIndex, moduleTypeId, moduleInstanceId);
                    }
                }

                outputIndex++;
            }
        }