public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
		{
			if (parent == null) {
				throw new ArgumentNullException("parent");
			}
			if (item == null) {
				throw new ArgumentNullException("item");
			}
			ISimpleContainer simpleContainer = item as ISimpleContainer;
			this.parent = parent;
			
			simpleContainer.Parent = parent;
			
			PrintHelper.AdjustParent(parent,simpleContainer.Items);
			if (PrintHelper.IsTextOnlyRow(simpleContainer)) {
				ExporterCollection myList = new ExporterCollection();

				base.BaseConvert (myList,simpleContainer,parent.Location.X,
				                  new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
				
				
				return myList;
			} else {
				return this.ConvertDataRow(simpleContainer);
			}
		}
		private ExporterCollection ConvertInternal(ExporterCollection mylist)
		{
			Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
			Point dataAreaStart = new Point(baseTable.Items[0].Location.X,baseTable.Items[0].Location.Y + currentPosition.Y);
			ISimpleContainer headerContainer = null;
			
			int defaultLeftPos = PrintHelper.DrawingAreaRelativeToParent(this.baseTable.Parent,this.baseTable).Left;
			
			this.baseTable.Items.SortByLocation();
			
			foreach (ISimpleContainer simpleContainer in this.baseTable.Items)
			{
				if (simpleContainer.Items.Count > 0) {
					simpleContainer.Location = new Point (simpleContainer.Location.X + defaultLeftPos,simpleContainer.Location.Y);
					simpleContainer.Parent = (BaseReportItem)this.baseTable;
					base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height));
					// Header/FooterRow
				
					if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
						headerContainer = simpleContainer;
						currentPosition = base.BaseConvert(mylist,headerContainer,defaultLeftPos,currentPosition);
					}
					
					else 
					{
						// DataRegion
						base.SaveSize(simpleContainer.Size);
						do {
							//
							BaseSection section = this.baseTable.Parent as BaseSection;
							section.Location = new Point(section.Location.X,section.SectionOffset );
							base.FillAndLayoutRow(simpleContainer);
							
							if (PrintHelper.IsPageFull(new Rectangle(new Point (simpleContainer.Location.X,currentPosition.Y),simpleContainer.Size),base.SectionBounds)) {
								base.FirePageFull(mylist);
								mylist.Clear();

								currentPosition = base.BaseConvert(mylist,headerContainer,
								                                     defaultLeftPos,
								                                     base.SectionBounds.ReportHeaderRectangle.Location);
							}
							
							currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
							simpleContainer.Size = base.RestoreSize;
						}
						while (base.DataNavigator.MoveNext());
						//Allway's reset the DataNavigator
						base.DataNavigator.Reset();
						base.DataNavigator.MoveNext();
						SectionBounds.ReportFooterRectangle =  new Rectangle(SectionBounds.ReportFooterRectangle.Left,
						                                                     currentPosition.Y,
						                                                     SectionBounds.ReportFooterRectangle.Width,
						                                                     SectionBounds.ReportFooterRectangle.Height);
					}
				}
			}
			return mylist;
		}
		void CreatePageInternal(FixedPage page, ExporterCollection items)
		{
			foreach (var element in items)
			{
				var item = ItemFactory(element);
				if (item != null) {
					FixedPage.SetLeft(item,element.StyleDecorator.Location.X );
					FixedPage.SetTop(item,element.StyleDecorator.Location.Y);
					page.Children.Add(item);
				}
			}
		}
		public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row)
		{
			foreach (BaseExportColumn column in row) {
				var container = column as IExportContainer;
				if (container != null) {
					EvaluateRow(evaluator,container.Items);
				}
				
				IReportExpression expressionItem = column as IReportExpression;
				if (expressionItem != null) {
					evaluator.Evaluate(expressionItem);
				}
			}
		}
		public ExporterCollection ConvertSimpleItems (Point offset,ReportItemCollection items)
		{
			if (items == null) {
				throw new ArgumentNullException("items");
			}
			ExporterCollection col = new ExporterCollection();
			if (items.Count > 0) {
				
				foreach(BaseReportItem item in items)
				{
					col.Add(ConvertToLineItem(offset,item));
				}
			}
			return col;
		}
		protected static void DrawItems (Graphics graphics,ExporterCollection items)
		{
			
			foreach (ICSharpCode.Reports.Core.Exporter.BaseExportColumn baseExportColumn in items) {
				
				if (baseExportColumn != null) {
					ExportContainer container = baseExportColumn as ExportContainer;
					if (container == null) {
						baseExportColumn.DrawItem(graphics);
					} else {
						container.DrawItem(graphics);
						DrawItems(graphics,container.Items);
					}
				}
			}
		}
		public static  ExporterCollection ConvertPlainCollection (ReportItemCollection items,Point offset)
		{
			if (items == null) {
				throw new ArgumentNullException("items");
			}

			ExporterCollection col = new ExporterCollection();
			if (items.Count > 0) {
				items.SortByLocation();
				foreach(BaseReportItem item in items)
				{
					var converteditem = ExportHelper.ConvertLineItem(item,offset);
					col.Add((BaseExportColumn)converteditem);
				}
			}
			return col;
		}
		public static  ExporterCollection ConvertPlainCollection (ReportItemCollection items,Point offset)
		{
			if (items == null) {
				throw new ArgumentNullException("items");
			}
			Console.WriteLine("Convert plain collection");
			ExporterCollection col = new ExporterCollection();
			if (items.Count > 0) {
				items.SortByLocation();
				foreach(BaseReportItem item in items)
				{
					var converteditem = ExportHelper.ConvertLineItem(item,offset);
					Console.WriteLine("{0} - {1}",converteditem.ToString(),converteditem.StyleDecorator.DisplayRectangle);
					col.Add((BaseExportColumn)converteditem);
				}
			}
			Console.WriteLine("");
			return col;
		}
		private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
		{
			ExporterCollection mylist = new ExporterCollection();
			Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
			BaseSection section = parent as BaseSection;
			
			int defaultLeftPos = parent.Location.X;
			
			do {
				section.Location = new Point(section.Location.X,section.SectionOffset );
				section.Size = this.SectionBounds.DetailSectionRectangle.Size;
				base.SaveSize(section.Items[0].Size);
				
				base.FillAndLayoutRow(simpleContainer);
				base.FireSectionRendering(section);
				currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
				
				section.Items[0].Size = base.RestoreSize;
				section.SectionOffset += section.Size.Height + 2 * base.SinglePage.SectionBounds.Gap;

				
				if (PrintHelper.IsPageFull(new Rectangle(new Point (simpleContainer.Location.X,currentPosition.Y), section.Size),base.SectionBounds)) {
					base.FirePageFull(mylist);
					section.SectionOffset = base.SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;
					currentPosition = new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
					mylist.Clear();
				}
				
				if (section.DrawBorder == true) {
					BaseRectangleItem br = BasePager.CreateDebugItem (section);
					BaseExportColumn bec = br.CreateExportColumn();
					bec.StyleDecorator.Location = section.Location;
					mylist.Insert(0,bec);
				}
			}
			while (base.DataNavigator.MoveNext());
			
			SectionBounds.ReportFooterRectangle =  new Rectangle(SectionBounds.ReportFooterRectangle.Left,
			                                                     section.Location.Y + section.Size.Height,
			                                                     SectionBounds.ReportFooterRectangle.Width,
			                                                     SectionBounds.ReportFooterRectangle.Height);
			return mylist;
		}
