Browse Source

Evaluate inside Container

reports
Peter Forstmeier 13 years ago
parent
commit
4492bcbddf
  1. 23
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  2. 12
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs
  3. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs
  4. 24
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs

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

@ -6,7 +6,6 @@ using ICSharpCode.Reporting.Expressions; @@ -6,7 +6,6 @@ using ICSharpCode.Reporting.Expressions;
using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using Irony.Interpreter.Evaluator;
namespace ICSharpCode.Reporting.Exporter.Visitors
{
@ -18,7 +17,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -18,7 +17,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
private readonly Collection<ExportPage> pages;
private readonly ReportingLanguageGrammer grammar;
private readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(Collection<ExportPage> pages,ReportSettings reportSettings):this(reportSettings)
{
this.pages = pages;
@ -30,6 +29,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -30,6 +29,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
evaluator.App.Globals.Add("ReportSettings", reportSettings);
}
public override void Visit(ExportPage page)
{
var result = evaluator.Evaluate("5 * 10");
@ -39,12 +39,10 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -39,12 +39,10 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
ac.Accept(this);
}
}
public override void Visit(ExportContainer exportColumn)
{
var result = evaluator.Evaluate("2 * 10");
Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
@ -54,16 +52,23 @@ namespace ICSharpCode.Reporting.Exporter.Visitors @@ -54,16 +52,23 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
public override void Visit(ExportText exportColumn)
{
if (exportColumn.Text.StartsWith("=")) {
if (ExpressionHelper.CanEvaluate(exportColumn.Text)) {
try {
var str = ExpressionHelper.ExtractExpressionPart(exportColumn.Text);
var result = evaluator.Evaluate(str);
exportColumn.Text = result.ToString();
object result = Evaluate(exportColumn);
exportColumn.Text = result.ToString();
} catch (Exception e) {
var s = String.Format("SharpReport.Exprssions -> {0}",e.Message);
Console.WriteLine(s);
}
}
}
object Evaluate(ExportText exportColumn)
{
var str = ExpressionHelper.ExtractExpressionPart(exportColumn.Text);
var result = evaluator.Evaluate(str);
return result;
}
}
}

12
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs

@ -11,14 +11,20 @@ namespace ICSharpCode.Reporting.Expressions @@ -11,14 +11,20 @@ namespace ICSharpCode.Reporting.Expressions
/// </summary>
class ExpressionHelper
{
public ExpressionHelper()
{
}
public static string ExtractExpressionPart (string src)
{
char v = Convert.ToChar("=",CultureInfo.CurrentCulture );
return StringHelper.RightOf(src,v).Trim();
}
public static bool CanEvaluate (string expression)
{
if ((!String.IsNullOrEmpty(expression)) && (expression.StartsWith("=",StringComparison.InvariantCultureIgnoreCase))) {
return true;
}
return false;
}
}
}

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

@ -23,9 +23,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony @@ -23,9 +23,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony
get { return App.Globals; }
}
//Default constructor, creates default evaluator
public ReportingExpressionEvaluator() : this(new ExpressionEvaluatorGrammar()) {
}
//Default constructor, creates default evaluator
public ReportingExpressionEvaluator(InterpretedLanguageGrammar grammar) {

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

@ -32,14 +32,6 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -32,14 +32,6 @@ namespace ICSharpCode.Reporting.Test.Expressions
expressionVisitor.Visit(collection[0]);
}
[Test]
public void SimpleMath() {
collection[0].Text = "=3 + 6";
expressionVisitor.Visit(collection[0]);
Assert.That(collection[0].Text,Is.EqualTo("9"));
var res = Convert.ToInt32(collection[0].Text);
Assert.That(res is int);
}
[Test]
@ -67,6 +59,22 @@ namespace ICSharpCode.Reporting.Test.Expressions @@ -67,6 +59,22 @@ namespace ICSharpCode.Reporting.Test.Expressions
#endregion
#region Convert inside Container
[Test]
public void SimpleStringHandlingInContainer () {
var script = "='Sharpdevelop' + ' is great'";
collection[0].Text = script;
var exportContainer = new ExportContainer();
exportContainer.ExportedItems.Add(collection[0]);
expressionVisitor.Visit(exportContainer);
var resultColumn = (ExportText)exportContainer.ExportedItems[0];
Assert.That(resultColumn.Text,Is.EqualTo("Sharpdevelop is great"));
}
#endregion
#region System.Math
[Test]

Loading…
Cancel
Save