Browse Source

Basic implementation of Fields!Fieldnames

reports
Peter Forstmeier 12 years ago
parent
commit
4f130ed11c
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 15
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  3. 25
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs
  4. 35
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/FieldsNode.cs
  5. 16
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs
  6. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs
  7. 10
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ReportingLanguageGrammer.cs
  8. 19
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs
  9. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/ParametersHandlingFixture.cs

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

@ -114,6 +114,7 @@ @@ -114,6 +114,7 @@
<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\FieldsNode.cs" />
<Compile Include="Src\Expressions\Irony\Ast\ParametersCallNode.cs" />
<Compile Include="Src\Expressions\Irony\ExpressionEvaluator.cs" />
<Compile Include="Src\Expressions\Irony\ReportingLanguageGrammer.cs" />

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

@ -6,6 +6,7 @@ using ICSharpCode.Reporting.Expressions; @@ -6,6 +6,7 @@ using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using ICSharpCode.Reporting.Expressions.Irony.Ast;
namespace ICSharpCode.Reporting.Exporter.Visitors
{
@ -14,19 +15,20 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -14,19 +15,20 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// </summary>
class ExpressionVisitor: AbstractVisitor
{
private readonly Collection<ExportPage> pages;
private readonly ReportingLanguageGrammer grammar;
private readonly ReportingExpressionEvaluator evaluator;
readonly Collection<ExportPage> pages;
readonly ReportingLanguageGrammer grammar;
readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages,ReportSettings reportSettings):this(reportSettings)
{
this.pages = pages;
}
internal ExpressionVisitor(ReportSettings reportSettings) {
grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar);
evaluator.App.Globals.Add("ReportSettings", reportSettings);
evaluator.AddReportSettings(reportSettings);
}
@ -41,9 +43,10 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -41,9 +43,10 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
}
public override void Visit(ExportContainer exportColumn)
public override void Visit(ExportContainer exportContainer)
{
foreach (var element in exportColumn.ExportedItems) {
evaluator.AddCurrentContainer(exportContainer);
foreach (var element in exportContainer.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}

25
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.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 ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Interpreter;
namespace ICSharpCode.Reporting.Expressions.Irony.Ast
@ -11,9 +12,33 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast @@ -11,9 +12,33 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
/// </summary>
public static class AstExtensions
{
#region Parameters
public static ParameterCollection GetParametersCollection (this ScriptThread thread){
var rs = (ReportSettings)thread.App.Globals["ReportSettings"];
return rs.ParameterCollection;
}
public static void AddReportSettings (this ReportingExpressionEvaluator app,ReportSettings reportSettings) {
if (reportSettings == null)
throw new ArgumentNullException("reportSettings");
app.Globals.Add("ReportSettings",reportSettings);
}
#endregion
#region current Container
public static void AddCurrentContainer (this ReportingExpressionEvaluator app,ExportContainer container){
if (container == null)
throw new ArgumentNullException("container");
app.Globals.Add("CurrentContainer",container);
}
public static ExportContainer GetCurrentContainer (this ScriptThread thread){
return (ExportContainer)thread.App.Globals["CurrentContainer"];
}
#endregion
}
}

35
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/FieldsNode.cs

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
// 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 System.Linq;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Ast;
using Irony.Interpreter;
using Irony.Interpreter.Ast;
using Irony.Parsing;
namespace ICSharpCode.Reporting.Expressions.Irony.Ast
{
/// <summary>
/// Description of FieldsNode.
/// </summary>
public class FieldsNode: AstNode
{
AstNode fieldNode;
public override void Init(AstContext context,ParseTreeNode treeNode)
{
base.Init(context, treeNode);
var nodes = treeNode.GetMappedChildNodes();
fieldNode = AddChild("Args", nodes[2]);
}
protected override object DoEvaluate(ScriptThread thread)
{
thread.CurrentNode = this; //standard prolog
var c = thread.GetCurrentContainer();
var cc = (ExportText)c.ExportedItems.Where(x => x.Name == fieldNode.AsString).FirstOrDefault();
return cc.Text;
}
}
}

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

@ -1,13 +1,11 @@ @@ -1,13 +1,11 @@
// 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.BaseClasses;
using Irony;
using Irony.Ast;
using Irony.Interpreter;
using Irony.Interpreter.Ast;
using Irony.Parsing;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.BaseClasses;
namespace ICSharpCode.Reporting.Expressions.Irony.Ast
{
@ -17,9 +15,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast @@ -17,9 +15,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
public class ParametersCallNode: AstNode
{
AstNode parameterNode;
public ParametersCallNode()
{
}
public override void Init(AstContext context, ParseTreeNode treeNode)
{
@ -32,11 +27,10 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast @@ -32,11 +27,10 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
protected override object DoEvaluate(ScriptThread thread)
{
BasicParameter result = null;
thread.CurrentNode = this; //standard prolog
var parametersCollection = thread.GetParametersCollection();
result = parametersCollection.Find(parameterNode.AsString);
return result.ParameterValue;
thread.CurrentNode = this; //standard prolog
var parametersCollection = thread.GetParametersCollection();
result = parametersCollection.Find(parameterNode.AsString);
return result.ParameterValue;
}
}
}

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs

@ -3,7 +3,6 @@ @@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
using Irony.Interpreter;
using Irony.Interpreter.Evaluator;
using Irony.Parsing;
namespace ICSharpCode.Reporting.Expressions.Irony

10
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ReportingLanguageGrammer.cs

@ -55,6 +55,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -55,6 +55,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
// SharpReporting
var ParametersSection = new NonTerminal("ParametersCall",typeof(ParametersCallNode));
var FieldsSection = new NonTerminal("FieldsCall",typeof(FieldsNode));
// end of SharpReporting
@ -74,9 +75,9 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -74,9 +75,9 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
var Program = new NonTerminal("Program", typeof(StatementListNode));
// 3. BNF rules
Expr.Rule = Term | UnExpr | BinExpr | PrefixIncDec | PostfixIncDec | TernaryIfExpr |
ParametersSection;
Expr.Rule = Term | UnExpr | BinExpr | PrefixIncDec | PostfixIncDec | TernaryIfExpr
| ParametersSection
| FieldsSection;
Term.Rule = number | ParExpr | stringLit | FunctionCall | identifier | MemberAccess | IndexedAccess;
ParExpr.Rule = "(" + Expr + ")";
@ -98,7 +99,8 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -98,7 +99,8 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
// SharpReporting
ParametersSection.Rule = ToTerm("Parameters") + "!" + identifier;
FieldsSection.Rule = ToTerm("Fields") + "!" + identifier;
// end of SharpReporting
FunctionCall.NodeCaptionTemplate = "call #{0}(...)";

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

@ -124,7 +124,26 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -124,7 +124,26 @@ namespace ICSharpCode.Reporting.Test.Expressions
#endregion
#region Fields
[Test]
public void fields() {
var script = "=Fields!myfield";
collection[0].Text = script;
collection.Add(new ExportText()
{
Text = "hi from Field",
Name = "myfield"
});
var visitor = new ExpressionVisitor(new ReportSettings());
var exportContainer = new ExportContainer();
exportContainer.ExportedItems.Add(collection[0]);
exportContainer.ExportedItems.Add(collection[1]);
visitor.Visit(exportContainer);
Assert.That (collection[0].Text,Is.EqualTo("hi from Field"));
}
#endregion
ReportSettings CreateReportSettings(ParameterCollection parameters)
{
var reportSettings = new ReportSettings();

7
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.Expressions.Irony.Ast;
using ICSharpCode.Reporting.Items;
using NUnit.Framework;
@ -24,7 +25,6 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -24,7 +25,6 @@ namespace ICSharpCode.Reporting.Test.Expressions
ParameterValue = resultValue
}
);
// evaluator.App.Globals.Add("parameters",parameters);
AddToGlobals(parameters);
var script = "Parameters!param1";
var result = evaluator.Evaluate(script);
@ -62,8 +62,6 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -62,8 +62,6 @@ namespace ICSharpCode.Reporting.Test.Expressions
}
[Test]
public void CanConcatParameter () {
var parameters = new ParameterCollection();
@ -94,7 +92,8 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -94,7 +92,8 @@ namespace ICSharpCode.Reporting.Test.Expressions
{
var reportSettings = new ReportSettings();
reportSettings.ParameterCollection.AddRange(parameters);
evaluator.App.Globals.Add("ReportSettings", reportSettings);
// evaluator.App.Globals.Add("ReportSettings", reportSettings);
evaluator.AddReportSettings(reportSettings);
}

Loading…
Cancel
Save