Browse Source

Refactor Visitors

reports
Peter Forstmeier 12 years ago
parent
commit
1077d96967
  1. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionSource.cs
  2. 40
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs
  3. 41
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs
  4. 15
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs
  5. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  6. 36
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/FormatVisitor.cs
  7. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs
  8. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs
  9. 24
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs
  10. 15
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs
  11. 9
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs
  12. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseDataItem.cs
  13. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs
  14. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  15. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  16. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs
  17. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfVisitor.cs
  18. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs
  19. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestReports/FromList.srd
  20. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionSource.cs

@ -144,7 +144,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -144,7 +144,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
item.DBValue = String.Empty;
var p = listProperties.Find(item.ColumnName,true);
item.DBValue = p.GetValue(Current).ToString();
Console.WriteLine("Fill {0}",item.DBValue);
// Console.WriteLine("Fill {0}",item.DBValue);
if (String.IsNullOrEmpty(item.DataType)) {
item.DataType = p.PropertyType.ToString();
}

40
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs

@ -29,47 +29,9 @@ namespace ICSharpCode.Reporting.Exporter @@ -29,47 +29,9 @@ namespace ICSharpCode.Reporting.Exporter
public override void Run () {
Console.WriteLine();
Console.WriteLine("Start DebugExporter with {0} Pages ",Pages.Count);
foreach (var page in Pages) {
IAcceptor ac = page as IAcceptor;
if (ac != null) {
visitor.Visit(page);
}
Console.WriteLine("-----------PageBreak---------");
}
visitor.Run(Pages);
Console.WriteLine("Finish DebugVisitor");
Console.WriteLine();
}
/*
void RunInternal(string header,IExportContainer container)
{
var leading = header;
Console.WriteLine();
Console.WriteLine("{0}{1}",leading,container.Name);
foreach (var item in container.ExportedItems) {
var exportContainer = item as IExportContainer;
var acceptor = item as IAcceptor;
if (exportContainer != null) {
if (exportContainer.ExportedItems.Count > 0) {
RunInternal(leading = leading + "--",exportContainer);
acceptor.Accept(visitor);
// ShowDebug(leading = leading + "--",exportContainer);
leading = leading.Substring(0,leading.Length -2);
}
} else {
ShowSingleEntry(leading, acceptor);
}
}
}
void ShowSingleEntry(string leading, IAcceptor acceptor)
{
if (acceptor != null) {
acceptor.Accept(visitor);
leading = leading.Substring(0, leading.Length - 2);
}
}
*/
}
}

