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 @@ @@ -113,6 +113,7 @@
<Compile Include="Src\ExportRenderer\FixedDocumentCreator.cs" />
<Compile Include="Src\Expressions\ExpressionHelper.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\ExpressionEvaluator.cs" />
<Compile Include="Src\Expressions\Irony\ReportingLanguageGrammer.cs" />

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

@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Interpreter.Evaluator;
@ -14,19 +16,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -14,19 +16,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
class ExpressionVisitor: AbstractVisitor
{
private readonly Collection<ExportPage> pages;
private readonly ExpressionEvaluatorGrammar grammar;
private readonly ExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages)
private readonly ReportingLanguageGrammer grammar;
private readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages,ReportSettings reportSettings):this(reportSettings)
{
this.pages = pages;
grammar = new ExpressionEvaluatorGrammar();
evaluator = new ExpressionEvaluator(grammar);
}
internal ExpressionVisitor() {
grammar = new ExpressionEvaluatorGrammar();
evaluator = new ExpressionEvaluator(grammar);
internal ExpressionVisitor(ReportSettings reportSettings) {
grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar);
evaluator.App.Globals.Add("ReportSettings", reportSettings);
}
public override void Visit(ExportPage page)
@ -44,8 +45,6 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -44,8 +45,6 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
{
var result = evaluator.Evaluate("2 * 10");
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) {
var ac = element as IAcceptor;
ac.Accept(this);

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

@ -4,6 +4,7 @@ using System; @@ -4,6 +4,7 @@ using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Expressions
@ -19,12 +20,12 @@ namespace ICSharpCode.Reporting.Expressions @@ -19,12 +20,12 @@ namespace ICSharpCode.Reporting.Expressions
//
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()
{
Console.WriteLine();

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

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

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

@ -53,7 +53,7 @@ namespace ICSharpCode.Reporting.Items @@ -53,7 +53,7 @@ namespace ICSharpCode.Reporting.Items
this.SortColumnsCollection = new SortColumnCollection();
GroupColumnCollection = new GroupColumnCollection();
// this.sqlParameters = new SqlParameterCollection();
// this.parameterCollection = new ParameterCollection();
ParameterCollection = new ParameterCollection();
// this.NoDataMessage = "No Data for this Report";
}
@ -137,6 +137,12 @@ namespace ICSharpCode.Reporting.Items @@ -137,6 +137,12 @@ namespace ICSharpCode.Reporting.Items
// [Browsable(true), Category("Base Settings")]
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 GroupColumnCollection GroupColumnCollection {get;private set;}

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

@ -18,6 +18,7 @@ using ICSharpCode.Reporting.Expressions; @@ -18,6 +18,7 @@ using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.Converter;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -207,9 +208,9 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -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();
}

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

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

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

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

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

@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using NUnit.Framework;
@ -76,17 +78,53 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -76,17 +78,53 @@ namespace ICSharpCode.Reporting.Test.Expressions
var res = Convert.ToDouble(collection[0].Text);
Assert.That(collection[0].Text,Is.EqualTo("11"));
}
#endregion
#region Parameters
[Test]
[Ignore]
public void aa () {
var script = "=Globals!UserName";
public void CanConcatParameter () {
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;
expressionVisitor.Visit(collection[0]);
Assert.That(collection[0].Text,Is.EqualTo("11"));
visitor.Visit(collection[0]);
Assert.That (collection[0].Text,Is.EqualTo("SharpDevelop is great"));
}
#endregion
ReportSettings CreateReportSettings(ParameterCollection parameters)
{
var reportSettings = new ReportSettings();
reportSettings.ParameterCollection.AddRange(parameters);
return reportSettings;
}
[SetUp]
public void CreateExportlist() {
collection = new Collection<ExportText>();
@ -98,7 +136,7 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -98,7 +136,7 @@ namespace ICSharpCode.Reporting.Test.Expressions
[TestFixtureSetUp]
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 @@ @@ -3,6 +3,7 @@
using System;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using NUnit.Framework;
namespace ICSharpCode.Reporting.Test.Expressions
@ -23,7 +24,8 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -23,7 +24,8 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = resultValue
}
);
evaluator.App.Globals.Add("parameters",parameters);
// evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param1";
var result = evaluator.Evaluate(script);
Assert.That (result,Is.EqualTo(resultValue));
@ -50,11 +52,16 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -50,11 +52,16 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = "Value for parameter2"
}
);
evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param2";
var result = evaluator.Evaluate(script);
Assert.That (result,Is.EqualTo(resultValue));
}
[Test]
@ -76,19 +83,27 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -76,19 +83,27 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = "great"
}
);
evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param1 + Parameters!param2 + Parameters!param3";
var result = evaluator.Evaluate(script);
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]
public void Initialize() {
grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar);
}
[TestFixtureSetUp]
public void Init()

Loading…
Cancel
Save