Browse Source

Better implementation of Visitor Pattern (Debug and Expression)

reports
Peter Forstmeier 13 years ago
parent
commit
57b144d7c2
  1. 23
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs
  2. 24
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs
  3. 32
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  4. 99
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs
  5. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs
  6. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs

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

@ -8,9 +8,7 @@ @@ -8,9 +8,7 @@
*/
using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Exporter
@ -18,7 +16,7 @@ namespace ICSharpCode.Reporting.Exporter @@ -18,7 +16,7 @@ namespace ICSharpCode.Reporting.Exporter
/// <summary>
/// Description of DebugExporter.
/// </summary>
public class DebugExporter:BaseExporter
class DebugExporter:BaseExporter
{
private DebugVisitor visitor;
@ -29,13 +27,22 @@ namespace ICSharpCode.Reporting.Exporter @@ -29,13 +27,22 @@ namespace ICSharpCode.Reporting.Exporter
public override void Run () {
Console.WriteLine(" DebugExporter with {0} Pages ",Pages.Count);
Console.WriteLine();
Console.WriteLine("Start DebugExporter with {0} Pages ",Pages.Count);
foreach (var page in Pages) {
ShowDebug("--",page);
IAcceptor ac = page as IAcceptor;
if (ac != null) {
visitor.Visit(page);
}
// RunInternal("--",page);
Console.WriteLine("-----------PageBreak---------");
}
Console.WriteLine("Finish DebugVisitor");
Console.WriteLine();
}
void ShowDebug(string header,IExportContainer container)
/*
void RunInternal(string header,IExportContainer container)
{
var leading = header;
Console.WriteLine();
@ -45,7 +52,7 @@ namespace ICSharpCode.Reporting.Exporter @@ -45,7 +52,7 @@ namespace ICSharpCode.Reporting.Exporter
var acceptor = item as IAcceptor;
if (exportContainer != null) {
if (exportContainer.ExportedItems.Count > 0) {
ShowDebug(leading = leading + "--",exportContainer);
RunInternal(leading = leading + "--",exportContainer);
acceptor.Accept(visitor);
// ShowDebug(leading = leading + "--",exportContainer);
leading = leading.Substring(0,leading.Length -2);
@ -64,6 +71,6 @@ namespace ICSharpCode.Reporting.Exporter @@ -64,6 +71,6 @@ namespace ICSharpCode.Reporting.Exporter
leading = leading.Substring(0, leading.Length - 2);
}
}
*/
}
}

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

@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Exporter.Visitors
@ -18,12 +17,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -18,12 +17,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
// http://www.remondo.net/strategy-pattern-example-csharp/
public class DebugVisitor : AbstractVisitor
class DebugVisitor : AbstractVisitor
{
public override void Visit(ExportPage page)
{
Console.WriteLine("<Page> {0} - {1} Items {2}",
page.Name,page.Location,page.BackColor);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
@ -33,22 +38,21 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -33,22 +38,21 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
}
public override void Visit(ExportContainer exportColumn)
{
Console.WriteLine();
// Console.WriteLine("<ExportContainer> {0} - {1} Items {2}",
// exportColumn.Name,exportColumn.Location,exportColumn.BackColor);
Console.WriteLine("{0} - {1} Items {2}",
Console.WriteLine("\t{0} - {1} Items {2}",
exportColumn.Name,exportColumn.Location,exportColumn.BackColor);
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
}
public override void Visit(ExportText exportColumn)
{
Console.WriteLine("<ExportText> {0} - {1}", exportColumn.Text,exportColumn.Location);
Console.WriteLine("\t\t<ExportText> {0} - {1}", exportColumn.Text,exportColumn.Location);
}
}
}

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

