From 5d2f1e446bcd0c6edee60eb91f86fe968249de07 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Sat, 5 Jun 2010 14:13:57 +0000 Subject: [PATCH] Simple FieldReference is working git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/reports@5913 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../AggregateFunctions/AggregateFunction.cs | 10 +++-- .../ReportingService/FieldReference.cs | 38 +++++++++++++--- .../Project/old_Exporter/BasePager.cs | 2 + .../old_Exporter/Converters/BaseConverter.cs | 34 ++++++++++++++- .../old_Exporter/Converters/RowConverter.cs | 7 ++- .../old_Exporter/Converters/TableConverter.cs | 8 +++- .../IntegrationTests/ConcatFieldsFixture.cs | 43 +++++++++++++------ 7 files changed, 114 insertions(+), 28 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs index 45aa22dc07..d58953181f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs @@ -1,11 +1,13 @@ -using ICSharpCode.Reports.Core; -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Data; -using SimpleExpressionEvaluator.Evaluation; using System.Globalization; +using ICSharpCode.Reports.Core; +using ICSharpCode.Reports.Core.Interfaces; +using SimpleExpressionEvaluator.Evaluation; + namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions { [NodeType(ExpressionNodeType.Function)] @@ -170,7 +172,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions private IDataNavigator NavigatorFromContext (IExpressionContext context) { - SinglePage p = context.ContextObject as SinglePage; + ISinglePage p = context.ContextObject as ISinglePage; if (p != null) { return p.IDataNavigator; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs index 76a8bfc835..528c46a4a7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs @@ -7,11 +7,15 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using ICSharpCode.Reports.Core; +using ICSharpCode.Reports.Core.Interfaces; +using SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions; +using SimpleExpressionEvaluator.Utilities; namespace SimpleExpressionEvaluator.Compilation.Functions.ReportingService { [Tokens("Fields","fields")] - public class FieldReference:Function + public class FieldReference:AggregateFunction { public FieldReference () { @@ -21,14 +25,36 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.ReportingService get { return 1; } } - public override Type ReturnType { - get { return base.ReturnType; } - } - protected override string EvaluateFunction(params object[] args) + public override string Evaluate(SimpleExpressionEvaluator.Evaluation.IExpressionContext context) { - return Environment.UserName; + ISinglePage p = context.ContextObject as SinglePage; + Variable v = Arguments[0] as Variable; + if (p.IDataNavigator.CurrentRow > -1) { + AvailableFieldsCollection avc = p.IDataNavigator.AvailableFields; + + AbstractColumn item = avc.Find(v.VariableName.ToString()); + CurrentItemsCollection cic = p.IDataNavigator.GetDataRow(); + CurrentItem c = cic.Find(v.VariableName); + return c.Value.ToString(); + } + + return v.VariableName ; } + + + protected override void AggregateValue(object value, AggregationState aggregationState, params object[] args) + { +// var sum = aggregationState.GetValue("value"); +// var nextVal = TypeNormalizer.EnsureType(value); +// +// aggregationState["value"] = sum + nextVal; + } + + protected override string ExtractAggregateValue(AggregationState aggregationState) + { + return aggregationState.GetValue("value"); + } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/BasePager.cs index 8426193214..394d0938b2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/BasePager.cs @@ -221,6 +221,7 @@ namespace ICSharpCode.Reports.Core.old_Exporter private void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items) { + foreach (BaseExportColumn be in items) { IExportContainer ec = be as IExportContainer; if (ec != null) @@ -234,6 +235,7 @@ namespace ICSharpCode.Reports.Core.old_Exporter et.Text = evaluatorFassade.Evaluate(et.Text); } } + } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs index 8b6c0e8784..c012913710 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs @@ -10,6 +10,7 @@ using System; using System.Drawing; using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Interfaces; +using ICSharpCode.Reports.Expressions.ReportingLanguage; namespace ICSharpCode.Reports.Core.old_Exporter { @@ -28,6 +29,7 @@ namespace ICSharpCode.Reports.Core.old_Exporter private IExportItemsConverter exportItemsConverter; private ILayouter layouter; private Size saveSize; + IExpressionEvaluatorFacade evaluator; public event EventHandler PageFull; public event EventHandler SectionRendering; @@ -53,9 +55,17 @@ namespace ICSharpCode.Reports.Core.old_Exporter this.sectionBounds = this.singlePage.SectionBounds; this.exportItemsConverter = exportItemsConverter; this.layouter = layouter; + this.evaluator = SetupEvaluator (); } - + private IExpressionEvaluatorFacade SetupEvaluator () + { + IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(); + evaluatorFacade.SinglePage = this.singlePage; + evaluatorFacade.SinglePage.IDataNavigator = this.dataNavigator; + return evaluatorFacade; + } + protected void FirePageFull (ExporterCollection items) { EventHelper.Raise(PageFull,this,new NewPageEventArgs(items)); @@ -148,13 +158,33 @@ namespace ICSharpCode.Reports.Core.old_Exporter } - protected void FillAndLayoutRow (ISimpleContainer row) + protected void FillRow (ISimpleContainer row) { DataNavigator.Fill(row.Items); + } + + + + protected void LayoutRow (ISimpleContainer row) + { + PrintHelper.SetLayoutForRow(Graphics,Layouter,row); } + protected void EvaluateRow(ExporterCollection row) + { + foreach (BaseExportColumn element in row) { + ExportText textItem = element as ExportText; + + if (textItem != null) { + Console.WriteLine (textItem.Text); + textItem.Text = evaluator.Evaluate(textItem.Text); + } + } + } + + protected Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) { container.Location = new Point (leftPos,container.Location.Y); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/RowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/RowConverter.cs index 8f6a70dcc5..758d886907 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/RowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/RowConverter.cs @@ -71,10 +71,15 @@ namespace ICSharpCode.Reports.Core.old_Exporter section.Size = this.SectionBounds.DetailSectionRectangle.Size; base.SaveSize(section.Items[0].Size); - base.FillAndLayoutRow(simpleContainer); + + base.FillRow(simpleContainer); + base.LayoutRow(simpleContainer); + base.FireSectionRendering(section); currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); + EvaluateRow(mylist); + section.Items[0].Size = base.RestoreSize; section.SectionOffset += section.Size.Height + 2 * base.SinglePage.SectionBounds.Gap; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/TableConverter.cs index ca660ad3ae..28920cae94 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/TableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/TableConverter.cs @@ -76,7 +76,10 @@ namespace ICSharpCode.Reports.Core.old_Exporter // BaseSection section = this.baseTable.Parent as BaseSection; section.Location = new Point(section.Location.X,section.SectionOffset ); - base.FillAndLayoutRow(simpleContainer); + + base.FillRow(simpleContainer); + base.LayoutRow(simpleContainer); + if (PrintHelper.IsPageFull(new Rectangle(new Point (simpleContainer.Location.X,currentPosition.Y),simpleContainer.Size),base.SectionBounds)) { base.FirePageFull(mylist); @@ -88,6 +91,9 @@ namespace ICSharpCode.Reports.Core.old_Exporter } currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); + + EvaluateRow(mylist); + simpleContainer.Size = base.RestoreSize; } while (base.DataNavigator.MoveNext()); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs index a7a4eb70f9..1d302fa26c 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs @@ -32,20 +32,41 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests } [Test] - [IgnoreAttribute] - public void Can_Compile_Simple_FieldReference() + + public void Return_FieldName_If_DataNavigator_Invalid() { - const string expression = "=Fields!Field1"; - Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Field1")); + const string expression = "=Fields!Name"; + this.singlePage.IDataNavigator.Reset(); + Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Name")); } [Test] - [IgnoreAttribute] - public void Can_Compile_Missspelled_Simple_FieldReference() + public void Can_Compile_Misspelled_Simple_FieldReference() + { + const string expression = "=fields!Name"; + Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Name")); + } + + + [Test] + public void Evaluate_If_DataNavigator_Is_Invalid() + { + const string expression = "=Fields!Name"; + this.singlePage.IDataNavigator.MoveNext(); + DataRow row = testTable.Rows[0]; + string testVal = row["Name"].ToString(); + Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(testVal)); + } + + + + [Test] + [Ignore] + public void Unkown_ColumnName () { - const string expression = "=fields!Field1"; - Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Field1")); + const string expression = "=Fields!Unknown"; + Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Name")); } @@ -54,7 +75,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests public void ExtractFieldbyName () { const string expression = "=Fields!Name"; -// Console.WriteLine("{0} - {1}",expression,evaluator.Evaluate(expression)); Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.testTable.Rows.Count.ToString())); } @@ -69,11 +89,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests AggregateFuctionHelper ah = new AggregateFuctionHelper(); this.testTable = ah.AggregateTable; -// foreach (DataRow r in this.testTable.Rows) -// { -//// this.intResult = this.intResult + Convert.ToInt16(r["IntValue"]); -//// this.doubleResult = this.doubleResult + Convert.ToDouble(r["Amount"]); -// } this.dataManager = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.testTable, new ReportSettings()); this.singlePage.IDataNavigator = this.dataManager.GetNavigator;