Browse Source

Integrate ParameterHandling in ExpressionVisitor

reports
Peter Forstmeier 13 years ago
parent
commit
f34b1dc128
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 21
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  3. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs
  4. 19
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs
  5. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs
  6. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs
  7. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  8. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  9. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs
  10. 50
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs
  11. 23
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/ParametersHandlingFixture.cs

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj

@ -113,6 +113,7 @@
<Compile Include="Src\ExportRenderer\FixedDocumentCreator.cs" /> <Compile Include="Src\ExportRenderer\FixedDocumentCreator.cs" />
<Compile Include="Src\Expressions\ExpressionHelper.cs" /> <Compile Include="Src\Expressions\ExpressionHelper.cs" />
<Compile Include="Src\Expressions\ExpressionRunner.cs" /> <Compile Include="Src\Expressions\ExpressionRunner.cs" />
<Compile Include="Src\Expressions\Irony\Ast\AstExtensions.cs" />
<Compile Include="Src\Expressions\Irony\Ast\ParametersCallNode.cs" /> <Compile Include="Src\Expressions\Irony\Ast\ParametersCallNode.cs" />
<Compile Include="Src\Expressions\Irony\ExpressionEvaluator.cs" /> <Compile Include="Src\Expressions\Irony\ExpressionEvaluator.cs" />
<Compile Include="Src\Expressions\Irony\ReportingLanguageGrammer.cs" /> <Compile Include="Src\Expressions\Irony\ReportingLanguageGrammer.cs" />

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