@ -3,39 +3,63 @@ @@ -3,39 +3,63 @@
using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Interpreter.Evaluator;
namespace ICSharpCode.Reporting.Exporter.Visitors
{
/// <summary>
/// Description of ExpressionVisitor.
/// </summary>
internal class ExpressionVisitor: AbstractVisitor
class ExpressionVisitor: AbstractVisitor
{
private readonly Collection<ExportPage> pages;
private readonly ExpressionEvaluatorGrammar grammar;
private readonly ExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages)
{
this.pages = pages;
grammar = new ExpressionEvaluatorGrammar();
evaluator = new ExpressionEvaluator(grammar);
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportColumn exportColumn)
{
Console.WriteLine("Visit Page ");
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportText exportColumn)
{
Console.WriteLine("ExpressionVisitor <{0}>",exportColumn.Name);
Console.WriteLine("\t\t<ExportText> {0} - {1}", exportColumn.Text,exportColumn.Location);
var result = evaluator.Evaluate("2 + 3");
Console.WriteLine("ExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportContainer exportColumn)
{
Console.WriteLine("ExpressionVisitor <{0}>",exportColumn.Name);
Console.WriteLine("\t{0} - {1} Items {2}",
exportColumn.Name,exportColumn.Location,exportColumn.BackColor);
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
var result = evaluator.Evaluate("2 * 10");
Console.WriteLine("ExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
}
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportPage page)
{
Console.WriteLine("ExpressionVisitor page <{0}>",page.PageInfo.PageNumber);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
var result = evaluator.Evaluate("5 * 10");
// Console.WriteLine("ExpressionVisitor <{0} - {1}>",exportColumn.Name,result);
Console.WriteLine("ExpressionVisitor page <{0}> {1}",page.PageInfo.PageNumber,result);
}
}
}

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

@ -27,13 +27,109 @@ namespace ICSharpCode.Reporting.Expressions @@ -27,13 +27,109 @@ namespace ICSharpCode.Reporting.Expressions
public override void Run()
{
Console.WriteLine();
Console.WriteLine("Start ExpressionVisitor");
foreach (var page in Pages) {
InternalRun(page);
var acceptor = page as IAcceptor;
acceptor.Accept(visitor);
// RunInternal(page);
}
Console.WriteLine("Finish ExpressionVisitor");
Console.WriteLine();
}
// "Visitor"
// http://irony.codeplex.com/discussions/213938
//
// http://irony.codeplex.com/discussions/35310
/*
void RunInternal(IExportContainer container)
{
// 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) {
// acceptor.Accept(visitor);
bRunInternal(exportContainer.ExportedItems);
acceptor.Accept(visitor);
// ShowDebug(leading = leading + "--",exportContainer);
}
}
// acceptor.Accept(visitor);
}
}
*/
/*
void bRunInternal(List<IExportColumn> list)
{
// Console.WriteLine();
// Console.WriteLine("{0}{1}",leading,container.Name);
foreach (var item in list) {
var exportContainer = item as IExportContainer;
var acceptor = item as IAcceptor;
if (exportContainer != null) {
if (exportContainer.ExportedItems.Count > 0) {
acceptor.Accept(visitor);
RunInternal(exportContainer);
// ShowDebug(leading = leading + "--",exportContainer);
}
}
acceptor.Accept(visitor);
}
}
*/
/*
void bRunInternal(IExportContainer container)
{
// 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) {
acceptor.Accept(visitor);
RunInternal(exportContainer);
// ShowDebug(leading = leading + "--",exportContainer);
}
}
acceptor.Accept(visitor);
}
}
*/
/*
//Items first, then container
void aRunInternal(IExportContainer container)
{
// 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(exportContainer);
acceptor.Accept(visitor);
// ShowDebug(leading = leading + "--",exportContainer);
}
}
acceptor.Accept(visitor);
}
}
*/
/*
void InternalRun(ExportPage page)
{
page.Accept(visitor);
@ -43,5 +139,6 @@ namespace ICSharpCode.Reporting.Expressions @@ -43,5 +139,6 @@ namespace ICSharpCode.Reporting.Expressions
acceptor.Accept(visitor);
}
}
*/
}
}

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
*/
using System;
using System.Linq;
using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Interfaces;
@ -29,6 +30,8 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -29,6 +30,8 @@ namespace ICSharpCode.Reporting.PageBuilder
base.BuildExportList();
BuildDetail();
base.AddPage(CurrentPage);
var d = new DebugExporter(Pages);
d.Run();
var er = new ExpressionRunner(Pages);
er.Run();
}

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs

@ -13,7 +13,6 @@ using System.Reflection; @@ -13,7 +13,6 @@ using System.Reflection;
using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using NUnit.Framework;

Loading…
Cancel
Save