public TemplateSurrogate Build(Template template)
        {
            var componentBuilder = new SurrogateBuildingComponentVisitor();
            var amendmentBuilder = new SurrogateBuildingAmendmentVisitor();

            return new TemplateSurrogate
                {
                    Components = template.Components.Select(c => c.Accept(componentBuilder)).ToArray(),
                    Amendments = template.Amendments.Select(a => a.Accept(amendmentBuilder)).ToArray()
                };
        }
        public WidgetSpecificationSurrogate Build(WidgetSpecification widgetSpecification)
        {
            var componentBuilder = new SurrogateBuildingComponentVisitor();
            var amendmentBuilder = new SurrogateBuildingAmendmentVisitor();

            return new WidgetSpecificationSurrogate
                       {
                           Category = widgetSpecification.Category,
                           Components = widgetSpecification.Components.Select(c => c.Accept(componentBuilder)).ToArray(),
                           Amendments = widgetSpecification.Amendments.Select(a => a.Accept(amendmentBuilder)).ToArray(),
                           PropertySpecifications = widgetSpecification.Properties.Select(s =>
                                   new PropertySpecificationSurrogate
                                       {
                                           Name = s.Name,
                                           Type = s.Type,
                                           DefaultValue = s.DefaultValue
                                       }).ToArray()
                       };
        }