Exemple #10
0
		protected ExporterCollection ConvertSection (BaseSection section,int dataRow)
		{
			Point currentBottom = Point.Empty;
			bool isContainer = false;
			
			PrepareSection(section, dataRow);
			
			var convertedSection = new ExporterCollection();
			Offset = SectionBounds.Offset;
			
			if (section.Items.Count > 0)
			{

				Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section);
				LayoutHelper.FixSectionLayout(desiredRectangle,section);
				section.Items.SortByLocation();
				GapList gapCalculator = new GapList();
				gapCalculator.CalculateGapList(section);
				
				int i = 0;
				
				foreach (BaseReportItem item in section.Items)
				{
					ISimpleContainer simpleContainer = item as ISimpleContainer;
					
					if (simpleContainer != null)
					{
						isContainer = true;
						Offset = new Point(Offset.X,Offset.Y + gapCalculator.GapBetweenItems[i] );
						var containerSize = simpleContainer.Size;
						
						EvaluationHelper.EvaluateReportItems(EvaluatorFacade,simpleContainer.Items);
						
						var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
						LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
						
						section.MeasureOverride(section.Size);
						
						Offset = BaseConverter.ConvertContainer(convertedSection,simpleContainer,Offset.X,Offset);
						simpleContainer.Size = containerSize;
					}
					else
					{
						IBaseExportColumn converteditem = null;
						if (isContainer)
						{
							item.Location = new Point(item.Location.X,Offset.Y + gapCalculator.GapBetweenItems[i]);
							converteditem = ExportHelper.ConvertLineItem(item,new Point(item.Location.X,gapCalculator.GapBetweenItems[i]));
							isContainer = false;
						} else
						{
							converteditem = ExportHelper.ConvertLineItem(item,Offset);
						}
						
						if (converteditem.StyleDecorator.DisplayRectangle.Bottom > currentBottom.Y)
						{
							currentBottom = new Point(converteditem.StyleDecorator.Location.X,converteditem.StyleDecorator.DisplayRectangle.Bottom);
						}
						convertedSection.Add((BaseExportColumn)converteditem );
					}
					i ++;
				}
				Offset = new Point (Offset.X,Offset.Y + gapCalculator.LastGap);
				
				if (currentBottom.Y > Offset.Y) {
					Offset = new Point (Offset.X,currentBottom.Y);
				}
			}
			SectionBounds.Offset = Offset;
			return convertedSection;
		}
