From 23d38d0864db310568fd14b0caf5d712dc864a11 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Tue, 23 Apr 2013 20:35:42 +0200 Subject: [PATCH] Cleanup Interfaces and BaseClasses --- .../ICSharpCode.Reporting.csproj | 9 +- .../Src/Arrange/ArrangeStrategy.cs | 36 ++++++++ .../Src/Exporter/DebugExporter.cs | 84 +++++++++++++++++++ .../Src/Exporter/IAcceptor.cs | 20 +++++ .../Src/Exporter/IVisitor.cs | 21 +++++ .../Src/Exporter/Visitor.cs | 53 ++++++++++++ .../Src/Factories/ExportColumnFactory.cs | 2 +- .../Src/Interfaces/Export/IExportColumn.cs | 1 + .../Src/Interfaces/Export/IExportContainer.cs | 2 +- .../Src/Interfaces/IPrintableObject.cs | 5 +- .../Src/Interfaces/IReportContainer.cs | 7 +- .../Src/Interfaces/IReportCreator.cs | 4 +- .../Src/Items/BaseSection.cs | 2 + .../Src/Items/PrintableItem.cs | 9 +- .../Src/Items/ReportContainer.cs | 18 +++- .../Items/{ReportItem.cs => ReportObject.cs} | 8 +- .../Src/PageBuilder/BasePageBuilder.cs | 7 +- .../Converter/ContainerConverter.cs | 13 +-- .../PageBuilder/ExportColumns/ExportColumn.cs | 2 +- .../ExportColumns/ExportContainer.cs | 9 +- .../PageBuilder/ExportColumns/ExportText.cs | 7 +- .../Src/PageBuilder/FormPageBuilder.cs | 47 +++++------ .../ICSharpCode.Reporting.Test.csproj | 1 + .../src/Model/Report_TwoItemsFixture.cs | 2 +- .../src/PageBuilder/BaseConvertFixture.cs | 2 +- .../PageBuilder/ContainerConverterFixture.cs | 8 +- .../src/PageBuilder/PageBuilderFixture.cs | 33 +++++--- .../src/PageBuilder/PageLayoutFixture.cs | 70 ++++++++++++++++ .../src/TestHelper.cs | 52 +++++++++++- 29 files changed, 457 insertions(+), 77 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IAcceptor.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IVisitor.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitor.cs rename src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/{ReportItem.cs => ReportObject.cs} (87%) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index 7b0ea97bfb..bf877d1855 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -55,9 +55,14 @@ + + + + + @@ -74,7 +79,7 @@ - + @@ -96,6 +101,8 @@ + + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs new file mode 100644 index 0000000000..f842acfed4 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs @@ -0,0 +1,36 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 22.04.2013 + * Time: 19:11 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using ICSharpCode.Reporting.Interfaces; +using ICSharpCode.Reporting.Items; +using ICSharpCode.Reporting.PageBuilder.ExportColumns; + +namespace ICSharpCode.Reporting.Arrange +{ + /// + /// Description of ArrangeStrategy. + /// + public interface IArrangeStrategy + { + void Arrange(IPrintableObject reportItem); + } + + + public class ContainerArrangeStrategy:IArrangeStrategy + { + public ContainerArrangeStrategy() + { + } + + public void Arrange(IPrintableObject reportItem) + { + Console.WriteLine("Arrange {0}",reportItem.Name); + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs new file mode 100644 index 0000000000..af27b9557d --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs @@ -0,0 +1,84 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 18.04.2013 + * Time: 20:06 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +using ICSharpCode.Reporting.Interfaces.Export; + +namespace ICSharpCode.Reporting.Exporter +{ + /// + /// Description of DebugExporter. + /// + public class DebugExporter + { + + public DebugExporter(Collection pages) + { + if (pages == null) { + throw new ArgumentException("pages"); + } + + Pages = pages; + } + + + public void Run () { + foreach (var page in Pages) { + ShowDebug(page); + } + } + + static void ShowDebug(IExportContainer container) + { + var visitor = new DebugVisitor(); + foreach (var item in container.ExportedItems) { + if (item is IExportContainer) { + var a = item as IAcceptor; + if (a != null) { + Console.WriteLine("----"); + a.Accept(visitor); + } + ShowDebug(item as IExportContainer); + } else { + var b = item as IAcceptor; + if (b != null) { + b.Accept(visitor); + + } + } + } + } + + /* + static void ShowDebug(IExportContainer container) + { + var visitor = new DebugVisitor(); + foreach (var item in container.ExportedItems) { + if (item is IExportContainer) { + var a = item as IAcceptor; + if (a != null) { + Console.WriteLine("----"); + a.Accept(visitor); + } + ShowDebug(item as IExportContainer); + } else { + var b = item as IAcceptor; + if (b != null) { + b.Accept(visitor); + + } + } + } + } + */ + public Collection Pages {get; private set;} + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IAcceptor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IAcceptor.cs new file mode 100644 index 0000000000..2c519b93aa --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IAcceptor.cs @@ -0,0 +1,20 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 20.04.2013 + * Time: 18:30 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ICSharpCode.Reporting.Exporter +{ + /// + /// Description of IAcceptor. + /// + public interface IAcceptor + { + void Accept(IVisitor visitor); + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IVisitor.cs new file mode 100644 index 0000000000..cfd08d4297 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/IVisitor.cs @@ -0,0 +1,21 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 18.04.2013 + * Time: 20:09 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using ICSharpCode.Reporting.PageBuilder.ExportColumns; + +namespace ICSharpCode.Reporting.Exporter +{ + public interface IVisitor + { + void Visit(ExportColumn exportColumn); + void Visit(ExportContainer exportColumn); + void Visit(ExportText exportColumn); + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitor.cs new file mode 100644 index 0000000000..1f6c95140c --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitor.cs @@ -0,0 +1,53 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 18.04.2013 + * Time: 20:09 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using ICSharpCode.Reporting.PageBuilder.ExportColumns; + +namespace ICSharpCode.Reporting.Exporter +{ + /// + /// Description of Visitor. + /// + /// + + public abstract class Visitor : IVisitor + { + public abstract void Visit(ExportColumn exportColumn); + public abstract void Visit(ExportContainer exportColumn); + public abstract void Visit(ExportText exportColumn); + } + + +// http://www.remondo.net/visitor-pattern-example-csharp/ +// http://www.codeproject.com/Articles/42240/Visitor-Design-Pattern +// http://www.remondo.net/strategy-pattern-example-csharp/ + + + public class DebugVisitor : Visitor + { + public override void Visit(ExportColumn exportColumn) + { + Console.WriteLine("Visit ExportColumn {0} - {1} - {2}", exportColumn.Name,exportColumn.Size,exportColumn.Location); + } + + + + public override void Visit(ExportContainer exportColumn) + { + Console.WriteLine("Visit ExportContainer {0} - {1} - {2}", exportColumn.Name,exportColumn.Size,exportColumn.Location); + } + + public override void Visit(ExportText exportColumn) + { + Console.WriteLine("Visit ExportText {0} - {1} - {2}", exportColumn.Name,exportColumn.Size,exportColumn.Location); + } + } + +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs index 9fe670841a..e95848b1b8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs @@ -24,7 +24,7 @@ namespace ICSharpCode.Reporting.Factories { } - public IExportColumn CreateItem (IPrintableObject item) { + public static IExportColumn CreateItem (IPrintableObject item) { var export = item.CreateExportColumn(); return export; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportColumn.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportColumn.cs index 46b20c97f0..5c29de276a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportColumn.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportColumn.cs @@ -8,6 +8,7 @@ */ using System; using ICSharpCode.Reporting.BaseClasses; +using ICSharpCode.Reporting.Exporter; namespace ICSharpCode.Reporting.Interfaces.Export { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs index 1e78e7ef57..ba7732a5b2 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs @@ -17,7 +17,7 @@ namespace ICSharpCode.Reporting.Interfaces.Export /// public interface IExportContainer:IExportColumn { - List ExportedItems {get;set;} + List ExportedItems {get;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs index 84b34835ef..82430100d0 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs @@ -23,7 +23,10 @@ namespace ICSharpCode.Reporting.Interfaces } - public interface IPrintableObject:IReportObject { + public interface IPrintableObject { + string Name{get;set;} + Size Size {get;set;} + Point Location {get;set;} IExportColumn CreateExportColumn(); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs index cb36b06e63..f76ca04ea1 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs @@ -16,9 +16,10 @@ namespace ICSharpCode.Reporting.Interfaces /// /// Description of IReportContainer. /// - public interface IReportContainer :IReportObject + public interface IReportContainer :IPrintableObject { - List Items {get;set;} - IExportContainer CreateExportColumn(); + List Items {get;} +// IExportContainer CreateExportColumn(); +// IExportColumn CreateExportColumn(); } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportCreator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportCreator.cs index 76a774bae8..ab49ffe72e 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportCreator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportCreator.cs @@ -8,6 +8,8 @@ */ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; + using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.Interfaces.Export; @@ -19,7 +21,7 @@ namespace ICSharpCode.Reporting.Interfaces public interface IReportCreator { void BuildExportList (); - List Pages {get;} + Collection Pages {get;} // PagesCollection Pages{get;} // event EventHandler PageCreated; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs index 5a462315be..13e13aa924 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs @@ -31,5 +31,7 @@ namespace ICSharpCode.Reporting.Items } #endregion + + } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs index d9533d64cd..911a3a8b11 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs @@ -13,8 +13,15 @@ using ICSharpCode.Reporting.Interfaces.Export; namespace ICSharpCode.Reporting.Items { - public class PrintableItem : ReportItem,IPrintableObject + public class PrintableItem : IPrintableObject { + public string Name { get; set; } + + public Point Location { get; set; } + + public Size Size { get; set; } + + public virtual IExportColumn CreateExportColumn() { return null; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs index d50f2e9a16..c85e9de301 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs @@ -8,6 +8,8 @@ */ using System; using System.Collections.Generic; +using ICSharpCode.Reporting.Arrange; +using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.PageBuilder.ExportColumns; @@ -17,7 +19,7 @@ namespace ICSharpCode.Reporting.Items /// /// Description of ReportContainer. /// - public class ReportContainer:ReportItem,IReportContainer + public class ReportContainer:PrintableItem,IReportContainer { public ReportContainer() { @@ -26,9 +28,7 @@ namespace ICSharpCode.Reporting.Items public List Items {get;set;} - - - public IExportContainer CreateExportColumn() + public override IExportColumn CreateExportColumn() { return new ExportContainer(){ Name = this.Name, @@ -36,5 +36,15 @@ namespace ICSharpCode.Reporting.Items Location = this.Location }; } + + IArrangeStrategy arrangeStrategy; + + public IArrangeStrategy ArrangeStrategy { + get {if (arrangeStrategy == null) { + arrangeStrategy = new ContainerArrangeStrategy(); + } + return arrangeStrategy; } + set { arrangeStrategy = value; } + } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportObject.cs similarity index 87% rename from src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportItem.cs rename to src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportObject.cs index 4d5fa0007b..a47e20f9b2 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportObject.cs @@ -18,10 +18,10 @@ namespace ICSharpCode.Reporting.Items /// - - public class ReportItem : IReportObject + /* + public class ReportObject : IReportObject { - public ReportItem() + public ReportObject() { } @@ -34,7 +34,7 @@ namespace ICSharpCode.Reporting.Items } - + */ } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 646f1fa821..1e36646739 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -8,6 +8,7 @@ */ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Drawing; using ICSharpCode.Reporting.BaseClasses; @@ -21,7 +22,7 @@ namespace ICSharpCode.Reporting.PageBuilder /// public class BasePageBuilder:IReportCreator { - private readonly object addLock = new object(); +// private readonly object addLock = new object(); public BasePageBuilder(IReportModel reportModel) { @@ -29,7 +30,7 @@ namespace ICSharpCode.Reporting.PageBuilder throw new ArgumentNullException("reportModel"); } ReportModel = reportModel; - Pages = new List(); + Pages = new Collection(); } @@ -67,7 +68,7 @@ namespace ICSharpCode.Reporting.PageBuilder public IPage CurrentPage {get; protected set;} - public List Pages {get; private set;} + public Collection Pages {get; private set;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs index d03a5adbda..7e2e710cc7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs @@ -23,23 +23,26 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter /// internal class ContainerConverter { - private ExportColumnFactory factory; +// private ExportColumnFactory factory; - public ContainerConverter(IReportContainer container,Point currentLocation ) + public ContainerConverter(IReportContainer reportContainer,Point currentLocation ) { - Container = container; + Container = reportContainer; CurrentLocation = currentLocation; - factory = new ExportColumnFactory(); +// factory = new ExportColumnFactory(); } public IExportContainer Convert() { Console.WriteLine("Convert section for location {0}",CurrentLocation); + var strat = ((ReportContainer)Container).ArrangeStrategy; + strat.Arrange(Container); + var exportContainer = (ExportContainer)Container.CreateExportColumn(); exportContainer.Location = CurrentLocation; var itemsList = new List(); foreach (var element in Container.Items) { - var item = factory.CreateItem(element); + var item = ExportColumnFactory.CreateItem(element); itemsList.Add(item); } exportContainer.ExportedItems.AddRange(itemsList); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs index 5188a6594b..14fb745ff1 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs @@ -9,6 +9,7 @@ using System; using System.Drawing; using ICSharpCode.Reporting.BaseClasses; +using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; @@ -25,6 +26,5 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns public Size Size {get;set;} public Point Location {get;set;} - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportContainer.cs index 561acc680f..6c8ebb678f 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportContainer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportContainer.cs @@ -8,6 +8,7 @@ */ using System; using System.Collections.Generic; +using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Interfaces.Export; namespace ICSharpCode.Reporting.PageBuilder.ExportColumns @@ -15,7 +16,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns /// /// Description of BaseExportContainer. /// - public class ExportContainer:ExportColumn,IExportContainer + public class ExportContainer:ExportColumn,IExportContainer,IAcceptor { public ExportContainer() { @@ -24,5 +25,11 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns public List ExportedItems {get;set;} + + + public void Accept(IVisitor visitor) + { + visitor.Visit(this); + } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs index 54f865b707..bd8186dbef 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs @@ -7,17 +7,22 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using ICSharpCode.Reporting.Exporter; namespace ICSharpCode.Reporting.PageBuilder.ExportColumns { /// /// Description of ExportText. /// - public class ExportText:ExportColumn + public class ExportText:ExportColumn,IAcceptor { public ExportText() { } + public void Accept(IVisitor visitor) + { + visitor.Visit(this); + } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs index d542cfbe62..5970a48738 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs @@ -9,6 +9,7 @@ using System; using System.Drawing; using ICSharpCode.Reporting.BaseClasses; +using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.PageBuilder.Converter; @@ -22,7 +23,7 @@ namespace ICSharpCode.Reporting.PageBuilder public class FormPageBuilder:BasePageBuilder { - private readonly object addLock = new object(); +// private readonly object addLock = new object(); public FormPageBuilder(IReportModel reportModel):base(reportModel) { @@ -44,7 +45,7 @@ namespace ICSharpCode.Reporting.PageBuilder var header =sc.Convert(); CurrentPage.ExportedItems.Add(header); var r = new Rectangle(header.Location.X,header.Location.Y,header.Size.Width,header.Size.Height); - CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 10); + CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 5); } } @@ -57,13 +58,13 @@ namespace ICSharpCode.Reporting.PageBuilder void BuilDetail() { - Console.WriteLine("Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin); + Console.WriteLine("FormPageBuilder - Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin); } void BuildPageFooter() { - Console.WriteLine("Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); + Console.WriteLine("FormPageBuilder - Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); @@ -72,6 +73,19 @@ namespace ICSharpCode.Reporting.PageBuilder CurrentPage.ExportedItems.Add(header); } + + void BuildReportFooter() + { + Console.WriteLine("FormPageBuilder - Build ReportFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); + CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, + ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); + + var sc = new ContainerConverter(ReportModel.ReportFooter,CurrentLocation); + var header =sc.Convert(); + CurrentPage.ExportedItems.Add(header); + } + + void WritePages() { CurrentPage = base.InitNewPage(); @@ -80,31 +94,10 @@ namespace ICSharpCode.Reporting.PageBuilder BuildPageHeader(); BuilDetail(); BuildPageFooter(); +// BuildReportFooter(); base.AddPage(CurrentPage); - - Console.WriteLine("<{0}> Pages created",Pages.Count); - - foreach (var page in Pages) { - ShowPage(page); - } - } - - - - - void ShowPage( IExportContainer container) - { - foreach (var item in container.ExportedItems) { - - if (item is IExportContainer) { - Console.WriteLine("Container: {0}- {1} - {2}",item.Name,item.Location,item.Size); - ShowPage(item as IExportContainer); - } else { - Console.WriteLine("\tItem {0} -relativ location <{1}> - {2}",item.Name,item.Location,item.Size); - } - } - } + } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj index eeada9a834..37b7b7ee18 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj @@ -65,6 +65,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Model/Report_TwoItemsFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Model/Report_TwoItemsFixture.cs index 947171239a..6d580ac0ce 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Model/Report_TwoItemsFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Model/Report_TwoItemsFixture.cs @@ -17,7 +17,7 @@ using NUnit.Framework; namespace ICSharpCode.Reporting.Test.Model { [TestFixture] - public class Report_TwoItemsFixture + public class ReportTwoItemsFixture { Stream stream; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs index 9e0679ebbe..f8994db4ed 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs @@ -22,7 +22,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder [Test] - public void CurrentPageContainOneItem() { + public void CurrentPageContainFiveItems() { reportCreator.BuildExportList(); var page = reportCreator.Pages[0]; Assert.That(page.ExportedItems.Count, Is.EqualTo(3)); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs index 13460e0adb..6c9d8f9b76 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs @@ -42,11 +42,13 @@ namespace ICSharpCode.Reporting.Test.PageBuilder [Test] public void LocationIsAdjusted() { - var pp = new Point(30,30); - var converter = new ContainerConverter(container,pp); + var location = new Point(30,30); + var converter = new ContainerConverter(container,location); var result = converter.Convert(); - Assert.That(result.Location,Is.EqualTo(pp)); + Assert.That(result.Location,Is.EqualTo(location)); } + + [TestFixtureSetUp] public void Init() { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageBuilderFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageBuilderFixture.cs index 2408207dc7..7fac7a11db 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageBuilderFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageBuilderFixture.cs @@ -10,6 +10,7 @@ using System; using System.IO; using System.Reflection; +using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.PageBuilder; @@ -23,7 +24,6 @@ namespace ICSharpCode.Reporting.Test.PageBuilder private IReportCreator reportCreator; - [Test] public void CanCreateFormsPageBuilder() { @@ -77,27 +77,34 @@ namespace ICSharpCode.Reporting.Test.PageBuilder reportCreator.BuildExportList(); var pi = reportCreator.Pages[0].PageInfo; Assert.That(pi.ReportName,Is.EqualTo("Report1")); - Console.WriteLine("----------------"); - foreach (var page in reportCreator.Pages) { - ShowPage(page); - } +// Console.WriteLine("----------------"); +// foreach (var page in reportCreator.Pages) { +// TestHelper.ShowDebug(page); +// } } - - void ShowPage( IExportContainer container) + /* + void ShowDebug(IExportContainer container) { + var visitor = new DebugVisitor(); foreach (var item in container.ExportedItems) { - if (item is IExportContainer) { - Console.WriteLine("DoContainer {0} - {1} - {2}",item.Name,item.Location,item.Size); - ShowPage(item as IExportContainer); + var a = item as IAcceptor; + if (a != null) { + Console.WriteLine("----"); + a.Accept(visitor); + } + ShowDebug(item as IExportContainer); } else { - Console.WriteLine("\tItem {0} - {1} - {2}",item.Name,item.Location,item.Size); + var b = item as IAcceptor; + if (b != null) { + b.Accept(visitor); + + } } - - } } + */ #endregion diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs new file mode 100644 index 0000000000..8d2088fbde --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs @@ -0,0 +1,70 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 21.04.2013 + * Time: 18:18 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Linq; +using System.Reflection; + +using ICSharpCode.Reporting.Exporter; +using ICSharpCode.Reporting.Interfaces; +using ICSharpCode.Reporting.Interfaces.Export; +using ICSharpCode.Reporting.PageBuilder.ExportColumns; +using NUnit.Framework; + +namespace ICSharpCode.Reporting.Test.PageBuilder +{ + [TestFixture] + public class PageLayoutFixture + { + private IReportCreator reportCreator; + + [Test] + public void PageContainsFourExportContainer() + { + reportCreator.BuildExportList(); + var x = reportCreator.Pages[0].ExportedItems; + var y = from s in x + where s.GetType() == typeof(ExportContainer) + select s; + Assert.That(y.ToList().Count,Is.EqualTo(3)); + Console.WriteLine("-------ShowDebug---------"); + var ex = new DebugExporter(reportCreator.Pages); + ex.Run(); + } + + [Test] + public void SectionsInpageDoNotOverlap() + { + Point p = Point.Empty; + reportCreator.BuildExportList(); + foreach (IPage element in reportCreator.Pages) { + var first = true; + foreach (var item in element.ExportedItems) { + if (! first) { + var p2 = new Point(item.Location.X,item.Location.Y); + Assert.That(p2.Y,Is.GreaterThan(p.Y)); + } else { + first = false; + } + p = new Point(item.Location.X,item.Location.Y + item.Size.Height); + } + } + } + + + [SetUp] + public void LoadFromStream() + { + System.Reflection.Assembly asm = Assembly.GetExecutingAssembly(); + var stream = asm.GetManifestResourceStream(TestHelper.RepWithTwoItems); + var reportingFactory = new ReportingFactory(); + reportCreator = reportingFactory.ReportCreator(stream); + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestHelper.cs index dee6e25142..5b2073dd80 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestHelper.cs @@ -7,21 +7,20 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using ICSharpCode.Reporting.Exporter; +using ICSharpCode.Reporting.Interfaces.Export; namespace ICSharpCode.Reporting.Test { /// /// Description of TestHelper. /// - public class TestHelper + public static class TestHelper { private const string nameSpace = "ICSharpCode.Reporting.Test.src.TestReports."; private const string plainReportName = "PlainModel.srd"; private const string rr = "ReportWithTwoItems.srd"; - public TestHelper() - { - } public static string PlainReportFileName{ get{return nameSpace + plainReportName;} @@ -30,5 +29,50 @@ namespace ICSharpCode.Reporting.Test public static string RepWithTwoItems { get {return nameSpace + rr;} } + + + public static void ShowDebug(IExportContainer exportContainer) + { + var visitor = new DebugVisitor(); + foreach (var item in exportContainer.ExportedItems) { + var container = item as IExportContainer; + var acceptor = item as IAcceptor; + if (container != null) { + if (acceptor != null) { + Console.WriteLine("----"); + acceptor.Accept(visitor); + } + ShowDebug(container); + } else { +// var b = item as IAcceptor; + if (acceptor != null) { + acceptor.Accept(visitor); + + } + } + } + } + /* + public static void ShowDebug(IExportContainer container) + { + var visitor = new DebugVisitor(); + foreach (var item in container.ExportedItems) { + if (item is IExportContainer) { + var a = item as IAcceptor; + if (a != null) { + Console.WriteLine("----"); + a.Accept(visitor); + } + ShowDebug(item as IExportContainer); + } else { + var b = item as IAcceptor; + if (b != null) { + b.Accept(visitor); + + } + } + } + } + */ } }