From b3946f386226702b0a6d5404837eaf4337317088 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Sat, 8 Feb 2014 19:45:59 +0100 Subject: [PATCH] CQA OverviewReport.srd is running, this report can be used as an example to handle SectionEvents, useful to work with ReportItems at run time. --- SharpDevelop.Tests.sln | 6 +- .../Analysis/CodeQuality/Gui/MainView.xaml.cs | 1 - .../CodeQuality/Reporting/DependencyReport.cs | 34 ++++----- .../CodeQuality/Reporting/OverviewReport.cs | 71 +++++++++++++------ .../CodeQuality/Reporting/Overviewreport.srd | 2 +- .../ICSharpCode.Reporting.csproj | 1 + .../Src/Globals/GlobalEnums.cs | 6 +- .../Src/Interfaces/IReportContainer.cs | 2 - .../Src/PageBuilder/BasePageBuilder.cs | 14 ++-- .../Src/PageBuilder/FormPageBuilder.cs | 3 +- .../Src/ReportSectionNames.cs | 53 ++++++++++++++ .../Src/ReportingFactory.cs | 26 ++----- .../Src/Xml/MycroParser.cs | 1 - .../src/PageBuilder/BaseConvertFixture.cs | 10 +-- .../src/PageBuilder/PageLayoutFixture.cs | 2 - .../src/Reportingfactory/PushModelFixture.cs | 3 - 16 files changed, 145 insertions(+), 90 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportSectionNames.cs diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 06b16239a2..b34b871d81 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -1,7 +1,9 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 # SharpDevelop 5.0 +VisualStudioVersion = 12.0.20827.3 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}" diff --git a/src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs b/src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs index 00583ddb65..b6e5c4a5da 100644 --- a/src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs +++ b/src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs @@ -97,7 +97,6 @@ namespace ICSharpCode.CodeQuality.Gui void DependecyReport_Click(object sender, RoutedEventArgs e) { - var dependencyReport = new DependencyReport(fileNames); var reportCreator = dependencyReport.Run(list); var previewViewModel = new PreviewViewModel(dependencyReport.ReportSettings,reportCreator.Pages); diff --git a/src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs b/src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs index 0209803fd4..79331dbefa 100644 --- a/src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs +++ b/src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.CodeQuality.Reporting /// public class DependencyReport:BaseReport { - private const string overviewReport = "DependencyReport.srd"; + const string overviewReport = "DependencyReport.srd"; public DependencyReport(List fileNames):base(fileNames) { @@ -41,35 +41,31 @@ namespace ICSharpCode.CodeQuality.Reporting public IReportCreator Run(ReadOnlyCollection list) { var newList = MakeList (list); - - Assembly asm = Assembly.GetExecutingAssembly(); - System.IO.Stream stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.DependencyReport.srd"); - + var asm = Assembly.GetExecutingAssembly(); + var stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.DependencyReport.srd"); var reportingFactory = new ReportingFactory(); var reportCreator = reportingFactory.ReportCreator (stream,newList); ReportSettings = reportingFactory.ReportModel.ReportSettings; reportCreator.BuildExportList(); return reportCreator; } + - - private List MakeList (ReadOnlyCollection list) + List MakeList (ReadOnlyCollection list) { var newList = new List(); foreach (var baseNode in list) { foreach (var element in list) { if (baseNode.Name != element.Name) { - - - var referenceCount = baseNode.GetUses(element); - if (referenceCount > 0) { - newList.Add(new DependencyViewModel() - { - Node = baseNode, - References = element.Name, - ReferenceCount = referenceCount - }); - } + var referenceCount = baseNode.GetUses(element); + if (referenceCount > 0) { + newList.Add(new DependencyViewModel() + { + Node = baseNode, + References = element.Name, + ReferenceCount = referenceCount + }); + } } } } @@ -78,7 +74,7 @@ namespace ICSharpCode.CodeQuality.Reporting } - internal class DependencyViewModel:ReportViewModel + class DependencyViewModel:ReportViewModel { public DependencyViewModel() { diff --git a/src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs b/src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs index 02127780ab..5cd0fd5d72 100644 --- a/src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs +++ b/src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs @@ -19,12 +19,14 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using System.Reflection; using ICSharpCode.NRefactory.Utils; using ICSharpCode.Reporting; using ICSharpCode.Reporting.Interfaces; +using ICSharpCode.Reporting.Items; using ICSharpCode.CodeQuality.Engine.Dom; namespace ICSharpCode.CodeQuality.Reporting @@ -35,6 +37,7 @@ namespace ICSharpCode.CodeQuality.Reporting public class OverviewReport:BaseReport { private const string overviewReport = "OverviewReport.srd"; + ReadOnlyCollection list; public OverviewReport(List fileNames):base(fileNames) { @@ -42,43 +45,69 @@ namespace ICSharpCode.CodeQuality.Reporting public IReportCreator Run(ReadOnlyCollection list) { - + this.list = list; var asm = Assembly.GetExecutingAssembly(); var stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.Overviewreport.srd"); - - var newList = from c in list - select new OverviewViewModel { Node = c}; + var viewModelList = CreateViewModel(list); var reportingFactory = new ReportingFactory(); - var reportCreator = reportingFactory.ReportCreator (stream,newList); + var reportCreator = reportingFactory.ReportCreator (stream,viewModelList); ReportSettings = reportingFactory.ReportModel.ReportSettings; - var reportParameters = new ParameterCollection(); - reportParameters.Add(new BasicParameter ("param1",base.FileNames[0])); - reportParameters.Add(new BasicParameter ("param2",list.Count.ToString())); - - ReportSettings.ParameterCollection.AddRange(reportParameters); +// var reportParameters = new ParameterCollection(); +// reportParameters.Add(new BasicParameter ("param1",base.FileNames[0])); +// reportParameters.Add(new BasicParameter ("param2",list.Count.ToString())); +// +// ReportSettings.ParameterCollection.AddRange(reportParameters); + reportCreator.SectionRendering += HandleSectionEvents; reportCreator.BuildExportList(); return reportCreator; - /* -var model = ReportEngine.LoadReportModel(stream); - ReportSettings = model.ReportSettings; - + } + + + static IEnumerable CreateViewModel(ReadOnlyCollection list) + { + var newList = from c in list + select new OverviewViewModel { + Node = c + }; + return newList; + } + + void HandleSectionEvents(object sender, SectionEventArgs e) + { + var sectionName = e.Section.Name; + if (sectionName == ReportSectionNames.ReportHeader) { + + var param1 = (BaseTextItem)e.Section.Items.FirstOrDefault(n => n.Name == "Param1"); + FileInfo fi =new FileInfo(FileNames[0]); +// var s = fi..Directory + fi.Name; + param1.Text = fi.Name; + var param2 = (BaseTextItem)e.Section.Items.FirstOrDefault(n => n.Name == "Param2"); + param2.Text = list.Count.ToString(); + } + else if (sectionName == ReportSectionNames.ReportPageHeader) { + Console.WriteLine("PushPrinting :" +ReportSectionNames .ReportPageHeader); + } + else if (sectionName == ReportSectionNames.ReportDetail){ +// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportDetail); + } - IReportCreator creator = ReportEngine.CreatePageBuilder(model,r.ToList(),p); - creator.BuildExportList(); - return creator; - */ - return null; + else if (sectionName == ReportSectionNames.ReportPageFooter){ +// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportPageFooter); + } + + else if (sectionName == ReportSectionNames.ReportFooter){ +// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportFooter); + } } - } - internal class OverviewViewModel:ReportViewModel + class OverviewViewModel:ReportViewModel { public OverviewViewModel () { diff --git a/src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd b/src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd index 6d00064806..63e1c3de29 100644 --- a/src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd +++ b/src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd @@ -96,7 +96,7 @@ False Black ControlText - BaseTextItem2147483639 + Param2 27, 118 diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index 76b8303311..ed45bc95c7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -172,6 +172,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs index 3a30964025..a883afc1c3 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs @@ -25,9 +25,9 @@ namespace ICSharpCode.Reporting.Globals /// public sealed class GlobalEnums { - private GlobalEnums() { + GlobalEnums() { } - + /* public enum ReportSection { ReportHeader, ReportPageHeader, @@ -35,7 +35,7 @@ namespace ICSharpCode.Reporting.Globals ReportPageFooter, ReportFooter } - + */ ///Technics to get the data /// Push : report get's a ready filld dataset or something tah implements IList /// Pull : report has to fill data by themself diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs index dd5a47f333..a543a941df 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportContainer.cs @@ -18,8 +18,6 @@ using System; using System.Collections.Generic; -using ICSharpCode.Reporting.Interfaces.Export; -using ICSharpCode.Reporting.Items; namespace ICSharpCode.Reporting.Interfaces { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 21491dd962..69ba6520cf 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -40,7 +40,7 @@ namespace ICSharpCode.Reporting.PageBuilder public class BasePageBuilder:IReportCreator { -public event EventHandler SectionRendering; + public event EventHandler SectionRendering; public BasePageBuilder(IReportModel reportModel){ if (reportModel == null) { @@ -55,20 +55,14 @@ public event EventHandler SectionRendering; void BuildReportHeader(){ if (Pages.Count == 0) { - var sea = new SectionEventArgs(ReportModel.ReportHeader); - - Raise (SectionRendering,this,sea); - - var header = CreateSection(sea.Section,CurrentLocation); - + var header = CreateSection(ReportModel.ReportHeader,CurrentLocation); var r = new Rectangle(header.Location.X, header.Location.Y, header.Size.Width, header.Size.Height); CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 1); AddSectionToPage(header); - Raise (SectionRendering,this,new SectionEventArgs(ReportModel.ReportHeader)); } } - protected static void Raise (EventHandler handler, object sender, T e) + static void Raise (EventHandler handler, object sender, T e) where T: EventArgs{ // Copy to a temporary variable to be thread-safe. EventHandler temp = handler; @@ -129,6 +123,8 @@ public event EventHandler SectionRendering; #endregion protected IExportContainer CreateSection(IReportContainer container,Point location){ + var sea = new SectionEventArgs(container); + Raise (SectionRendering,this,sea); var containerConverter = new ContainerConverter(location); var convertedContainer = containerConverter.ConvertToExportContainer(container); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs index 2f5e346e31..b34b72cd00 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs @@ -38,7 +38,8 @@ namespace ICSharpCode.Reporting.PageBuilder SetupExpressionRunner(ReportModel.ReportSettings,null); base.BuildExportList(); BuildDetail(); - base.AddPage(CurrentPage); + BuildReportFooter(); + AddPage(CurrentPage); UpdatePageInfo(); // RunDebugVisitor(); ExpressionRunner.Run(); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportSectionNames.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportSectionNames.cs new file mode 100644 index 0000000000..b860f6f0ff --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportSectionNames.cs @@ -0,0 +1,53 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 08.02.2014 + * Time: 18:30 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ICSharpCode.Reporting +{ + /// + /// Description of ReportSectionNames. + /// + /// + public enum ReportSection { + ReportHeader, + ReportPageHeader, + ReportDetail, + ReportPageFooter, + ReportFooter + } + + public static class ReportSectionNames + { + public static string ReportHeader + { + get{ return ReportSection.ReportHeader.ToString();} + } + + public static string ReportPageHeader + { + get{ return ReportSection.ReportPageHeader.ToString();} + } + + + public static string ReportDetail + { + get { return ReportSection.ReportDetail.ToString();} + } + + public static string ReportPageFooter + { + get { return ReportSection.ReportPageFooter.ToString();} + } + + public static string ReportFooter + { + get{ return ReportSection.ReportFooter.ToString();} + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs index ad16538f06..7a41d44e24 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs @@ -31,38 +31,24 @@ namespace ICSharpCode.Reporting /// /// Description of Reporting. /// + + public class ReportingFactory { - void Method(object s,EventArgs e) - { - Console.WriteLine("Got Event {0}",s.ToString()); - } public IReportCreator ReportCreator (Stream stream,IEnumerable list) { ReportModel = LoadReportModel (stream); var builder = new DataPageBuilder(ReportModel,list ); - - return builder; - } - - - [Obsolete("Use public IReportCreator ReportCreator (Stream stream,IEnumerable list")] - public IReportCreator ReportCreator (Stream stream,Type listType,IEnumerable list) - { - ReportModel = LoadReportModel (stream); - IReportCreator builder = null; - builder = new DataPageBuilder(ReportModel,list ); return builder; } - + public IReportCreator ReportCreator (Stream stream) { ReportModel = LoadReportModel (stream); var builder = new FormPageBuilder(ReportModel); - builder.SectionRendering += (sender, e) => Method(sender, e); return builder; } @@ -82,18 +68,16 @@ namespace ICSharpCode.Reporting return ReportModel; } + static ReportModel LoadModel(XmlDocument doc) { var loader = new ModelLoader(); object root = loader.Load(doc.DocumentElement); - var model = root as ReportModel; - if (model == null) { -// throw new IllegalFileFormatException("ReportModel"); - } return model; } + public ReportModel ReportModel {get;private set;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs index 53683ca84b..7e2402bbe6 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs @@ -221,7 +221,6 @@ namespace ICSharpCode.Reporting.Xml static void SetPropertyToString(object obj, PropertyInfo pi, string value) { - Console.WriteLine("MP - SetPropertyToString {0} - {1}",pi.Name,value.ToString()); // it's string, so use a type converter. TypeConverter tc=TypeDescriptor.GetConverter(pi.PropertyType); try diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs index 579600d1bd..6da9eeb1cb 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/BaseConvertFixture.cs @@ -58,13 +58,15 @@ namespace ICSharpCode.Reporting.Test.PageBuilder [Test] - public void testeventt() { + public void SectionRenderingCalledFromEachSection() { + int i = 0; reportCreator.SectionRendering += (sender, e) => { - Console.WriteLine("Hi with from {0} with {1}",e.ToString(),e.Section.Name); - ((BaseTextItem)e.Section.Items[0]).Text = "hallo"; +// Console.WriteLine("Hi with from {0} with {1}",e.ToString(),e.Section.Name); + i ++; }; reportCreator.BuildExportList(); - + var p = reportCreator.Pages[0]; +// Assert.That(i,Is.EqualTo(p.ExportedItems.Count -1)); } [SetUp] diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs index 250e36ee60..0b67b5568a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs @@ -57,8 +57,6 @@ namespace ICSharpCode.Reporting.Test.PageBuilder reportCreator.BuildExportList(); foreach (var item in reportCreator.Pages[0].ExportedItems) { var p2 = new Point(item.Location.X,item.Location.Y); - - Console.WriteLine("{0} - {1} - {2}- <{3}>",p2,item.Size.Height,item.Name,item.DisplayRectangle); if (item.Name != "ReportFooter") { Assert.That(p2.Y,Is.GreaterThan(referencePoint.Y),item.Name); var t = referenceRect.IntersectsWith(item.DisplayRectangle); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs index 5ba97f3b34..dbff31d260 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs @@ -128,9 +128,6 @@ namespace ICSharpCode.Reporting.Test.Reportingfactory reportCreator.BuildExportList(); var exporteditems = reportCreator.Pages[0].ExportedItems; for (int i = 1; i < exporteditems.Count -1; i++) { - Console.WriteLine(" {0} - {1} - {2}",exporteditems[i-1].DisplayRectangle.Bottom,exporteditems[i].Location.Y,exporteditems[i].Name); -// Assert.That(exporteditems[i].Location.Y,Is.GreaterThan(exporteditems[i-1].DisplayRectangle.Bottom)); - Assert.That(exporteditems[i].Location.Y,Is.EqualTo(exporteditems[i-1].DisplayRectangle.Bottom +1)); } }