Exemple #11
0
		protected ExporterCollection ConvertSection (BaseSection section,int dataRow)
		{
			Point currentBottom = Point.Empty;
			FireSectionRenderEvent (section ,dataRow);
			PrintHelper.AdjustParent(section,section.Items);
			PrintHelper.AdjustSectionLocation(section);
			
			var convertedSection = new ExporterCollection();
			Offset = SectionBounds.Offset;
			Point startOffset = Offset;
			
			if (section.Items.Count > 0)
			{
				Size sectionSize = section.Size;

				Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section);
				LayoutHelper.FixSectionLayout(desiredRectangle,section);
				section.Items.SortByLocation();
				GapList gapCalculator = new GapList();
				gapCalculator.CalculateGapList(section);
				int i = 0;
				
				foreach (BaseReportItem item in section.Items)
				{
					ISimpleContainer simpleContainer = item as ISimpleContainer;
					
					if (simpleContainer != null)
					{
						Offset = new Point(Offset.X,Offset.Y + gapCalculator.GapBetweenItems[i] );
						var containerSize = simpleContainer.Size;
						
						EvaluationHelper.EvaluateReportItems(EvaluatorFacade,simpleContainer.Items);
						
						var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
						LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
						/*
						 * */

						
						/*
				section.Items.ForEach(delegate(BaseReportItem aitem)
				                      {
//				                      	Console.WriteLine(item.Location);
				                      });
				var h = section.Items.FindHighestElement();
						 */
						section.MeasureOverride(section.Size);
						/** */
						Offset = BaseConverter.ConvertContainer(convertedSection,simpleContainer,Offset.X,Offset);
						simpleContainer.Size = containerSize;
					}
					else
					{
						var converteditem = ExportHelper.ConvertLineItem(item,Offset);
						if (converteditem != null) {
						if (converteditem.StyleDecorator.DisplayRectangle.Bottom > currentBottom.Y) {
							currentBottom = new Point(converteditem.StyleDecorator.Location.X,converteditem.StyleDecorator.DisplayRectangle.Bottom);
						}
						
						convertedSection.Add((BaseExportColumn)converteditem );
							
						}
//						if (converteditem.StyleDecorator.DisplayRectangle.Bottom > currentBottom.Y) {
//							currentBottom = new Point(converteditem.StyleDecorator.Location.X,converteditem.StyleDecorator.DisplayRectangle.Bottom);
//						}
//						
//						convertedSection.Add((BaseExportColumn)converteditem );
						
					}
					i ++;
				}
				Offset = new Point (Offset.X,Offset.Y + gapCalculator.LastGap);
//				Offset = new Point (Offset.X,Offset.Y + 5);
				
				if (currentBottom.Y > Offset.Y) {
					Offset = new Point (Offset.X,currentBottom.Y);
				}
//				Offset = new Point (Offset.X,Offset.Y + gapCalculator.LastGap);
			}
			SectionBounds.Offset = Offset;
			return convertedSection;
		}
		private static void ShouldDrawBorder (BaseSection section,ExporterCollection list)
		{
			if (section.DrawBorder == true) {
				BaseRectangleItem br = BasePager.CreateDebugItem (section);
				IBaseExportColumn bec = br.CreateExportColumn();
				bec.StyleDecorator.Location = section.Location;
				list.Insert(0,(BaseExportColumn)bec);
			}
		}
		protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
		{
			base.ForcePageBreak(exporterCollection,section);
			return SectionBounds.Offset;
		}