@ -3,6 +3,8 @@
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Interpreter.Evaluator; using Irony.Interpreter.Evaluator;
@ -14,19 +16,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
class ExpressionVisitor: AbstractVisitor class ExpressionVisitor: AbstractVisitor
{ {
private readonly Collection<ExportPage> pages; private readonly Collection<ExportPage> pages;
private readonly ExpressionEvaluatorGrammar grammar; private readonly ReportingLanguageGrammer grammar;
private readonly ExpressionEvaluator evaluator; private readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages) public ExpressionVisitor(Collection<ExportPage> pages,ReportSettings reportSettings):this(reportSettings)
{ {
this.pages = pages; this.pages = pages;
grammar = new ExpressionEvaluatorGrammar();
evaluator = new ExpressionEvaluator(grammar);
} }
internal ExpressionVisitor() { internal ExpressionVisitor(ReportSettings reportSettings) {
grammar = new ExpressionEvaluatorGrammar(); grammar = new ReportingLanguageGrammer();
evaluator = new ExpressionEvaluator(grammar); evaluator = new ReportingExpressionEvaluator(grammar);
evaluator.App.Globals.Add("ReportSettings", reportSettings);
} }
public override void Visit(ExportPage page) public override void Visit(ExportPage page)
@ -44,8 +45,6 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
{ {
var result = evaluator.Evaluate("2 * 10"); var result = evaluator.Evaluate("2 * 10");
Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
// Console.WriteLine("\t{0} - {1} Items {2}",
// exportColumn.Name,exportColumn.Location,exportColumn.BackColor);
foreach (var element in exportColumn.ExportedItems) { foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor; var ac = element as IAcceptor;
ac.Accept(this); ac.Accept(this);

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

@ -4,6 +4,7 @@ using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Expressions namespace ICSharpCode.Reporting.Expressions
@ -19,12 +20,12 @@ namespace ICSharpCode.Reporting.Expressions
// //
private readonly ExpressionVisitor visitor; private readonly ExpressionVisitor visitor;
public ExpressionRunner(Collection<ExportPage> pages):base(pages) public ExpressionRunner(Collection<ExportPage> pages,ReportSettings reportSettings):base(pages)
{ {
visitor = new ExpressionVisitor (Pages); visitor = new ExpressionVisitor (Pages,reportSettings);
} }
public override void Run() public override void Run()
{ {
Console.WriteLine(); Console.WriteLine();

19
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs

@ -0,0 +1,19 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Reporting.Items;
using Irony.Interpreter;
namespace ICSharpCode.Reporting.Expressions.Irony.Ast
{
/// <summary>
/// Description of AstExtensions.
/// </summary>
public static class AstExtensions
{
public static ParameterCollection GetParametersCollection (this ScriptThread thread){
var rs = (ReportSettings)thread.App.Globals["ReportSettings"];
return rs.ParameterCollection;
}
}
}

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs

@ -7,6 +7,7 @@ using Irony.Ast;
using Irony.Interpreter; using Irony.Interpreter;
using Irony.Interpreter.Ast; using Irony.Interpreter.Ast;
using Irony.Parsing; using Irony.Parsing;
using ICSharpCode.Reporting.Items;
namespace ICSharpCode.Reporting.Expressions.Irony.Ast namespace ICSharpCode.Reporting.Expressions.Irony.Ast
{ {
@ -32,10 +33,9 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
{ {
BasicParameter result = null; BasicParameter result = null;
thread.CurrentNode = this; //standard prolog thread.CurrentNode = this; //standard prolog
var dictionary = (ParameterCollection)thread.App.Globals["parameters"]; var parametersCollection = thread.GetParametersCollection();
if (dictionary != null) { result = parametersCollection.Find(parameterNode.AsString);
result = dictionary.Find(parameterNode.AsString);
}
return result.ParameterValue; return result.ParameterValue;
} }
} }

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs

@ -53,7 +53,7 @@ namespace ICSharpCode.Reporting.Items
this.SortColumnsCollection = new SortColumnCollection(); this.SortColumnsCollection = new SortColumnCollection();
GroupColumnCollection = new GroupColumnCollection(); GroupColumnCollection = new GroupColumnCollection();
// this.sqlParameters = new SqlParameterCollection(); // this.sqlParameters = new SqlParameterCollection();
// this.parameterCollection = new ParameterCollection(); ParameterCollection = new ParameterCollection();
// this.NoDataMessage = "No Data for this Report"; // this.NoDataMessage = "No Data for this Report";
} }
@ -137,6 +137,12 @@ namespace ICSharpCode.Reporting.Items
// [Browsable(true), Category("Base Settings")] // [Browsable(true), Category("Base Settings")]
public GlobalEnums.ReportType ReportType {get;set;} public GlobalEnums.ReportType ReportType {get;set;}
// [Category("Parameters")]
// [EditorAttribute ( typeof(ParameterCollectionEditor),
// typeof(System.Drawing.Design.UITypeEditor) )]
public ParameterCollection ParameterCollection {get; private set;}
public SortColumnCollection SortColumnsCollection {get;private set;} public SortColumnCollection SortColumnsCollection {get;private set;}
public GroupColumnCollection GroupColumnCollection {get;private set;} public GroupColumnCollection GroupColumnCollection {get;private set;}

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

@ -18,6 +18,7 @@ using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.Converter; using ICSharpCode.Reporting.PageBuilder.Converter;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -207,9 +208,9 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
protected void RunExpressions() protected void RunExpressions(ReportSettings reportsettings)
{ {
var er = new ExpressionRunner(Pages); var er = new ExpressionRunner(Pages,reportsettings);
er.Run(); er.Run();
} }

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

@ -39,7 +39,7 @@ namespace ICSharpCode.Reporting.PageBuilder
BuildDetail(); BuildDetail();
base.BuildReportFooter(); base.BuildReportFooter();
base.AddPage(CurrentPage); base.AddPage(CurrentPage);
RunExpressions(); RunExpressions(ReportModel.ReportSettings);
} }
void BuildDetail() void BuildDetail()

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

@ -32,7 +32,7 @@ namespace ICSharpCode.Reporting.PageBuilder
base.AddPage(CurrentPage); base.AddPage(CurrentPage);
RunDebugVisitor(); RunDebugVisitor();
RunExpressions(); RunExpressions(ReportModel.ReportSettings);
} }

50
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs

