public void Load(folderNode folder, String filenamePrefix = "datapoints") { var bl = folder.findFiles(filenamePrefix + "*.xml", System.IO.SearchOption.TopDirectoryOnly); foreach (var block in bl) { var b = DataPointMapBlock.Load(block); MapBlocks.Add(b); } }
/// <summary> /// Gets the data point pairs: Junction method /// </summary> /// <param name="input">The input.</param> /// <param name="ChildrenCountTrigger">The children count trigger.</param> /// <returns></returns> public DataPointMapperResult GetDataPointPairs(LeafNodeDictionaryAnalysis input) { List <DataPointMapEntry> dpList = new List <DataPointMapEntry>(); var allLeafs = input.CompleteGraph.getAllLeafs(); List <String> dpRoots = new List <string>(); foreach (graphWrapNode <LeafNodeDictionaryEntry> g in allLeafs) { var inputLeaf = input.Nodes.GetEntry(g.path); if (g.parent != null) { if (inputLeaf.Category.HasFlag(NodeInTemplateRole.Dynamic)) { graphWrapNode <LeafNodeDictionaryEntry> head = g; Int32 pC = head.Count(); while (pC < ChildrenCountTrigger) { if (head.parent != null) { head = head.parent as graphWrapNode <LeafNodeDictionaryEntry>; if (head == null) { break; } else { pC = head.parent.Count(); } } } if (head != null) { if (head.path.isNullOrEmpty()) { if (!dpRoots.Contains(head.path)) { dpRoots.Add(head.path); } } } } else { } } } foreach (String root in dpRoots) { var dpItems = input.Nodes.items.Where(x => x.XPath.StartsWith(root)).ToList(); List <DataPointMapEntry> dp_tmp = MergeEntriesToDataPoints(dpItems, input); if (dp_tmp.Count > 1 && flags.HasFlag(DataPointMapBlockDetectionFlags.AllowMultiColumnDataPoints)) { DataPointMapEntry parent_dp = new DataPointMapEntry() { DataPointXPathRoot = root, LabelXPathRelative = "", DataXPathRelative = "", Properties = dp_tmp }; foreach (var d in dp_tmp) { d.DataPointXPathRoot = ""; } dpList.Add(parent_dp); } else { dpList.AddRange(dp_tmp); } } List <graphWrapNode <LeafNodeDictionaryEntry> > dpRootGraphNodes = new List <graphWrapNode <LeafNodeDictionaryEntry> >(); foreach (String root in dpRoots) { var cp = input.CompleteGraph.GetChildAtPath(root); if (cp != null) { dpRootGraphNodes.AddUnique(cp); } } DataPointMapperResult output = new DataPointMapperResult(); List <String> BlockRoots = new List <string>(); foreach (graphWrapNode <LeafNodeDictionaryEntry> g in dpRootGraphNodes) { if (g.parent != null) { graphWrapNode <LeafNodeDictionaryEntry> head = g; Int32 pC = head.Count(); while (pC < JunctionSizeMin) { if (head.level > 1) { head = head.parent as graphWrapNode <LeafNodeDictionaryEntry>; if (head.parent == null) { break; } pC = head.parent.Count(); } } if (head != null) { if (!head.path.isNullOrEmpty()) { if (!BlockRoots.Contains(head.path)) { BlockRoots.Add(head.path); } } } } } if (!BlockRoots.Any()) { return(output); } if (flags.HasFlag(DataPointMapBlockDetectionFlags.maximizeBlockSize)) { BlockRoots = BlockRoots.OrderBy(x => x.Length).ToList(); } else if (flags.HasFlag(DataPointMapBlockDetectionFlags.maximizeDataRelatness)) { BlockRoots = BlockRoots.OrderByDescending(x => x.Length).ToList(); } foreach (String blockRoot in BlockRoots) { var b = new DataPointMapBlock(blockRoot); var dpl = dpList.ToList().Where(x => x.DataPointXPathRoot.StartsWith(blockRoot)); foreach (DataPointMapEntry e in dpl) { dpList.Remove(e); b.DataPoints.Add(e); } if (b.DataPoints.Count > 0) { output.MapBlocks.Add(b); } } //if (flags.HasFlag(DataPointMapBlockDetectionFlags.BreakByDimensions)) //{ // BreakBlocksByRecordDimensions(output.MapBlocks); //} return(output); }