Exemple #14
0
		public static Point ConvertContainer(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
		{
			ExporterCollection ml = BaseConverter.ConvertItems (container, curPos);		
			myList.AddRange(ml);
			return new Point (leftPos,curPos.Y + container.Size.Height);
		}
Exemple #15
0
		protected void AfterConverting (ExporterCollection convertedList)
		{
			EvaluationHelper.EvaluateRow(Evaluator,convertedList);
		}
Exemple #16
0
		protected  Point ConvertStandardRow(ExporterCollection mylist,ISimpleContainer simpleContainer)
		{
			Console.WriteLine("ConvertStandardRow");
			var rowSize = simpleContainer.Size;
			
			Point curPos = new Point(DefaultLeftPosition, CurrentPosition.Y);
			ExporterCollection ml = BaseConverter.ConvertItems (simpleContainer, curPos);
			EvaluationHelper.EvaluateRow(Evaluator,ml);
			
			mylist.AddRange(ml);
		
			curPos = new Point (DefaultLeftPosition,CurrentPosition.Y + simpleContainer.Size.Height + 2 * GlobalValues.GapBetweenContainer);
			simpleContainer.Size = rowSize;
			return curPos;
			
		}
Exemple #17
0
		protected virtual Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
		{
			BuildNewPage(exporterCollection,section);
			return Point.Empty;
		}
Exemple #18
0
		protected void PageBreakAfterGroupChange(BaseSection section,ExporterCollection exporterCollection)
		{
			if (CheckPageBreakAfterGroupChange(section) ) {
				
				if (DataNavigator.HasMoreData)
				{
					CurrentPosition = ForcePageBreak (exporterCollection,section);
				}
			}
		}
		void CheckForPageBreak(BaseSection section, ExporterCollection exporterCollection)
		{
			var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
			
			if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
			{
				base.CurrentPosition = ForcePageBreak (exporterCollection,section);
			}
		}
Exemple #20
0
		protected void BuildNewPage(ExporterCollection myList,BaseSection section)
		{			
			FirePageFull(myList);
			section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;		
			myList.Clear();
		}
		private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,Point offset)
		{
			var retVal = Point.Empty;
			var rowSize = Size.Empty;
			ReportItemCollection groupCollection = null;
            var groupedRows = section.Items.FindGroupHeader();
			if (groupedRows.Count == 0) {
				groupCollection = section.Items.ExtractGroupedColumns();
				base.DataNavigator.Fill(groupCollection);
				base.FireSectionRendering(section);
				ExporterCollection list = ExportHelper.ConvertPlainCollection(groupCollection,offset);
				
				EvaluationHelper.EvaluateRow(base.Evaluator,list);
				
				exportList.AddRange(list);
	
				retVal =  new Point (DefaultLeftPosition,offset.Y + groupCollection[0].Size.Height + 20  + (3 *GlobalValues.GapBetweenContainer));
			} else {
				FillRow(groupedRows[0],base.DataNavigator);
				rowSize = groupedRows[0].Size;
				base.FireGroupHeaderRendering(groupedRows[0]);
				retVal = ConvertStandardRow(exportList,groupedRows[0]);
				
				groupedRows[0].Size = rowSize;
			}
			return retVal;
		}
