Browse Source

Add Error handling for Parameters and Fields

reports
Peter Forstmeier 12 years ago
parent
commit
6a8bfe1106
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs
  3. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/FieldsNode.cs
  4. 30
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/GlobalsNode.cs
  5. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs
  6. 18
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ReportingLanguageGrammer.cs
  7. 19
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/InterationTests/FieldsFixture.cs
  8. 19
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/InterationTests/ParametersFixture.cs

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

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

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Globalization;
using ICSharpCode.Reporting.Globals;
using Irony.Interpreter.Ast;
namespace ICSharpCode.Reporting.Expressions
{
@ -26,5 +27,9 @@ namespace ICSharpCode.Reporting.Expressions @@ -26,5 +27,9 @@ namespace ICSharpCode.Reporting.Expressions
}
return false;
}
public static string ComposeAstNodeError (string branch,AstNode node) {
return String.Format ("Missing {0} <{1}>",branch,node.AsString);
}
}
}

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

@ -30,6 +30,9 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast @@ -30,6 +30,9 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
thread.CurrentNode = this; //standard prolog
var container = thread.GetCurrentContainer();
var column = (ExportText)container.ExportedItems.Where(x => x.Name == fieldNode.AsString).FirstOrDefault();
if (column == null) {
return ExpressionHelper.ComposeAstNodeError("Fields",fieldNode);
}
return column.Text;
}
}

30
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/GlobalsNode.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// 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 GlobalsNode.
/// </summary>
public class GlobalsNode: AstNode
{
AstNode globalNode;
public override void Init(AstContext context, ParseTreeNode treeNode)
{
base.Init(context, treeNode);
}
public override void DoSetValue(ScriptThread thread, object value)
{
base.DoSetValue(thread, value);
}
}
}

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

@ -30,6 +30,9 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast @@ -30,6 +30,9 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast
thread.CurrentNode = this; //standard prolog
var parametersCollection = thread.GetParametersCollection();
result = parametersCollection.Find(parameterNode.AsString);
if (result == null)
// return String.Format("Missing Parameter <{0}>",parameterNode.AsString);
return ExpressionHelper.ComposeAstNodeError("Parameters",parameterNode);
return result.ParameterValue;
}
}

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

@ -15,6 +15,7 @@ namespace ICSharpCode.Reporting.Expressions.Irony @@ -15,6 +15,7 @@ namespace ICSharpCode.Reporting.Expressions.Irony
/// </summary>
public class ReportingLanguageGrammer:InterpretedLanguageGrammar
{
private const string exclamationMark = "!";
public ReportingLanguageGrammer() :base(caseSensitive : false) {
this.GrammarComments =
@ -56,6 +57,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -56,6 +57,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
// SharpReporting
var ParametersSection = new NonTerminal("ParametersCall",typeof(ParametersCallNode));
var FieldsSection = new NonTerminal("FieldsCall",typeof(FieldsNode));
var GlobalSection = new NonTerminal("GlobalSection",typeof(GlobalsNode));
// end of SharpReporting
@ -77,6 +79,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -77,6 +79,7 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
// 3. BNF rules
Expr.Rule = Term | UnExpr | BinExpr | PrefixIncDec | PostfixIncDec | TernaryIfExpr
| ParametersSection
// | GlobalSection
| FieldsSection;
Term.Rule = number | ParExpr | stringLit | FunctionCall | identifier | MemberAccess | IndexedAccess;
@ -96,11 +99,18 @@ bool operations &,&&, |, ||; ternary '?:' operator." ; @@ -96,11 +99,18 @@ bool operations &,&&, |, ||; ternary '?:' operator." ;
ArgList.Rule = MakeStarRule(ArgList, comma, Expr);
FunctionCall.Rule = Expr + PreferShiftHere() + "(" + ArgList + ")";
// SharpReporting
ParametersSection.Rule = ToTerm("Parameters") + "!" + identifier;
FieldsSection.Rule = ToTerm("Fields") + "!" + identifier;
// SharpReporting
ParametersSection.Rule = ToTerm("Parameters") + exclamationMark + identifier;
FieldsSection.Rule = ToTerm("Fields") + exclamationMark + identifier;
/*
GlobalSection.Rule = GlobalSection + exclamationMark + Symbol("PageNumber")
| GlobalSection + exclamationMark + Symbol("TotalPages")
| GlobalSection + exclamationMark + Symbol("ExecutionTime")
| GlobalSection + exclamationMark + Symbol("ReportFolder")
| GlobalSection + exclamationMark + Symbol("ReportName");
*/
// end of SharpReporting
FunctionCall.NodeCaptionTemplate = "call #{0}(...)";

19
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/InterationTests/FieldsFixture.cs

@ -40,6 +40,25 @@ namespace ICSharpCode.Reporting.Test.Expressions.InterationTests @@ -40,6 +40,25 @@ namespace ICSharpCode.Reporting.Test.Expressions.InterationTests
}
[Test]
public void FieldNotExist() {
var script = "=Fields!myfieldNotExist";
collection[0].Text = script;
collection.Add(new ExportText()
{
Text = "Sharpdevelop",
Name = "myfield1"
});
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.StartsWith("Missing"));
Assert.That (collection[0].Text.Contains("myfieldNotExist"));
}
[SetUp]
public void CreateExportlist() {
collection = new Collection<ExportText>();

19
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/InterationTests/ParametersFixture.cs

@ -48,6 +48,25 @@ namespace ICSharpCode.Reporting.Test.Expressions.InterationTests @@ -48,6 +48,25 @@ namespace ICSharpCode.Reporting.Test.Expressions.InterationTests
}
[Test]
public void ParameterNotExist() {
var parameters = new ParameterCollection();
parameters.Add(new BasicParameter() {
ParameterName = "param1",
ParameterValue = "SharpDevelop"
}
);
var reportSettings = CreateReportSettings(parameters);
var visitor = new ExpressionVisitor(reportSettings);
var script = "=Parameters!paramNotExist";
collection[0].Text = script;
visitor.Visit(collection[0]);
Assert.That (collection[0].Text.StartsWith("Missing"));
Assert.That (collection[0].Text.Contains("paramNotExist"));
}
ReportSettings CreateReportSettings(ParameterCollection parameters)
{
var reportSettings = new ReportSettings();

Loading…
Cancel
Save