@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using NUnit.Framework; using NUnit.Framework;
@ -76,17 +78,53 @@ namespace ICSharpCode.Reporting.Test.Expressions
var res = Convert.ToDouble(collection[0].Text); var res = Convert.ToDouble(collection[0].Text);
Assert.That(collection[0].Text,Is.EqualTo("11")); Assert.That(collection[0].Text,Is.EqualTo("11"));
} }
#endregion
#region Parameters
[Test] [Test]
[Ignore] public void CanConcatParameter () {
public void aa () {
var script = "=Globals!UserName"; var parameters = new ParameterCollection();
parameters.Add(new BasicParameter() {
ParameterName = "param1",
ParameterValue = "SharpDevelop"
}
);
parameters.Add(new BasicParameter() {
ParameterName = "param2",
ParameterValue = " is "
}
);
parameters.Add(new BasicParameter() {
ParameterName = "param3",
ParameterValue = "great"
}
);
var reportSettings = CreateReportSettings(parameters);
var visitor = new ExpressionVisitor(reportSettings);
var script = "=Parameters!param1 + Parameters!param2 + Parameters!param3";
collection[0].Text = script; collection[0].Text = script;
expressionVisitor.Visit(collection[0]); visitor.Visit(collection[0]);
Assert.That(collection[0].Text,Is.EqualTo("11")); Assert.That (collection[0].Text,Is.EqualTo("SharpDevelop is great"));
} }
#endregion #endregion
ReportSettings CreateReportSettings(ParameterCollection parameters)
{
var reportSettings = new ReportSettings();
reportSettings.ParameterCollection.AddRange(parameters);
return reportSettings;
}
[SetUp] [SetUp]
public void CreateExportlist() { public void CreateExportlist() {
collection = new Collection<ExportText>(); collection = new Collection<ExportText>();
@ -98,7 +136,7 @@ namespace ICSharpCode.Reporting.Test.Expressions
[TestFixtureSetUp] [TestFixtureSetUp]
public void Setup() { public void Setup() {
expressionVisitor = new ExpressionVisitor(); expressionVisitor = new ExpressionVisitor(new ReportSettings());
} }
} }

23
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/ParametersHandlingFixture.cs

@ -3,6 +3,7 @@
using System; using System;
using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Expressions.Irony; using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using NUnit.Framework; using NUnit.Framework;
namespace ICSharpCode.Reporting.Test.Expressions namespace ICSharpCode.Reporting.Test.Expressions
@ -23,7 +24,8 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = resultValue ParameterValue = resultValue
} }
); );
evaluator.App.Globals.Add("parameters",parameters); // evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param1"; var script = "Parameters!param1";
var result = evaluator.Evaluate(script); var result = evaluator.Evaluate(script);
Assert.That (result,Is.EqualTo(resultValue)); Assert.That (result,Is.EqualTo(resultValue));
@ -50,11 +52,16 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = "Value for parameter2" ParameterValue = "Value for parameter2"
} }
); );
evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param2"; var script = "Parameters!param2";
var result = evaluator.Evaluate(script); var result = evaluator.Evaluate(script);
Assert.That (result,Is.EqualTo(resultValue)); Assert.That (result,Is.EqualTo(resultValue));
} }
[Test] [Test]
@ -76,19 +83,27 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = "great" ParameterValue = "great"
} }
); );
evaluator.App.Globals.Add("parameters",parameters); AddToGlobals(parameters);
var script = "Parameters!param1 + Parameters!param2 + Parameters!param3"; var script = "Parameters!param1 + Parameters!param2 + Parameters!param3";
var result = evaluator.Evaluate(script); var result = evaluator.Evaluate(script);
Assert.That (result,Is.EqualTo("SharpDevelop is great")); Assert.That (result,Is.EqualTo("SharpDevelop is great"));
} }
void AddToGlobals(ParameterCollection parameters)
{
var reportSettings = new ReportSettings();
reportSettings.ParameterCollection.AddRange(parameters);
evaluator.App.Globals.Add("ReportSettings", reportSettings);
}
[SetUp] [SetUp]
public void Initialize() { public void Initialize() {
grammar = new ReportingLanguageGrammer(); grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar); evaluator = new ReportingExpressionEvaluator(grammar);
} }
[TestFixtureSetUp] [TestFixtureSetUp]
public void Init() public void Init()

Loading…
Cancel
Save