Exemple #22
0
		protected void FirePageFull (ExporterCollection items)
		{
			var newPage = new NewPageEventArgs (items,SinglePage.SectionBounds);
			EventHelper.Raise<NewPageEventArgs>(PageFull,this,newPage);
			SinglePage.SectionBounds = newPage.SectionBounds;
		}
		private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
		{
			ExporterCollection exporterCollection = new ExporterCollection();
			base.CurrentPosition = base.SectionBounds.Offset;
			var p = base.CurrentPosition;
			BaseSection section = parent as BaseSection;
			
			DefaultLeftPosition = parent.Location.X;
			Size groupSize = Size.Empty;
			Size childSize = Size.Empty;

            if (section.Items.FindGroupHeader().Count > 0)
			{
				groupSize = section.Items[0].Size;
				childSize  = section.Items[1].Size;
			}

			do {            	
				base.SaveSectionSize(section.Size);
				PrintHelper.AdjustSectionLocation (section);
				section.Size = this.SectionBounds.DetailSectionRectangle.Size;
				
				// did we have GroupedItems at all
                if (section.Items.FindGroupHeader().Count > 0)
				{
					// GetType child navigator
					IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator;
					
					base.Evaluator.SinglePage.IDataNavigator = childNavigator;
					base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
					section.Size = base.RestoreSectionSize;
					section.Items[0].Size = groupSize;
					section.Items[1].Size = childSize;
					
					childNavigator.Reset();
					childNavigator.MoveNext();
					
					//Convert children
					if (childNavigator != null) {
						StandardPrinter.AdjustBackColor(simpleContainer);
						do
						{							                  
							section.Size = base.RestoreSectionSize;
							section.Items[0].Size = groupSize;
							section.Items[1].Size = childSize;
						
							FillRow(simpleContainer,childNavigator);
							FireRowRendering(simpleContainer,childNavigator);
							PrepareContainerForConverting(section,simpleContainer);
							base.CurrentPosition = ConvertStandardRow(exporterCollection,simpleContainer);
							CheckForPageBreak(section,exporterCollection);
						}
						while ( childNavigator.MoveNext());

						// GroupFooter
						base.ConvertGroupFooter(section,exporterCollection);
						
						base.PageBreakAfterGroupChange(section,exporterCollection);
						
						base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
					}
				}
				else
				{
					// No Grouping at all, the first item in section.items is the DetailRow
					Size containerSize = section.Items[0].Size;
					FillRow(simpleContainer,base.DataNavigator);
					FireRowRendering(simpleContainer,base.DataNavigator);
					Console.WriteLine("ConvertDazaRow");
					base.PrepareContainerForConverting(section,simpleContainer);
					base.CurrentPosition = ConvertStandardRow (exporterCollection,simpleContainer);
					section.Size = base.RestoreSectionSize;
					section.Items[0].Size = containerSize;
				}
				CheckForPageBreak (section,exporterCollection);
				ShouldDrawBorder (section,exporterCollection);
			}
			while (base.DataNavigator.MoveNext());
			
			SectionBounds.ReportFooterRectangle =  new Rectangle(SectionBounds.ReportFooterRectangle.Left,
			                                                     section.Location.Y + section.Size.Height,
			                                                     SectionBounds.ReportFooterRectangle.Width,
			                                                     SectionBounds.ReportFooterRectangle.Height);
		
			return exporterCollection;
		}
		protected  Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)		
		{
			ExporterCollection convertedList = new ExporterCollection();
			
			foreach (BaseReportItem item in section.Items)
			{
				IBaseConverter baseConverter = ConverterFactory.CreateConverter(item,dataNavigator,
				                                                                this.SinglePage,
				                                                                base.Layouter);
				
				if (baseConverter != null) {
					
					
					baseConverter.SectionRendering += OnSectionRendering;
					baseConverter.Graphics = base.Graphics;
					baseConverter.PageFull += new EventHandler<NewPageEventArgs>(OnPageFull);
					
					convertedList = baseConverter.Convert(section,item);
					
					base.SinglePage.Items.AddRange(convertedList);
					return baseConverter.CurrentPosition;
				}
			}
			return Point.Empty;
		}
Exemple #25
0
		private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items)
		{
			foreach (BaseExportColumn exportColumn in items) {
				
				IExportContainer ec = exportColumn as IExportContainer;
				if (ec != null)
				{
					if (ec.Items.Count > 0) {
						EvaluateRecursive(evaluatorFassade,ec.Items);
					}
				}
				IReportExpression expressionItem = exportColumn as IReportExpression;
				if (expressionItem != null) {
					evaluatorFassade.Evaluate(expressionItem);
				}
			}
		}
		public NewPageEventArgs(ExporterCollection itemsList,SectionBounds sectionBounds)
		{
			this.itemsList = itemsList;
			SectionBounds = sectionBounds;
		}
		private void DrawPage (ExporterCollection items)
		{
			foreach (ICSharpCode.Reports.Core.Exporter.BaseExportColumn baseExportColumn in items) {
				if (baseExportColumn != null) {

					IExportContainer container = baseExportColumn as ExportContainer;
					if (container == null) {
						baseExportColumn.DrawItem(this.pdfWriter,this.pdfUnitConverter);
					} else {
						container.DrawItem(this.pdfWriter,this.pdfUnitConverter);
						this.DrawPage(container.Items);
					}
				}
			}
		}
        void CheckForPageBreak(BaseSection section, ISimpleContainer container, ISimpleContainer headerRow, ExporterCollection exporterCollection)
        {
            var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)container, base.CurrentPosition);

            if (PrintHelper.IsPageFull(pageBreakRect, base.SectionBounds))
            {
                base.CurrentPosition = ForcePageBreak(exporterCollection, section);
                base.CurrentPosition = ConvertStandardRow(exporterCollection, headerRow);
            }
        }
		public NewPageEventArgs(ExporterCollection itemsList)
		{
			this.itemsList = itemsList;
		}
		protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
		{
			base.ForcePageBreak(exporterCollection,section);
			return CalculateStartPosition();
		}