41
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Exporter.Visitors
@ -14,10 +15,40 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -14,10 +15,40 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// <summary>
/// Description of AbstractVisitor.
/// </summary>
public abstract class AbstractVisitor : IVisitor
{
public abstract void Visit(ExportPage page);
public abstract void Visit(ExportContainer exportColumn);
public abstract void Visit(ExportText exportColumn);
///
class AbstractVisitor : IVisitor{
public virtual void Run (Collection<ExportPage> pages) {
if (pages == null)
throw new ArgumentNullException("pages");
Pages = pages;
foreach (var page in pages) {
Visit(page);
Console.WriteLine("-----------AbstractVisitor - PageBreak---------");
}
}
public virtual void Visit (ExportPage page) {
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
public virtual void Visit (ExportContainer exportContainer) {
foreach (var element in exportContainer.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
public virtual void Visit(ExportText exportColumn){
}
protected Collection<ExportPage> Pages {get; private set;}
}
}

15
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs

@ -19,27 +19,22 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -19,27 +19,22 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
class DebugVisitor : AbstractVisitor
{
public override void Visit(ExportPage page)
{
Console.WriteLine();
Console.WriteLine("<Page> {0} - {1} Items {2}",
page.Name,page.Location,page.BackColor);
foreach (var element in page.ExportedItems) {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
}
base.Visit(page);
}
public override void Visit(ExportContainer exportColumn)
public override void Visit(ExportContainer exportContainer)
{
Console.WriteLine();
Console.WriteLine("\t{0} - {1} Items {2}",
exportColumn.Name,exportColumn.Location,exportColumn.BackColor);
foreach (var element in exportColumn.ExportedItems) {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
}
exportContainer.Name,exportContainer.Location,exportContainer.BackColor);
base.Visit(exportContainer);
}

20
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs

@ -16,20 +16,12 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -16,20 +16,12 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// </summary>
class ExpressionVisitor: AbstractVisitor
{
readonly Collection<ExportPage> pages;
readonly ReportingLanguageGrammer grammar;
readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages,
ReportSettings reportSettings,
CollectionSource dataSource):this(reportSettings,dataSource)
{
this.pages = pages;
}
internal ExpressionVisitor(ReportSettings reportSettings,CollectionSource dataSource) {
public ExpressionVisitor(ReportSettings reportSettings,CollectionSource dataSource) {
grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar);
evaluator.AddReportSettings(reportSettings);
@ -43,20 +35,14 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -43,20 +35,14 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
public override void Visit(ExportPage page)
{
evaluator.AddPageInfo(page.PageInfo);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
base.Visit(page);
}
public override void Visit(ExportContainer exportContainer)
{
evaluator.AddCurrentContainer(exportContainer);
foreach (var element in exportContainer.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
base.Visit(exportContainer);
}

36
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/FormatVisitor.cs

@ -10,42 +10,14 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -10,42 +10,14 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// <summary>
/// Description of FormatVisitor.
/// </summary>
public class FormatVisitor: AbstractVisitor
class FormatVisitor: AbstractVisitor
{
readonly Collection<ExportPage> pages;
public FormatVisitor(Collection<ExportPage> pages)
{
if (pages == null)
throw new ArgumentNullException("pages");
this.pages = pages;
Console.WriteLine("Start FormatVisitor");
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportPage page)
{
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportContainer exportColumn)
{
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportText exportColumn)
public override void Visit(ExportText exportColumn)
{
if (!String.IsNullOrEmpty(exportColumn.FormatString)) {
Console.WriteLine("Format {0} - {1}",exportColumn.Name,exportColumn.Text);
exportColumn.Text = StandardFormatter.FormatOutput(exportColumn.Text,
exportColumn.FormatString,
"System.Int16",
"no format");
StandardFormatter.FormatOutput(exportColumn);
}
}
}

20
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -22,7 +22,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
///
class WpfVisitor: AbstractVisitor {
private readonly FixedDocumentCreator documentCreator;
readonly FixedDocumentCreator documentCreator;
FixedPage fixedPage;
Canvas currentCanvas;
@ -36,22 +36,16 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -36,22 +36,16 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
Console.WriteLine("WpfVisitor page <{0}>",page.PageInfo.PageNumber);
fixedPage = FixedDocumentCreator.CreateFixedPage(page);
FixedPage = fixedPage;
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
base.Visit(page);
}
public override void Visit(ExportContainer exportColumn)
public override void Visit(ExportContainer exportContainer)
{
Console.WriteLine("\tWpfVisitor <{0}>",exportColumn.Name);
currentCanvas = documentCreator.CreateContainer(exportColumn);
CanvasHelper.SetPosition(currentCanvas,new Point(exportColumn.Location.X,exportColumn.Location.Y));
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
Console.WriteLine("\tWpfVisitor <{0}>",exportContainer.Name);
currentCanvas = documentCreator.CreateContainer(exportContainer);
CanvasHelper.SetPosition(currentCanvas,new Point(exportContainer.Location.X,exportContainer.Location.Y));
base.Visit(exportContainer);
fixedPage.Children.Add(currentCanvas);
}

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.Reporting.Exporter{ @@ -21,7 +21,7 @@ namespace ICSharpCode.Reporting.Exporter{
///
class WpfExporter:BaseExporter {
private readonly WpfVisitor visitor;
readonly WpfVisitor visitor;
public WpfExporter(Collection<ExportPage> pages):base(pages){
visitor = new WpfVisitor();

24
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs

@ -13,31 +13,33 @@ namespace ICSharpCode.Reporting.Expressions @@ -13,31 +13,33 @@ namespace ICSharpCode.Reporting.Expressions
/// <summary>
/// Description of ExpressionRunner.
/// </summary>
class ExpressionRunner:BaseExporter
class ExpressionRunner
{
// http://www.killswtch.net/2013/08/01/time-arithmetic-with-irony/
// http://blog.miraclespain.com/archive/2009/Oct-07.html
//
private readonly ExpressionVisitor visitor;
private readonly CollectionSource dataSource;
readonly Collection<ExportPage> pages;
readonly ReportSettings reportSettings;
readonly CollectionSource dataSource;
public ExpressionRunner(Collection<ExportPage> pages,ReportSettings reportSettings,CollectionSource dataSource):base(pages)
public ExpressionRunner(Collection<ExportPage> pages,ReportSettings reportSettings,CollectionSource dataSource)
{
this.pages = pages;
this.dataSource = dataSource;
visitor = new ExpressionVisitor (Pages,reportSettings,dataSource);
visitor.Evaluator.Globals.Add("DataSource",dataSource);
this.reportSettings = reportSettings;
}
public override void Run()
public void Run()
{
Console.WriteLine();
Console.WriteLine("Start ExpressionVisitor");
foreach (var page in Pages) {
var acceptor = page as IAcceptor;
acceptor.Accept(visitor);
}
var visitor = new ExpressionVisitor (reportSettings,dataSource);
visitor.Evaluator.Globals.Add("DataSource",dataSource);
visitor.Run(pages);
Console.WriteLine("Finish ExpressionVisitor");
Console.WriteLine();
}

15
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Globalization;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Globals
{
@ -10,8 +11,14 @@ namespace ICSharpCode.Reporting.Globals @@ -10,8 +11,14 @@ namespace ICSharpCode.Reporting.Globals
/// </summary>
class StandardFormatter
{
public static void FormatOutput (IExportText textColumn) {
if (!String.IsNullOrEmpty(textColumn.FormatString)) {
TypeCode typeCode = TypeHelper.TypeCodeFromString(textColumn.DataType);
textColumn.Text = FormatItem(textColumn.Text,textColumn.FormatString,typeCode);
}
}
/*
public static string FormatOutput(string valueToFormat,string format,
string dataType, string nullValue )
{
@ -26,10 +33,12 @@ namespace ICSharpCode.Reporting.Globals @@ -26,10 +33,12 @@ namespace ICSharpCode.Reporting.Globals
TypeCode typeCode = TypeHelper.TypeCodeFromString(dataType);
return FormatItem(valueToFormat,format,typeCode,nullValue);
}
*/
// private static string FormatItem (string valueToFormat,string format,
// TypeCode typeCode,string nullValue)
private static string FormatItem (string valueToFormat,string format,
TypeCode typeCode,string nullValue)
TypeCode typeCode)
{
string retValue = String.Empty;

9
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs

@ -58,10 +58,11 @@ namespace ICSharpCode.Reporting.Globals @@ -58,10 +58,11 @@ namespace ICSharpCode.Reporting.Globals
}
public static TypeCode TypeCodeFromString (string type) {
if (String.IsNullOrEmpty(type)) {
throw new ArgumentNullException("type");
}
return Type.GetTypeCode( Type.GetType(type));
if (type == null)
type = "System.String";
var x = Type.GetTypeCode( Type.GetType(type));
return x;
}
}
}

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseDataItem.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.Reporting.Items @@ -34,7 +34,7 @@ namespace ICSharpCode.Reporting.Items
public virtual string ColumnName {get;set;}
public string DataType {get;set;}
// public string DataType {get;set;}
}
}

20
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs

@ -23,6 +23,8 @@ namespace ICSharpCode.Reporting.Items @@ -23,6 +23,8 @@ namespace ICSharpCode.Reporting.Items
Font Font {get;set;}
string Text {get;set;}
string FormatString {get;set;}
string DataType {get;set;}
}
public class BaseTextItem:PrintableItem,ITextItem
@ -39,6 +41,22 @@ namespace ICSharpCode.Reporting.Items @@ -39,6 +41,22 @@ namespace ICSharpCode.Reporting.Items
public string FormatString {get;set;}
string dataType;
public string DataType
{
get {
if (String.IsNullOrEmpty(this.dataType)) {
this.dataType = typeof(System.String).ToString();
}
return dataType;
}
set {
dataType = value;
}
}
public override IExportColumn CreateExportColumn()
{
var ex = new ExportText();
@ -51,7 +69,7 @@ namespace ICSharpCode.Reporting.Items @@ -51,7 +69,7 @@ namespace ICSharpCode.Reporting.Items
ex.Font = Font;
ex.Text = Text;
ex.FormatString = FormatString;
ex.DataType = DataType;
ex.CanGrow = CanGrow;
return ex;
}

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -194,15 +194,15 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -194,15 +194,15 @@ namespace ICSharpCode.Reporting.PageBuilder
protected void RunExpressions(ReportSettings reportsettings,CollectionSource dataSource)
{
var er = new ExpressionRunner(Pages,reportsettings,dataSource);
er.Run();
var expressionRunner = new ExpressionRunner(Pages,reportsettings,dataSource);
expressionRunner.Run();
}
protected void RunDebugVisitor()
{
var d = new DebugExporter(Pages);
d.Run();
var debugExporter = new DebugExporter(Pages);
debugExporter.Run();
}
#endregion

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -43,12 +43,10 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -43,12 +43,10 @@ namespace ICSharpCode.Reporting.PageBuilder
base.AddPage(CurrentPage);
UpdatePageInfo();
RunExpressions(ReportModel.ReportSettings,DataSource);
var formatVisitor = new FormatVisitor(Pages);
// formatVisitor.Run();
foreach (var element in Pages) {
formatVisitor.Visit(element);
}
var formatVisitor = new FormatVisitor();
formatVisitor.Run(Pages);
}

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns @@ -23,6 +23,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
{
Font Font {get;set;}
string Text {get;set;}
string DataType {get;set;}
string FormatString {get;set;}
}
@ -46,6 +47,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns @@ -46,6 +47,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
public string FormatString {get;set;}
public string DataType {get;set;}
public override ICSharpCode.Reporting.Arrange.IMeasurementStrategy MeasurementStrategy()
{
return new TextBasedMeasurementStrategy();

7
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfVisitor.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -9,7 +9,7 @@ namespace ICSharpCode.Reporting.Pdf
/// <summary>
/// Description of PdfVisitor.
/// </summary>
public class PdfVisitor: AbstractVisitor
class PdfVisitor: AbstractVisitor
{
public PdfVisitor()
{
@ -18,10 +18,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -18,10 +18,7 @@ namespace ICSharpCode.Reporting.Pdf
public override void Visit(ExportPage page)
{
Console.WriteLine("Pdf_Visitor page <{0}>",page.PageInfo.PageNumber);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
base.Visit(page);
}
public override void Visit(ExportContainer exportColumn)

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs

@ -35,7 +35,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer @@ -35,7 +35,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer
Document = CreateFixedDocument(reportSettings);
// var wpfExporter = new old_WpfExporter(pages);
var wpfExporter = new WpfExporter(pages);
wpfExporter.Run();
this.document = wpfExporter.Document;

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/TestReports/FromList.srd

@ -88,7 +88,7 @@ @@ -88,7 +88,7 @@
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<DataType>System.Int</DataType>
<DataType>System.Decimal</DataType>
<RTL>No</RTL>
<Text>BaseDataItem2</Text>
<DrawBorder>False</DrawBorder>

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs

@ -66,7 +66,8 @@ namespace ICSharpCode.Reports.Core.Globals @@ -66,7 +66,8 @@ namespace ICSharpCode.Reports.Core.Globals
"System.DateTime",
"System.TimeSpan",
"System.Decimal",
"System.Int"};
"System.Int16",
"System.Int32"};
#endregion
#region Aggregates

Loading…
Cancel
Save