Exemple #31
0
		/*
		public static void Displaychain (ReportItemCollection items)
		{
			foreach(BaseReportItem i in items)
			{
				ISimpleContainer ic = i as ISimpleContainer;
				if (ic != null) {
					Console.WriteLine("recursive with <{0}> as parent",i.ToString());
					Displaychain(ic.Items);
				} else {
					Console.WriteLine("{0}",i.ToString());
				}
			}
		}
		*/
		
		public static void ShowLocations (ExporterCollection items)
		{
			foreach (BaseExportColumn element in items) {
				ExportContainer cont = element as ExportContainer;
				if (cont != null) {
					ShowLocations(cont.Items);
				}
			}
		}
Exemple #32
0
        private static int Main(string[] args)
        {
            var providers = new AssemblyProviderFactoryCollection(
                new AssemblyProviderFactory(),
                new DirectoryAssemblyProviderFactory(),
                new NuGetAssemblyProviderFactory(new Providers.NuGet.NuGet()),
                new PreviousNuGetAssemblyProviderFactory(new PreviousNugetLocator()),
                new GitHubAssemblyProviderFactory(new Git(Environment.GetEnvironmentVariable("GIT")))
                );

            var exporters = new ExporterCollection(
                new XmlExporter(),
                new MarkdownExporter(),
                new AsciiDocExporter()
                );

            var options = new OptionSet
            {
                { "t|target=", "the assembly targets. Defaults to *all* assemblies located by the provider", AddTarget },
                { "f|format=", $"the format of the diff output. Supported formats are {exporters.SupportedFormats}. Defaults to {_format}", f => _format = f },
                { "o|output=", "the output directory. Defaults to current directory", o => _output = o },
                { "h|?|help", "show this message and exit", h => _help = h != null },
            };

            if (_help)
            {
                ShowHelp(options, providers);
                return(2);
            }


            if (args.Length < 2)
            {
                ShowHelp(options, providers);
                return(2);
            }

            List <string> unflaggedArgs;

            try
            {
                unflaggedArgs = options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Try 'Differ.exe --help' for more information.");
                Environment.ExitCode = 1;
                return(2);
            }

            try
            {
                var firstProvider  = providers.GetProvider(unflaggedArgs[0]);
                var secondProvider = providers.GetProvider(unflaggedArgs[1]);

                if (!exporters.Contains(_format))
                {
                    throw new Exception($"No exporter for format '{_format}'");
                }

                var exporter = exporters[_format];

                var first  = firstProvider.GetAssemblies(Targets).ToList();
                var second = secondProvider.GetAssemblies(Targets).ToList();
                var pairs  = CreateAssemblyPairs(first, second).ToList();

                foreach (var assemblyPair in pairs)
                {
                    assemblyPair.Diff =
                        APIDiffHelper.GetAPIDifferences(assemblyPair.First.FullName, assemblyPair.Second.FullName);

                    if (assemblyPair.Diff == null)
                    {
                        Console.WriteLine($"No diff between {assemblyPair.First.FullName} and {assemblyPair.Second.FullName}");
                        continue;
                    }
                    Console.WriteLine($"Difference found: {firstProvider.GetType().Name}:{assemblyPair.First.Name} and {secondProvider.GetType().Name}:{assemblyPair.Second.Name}");

                    exporter.Export(assemblyPair, _output);
                }

                if (!pairs.Any())
                {
                    Console.Error.WriteLine($"Unable to create diff!");
                    Console.Error.WriteLine($" {firstProvider.GetType().Name}: {first.Count()} assemblies");
                    Console.Error.WriteLine($" {secondProvider.GetType().Name}: {second.Count()} assemblies");

                    return(1);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
                return(1);
            }
            return(0);
        }