public static void _BuildGraphFromIR(string ir) { HashSet <Contract> contracts = new HashSet <Contract>(); string separator = ","; _Contract currentContract = null; int nCovers = 0; int nodeExtnId = 0; CoverNode currentCoverNode = null; bool processingCovers = false; HashSet <CoverNode> coverNodes = null; int pValueType = -1; bool _hasPercentCover = false; bool _hasPercentAffected = false; int nNodes = 0; bool processingNodes = false; HashSet <TermNode> nodes = null; TermNode currentTermNode = null; //string[] lines = Regex.Split(ir, System.Environment.NewLine).ToList().Where(s => !string.IsNullOrEmpty(s)).ToArray<string>(); //int c = 0; //while (true) //{ // if (c >= lines.Length) // break; // string line = lines[c]; // string[] values = Regex.Split(line, separator); // if (values == null || values.Length == 0) // { // c++; // continue; // } // //Trim values // for (int j = 0; j < values.Length; j++) // { // values[j] = values[j].Trim(); // } //} foreach (string line in Regex.Split(ir, System.Environment.NewLine).ToList().Where(s => !string.IsNullOrEmpty(s))) { string[] values = Regex.Split(line, separator); if (values == null || values.Length == 0) { continue; } //Trim values for (int i = 0; i < values.Length; i++) { values[i] = values[i].Trim(); } if (values[0].Equals(";")) { if (currentContract != null) { if (currentCoverNode != null) { coverNodes.Add(currentCoverNode); currentCoverNode = null; } // add covers to contract foreach (CoverNode coverNode in coverNodes) { currentContract.AddCoverNode(coverNode); } contracts.Add(currentContract); } currentContract = null; continue; } if (values[0].Equals("CONTRACT")) { if (currentContract != null) { if (currentCoverNode != null) { coverNodes.Add(currentCoverNode); currentCoverNode = null; } // add covers to contract foreach (CoverNode coverNode in coverNodes) { currentContract.AddCoverNode(coverNode); } contracts.Add(currentContract); } currentContract = new Primary(values[1]); currentContract.Subject = new Subject(new Schedule(), new HashSet <ICauseOfLoss>(), new HashSet <string>(), false); currentContract.Initialize(); continue; } if (values[0].Equals("nCover")) { nCovers = int.Parse(values[1]); processingCovers = true; continue; } if (processingCovers) { if (coverNodes == null) { coverNodes = new HashSet <CoverNode>(); } if (values[0].Equals("PARENT")) { if (currentCoverNode != null) { coverNodes.Add(currentCoverNode); } if (pValueType == 1) { _hasPercentCover = true; } else if (pValueType == 2) { _hasPercentAffected = true; } currentCoverNode = new CoverNode(); currentCoverNode.ExtnId = (nodeExtnId++).ToString(); currentCoverNode.parentId = values[1]; continue; } if (values[0].Equals("nChild")) { currentCoverNode.nChild = int.Parse(values[1]); continue; } if (values[0].Equals("CHILD")) { currentCoverNode.vSubCover.Add(values[1]); continue; } if (values[0].Equals("SHARE")) { currentCoverNode.Share = double.Parse(values[1]); // ? *= 0.01 continue; } if (values[0].Equals("OCCLIM")) { currentCoverNode.Limit = double.Parse(values[1]); continue; } if (values[0].Equals("AGGLIM")) { currentCoverNode.AggLimit = double.Parse(values[1]); continue; } if (values[0].Equals("OCCLIMPC")) { currentCoverNode.m_limitPC = double.Parse(values[1]); pValueType = 1; continue; } if (values[0].Equals("AGGLIMPC")) { currentCoverNode.m_agglimitPC = double.Parse(values[1]); pValueType = 1; continue; } if (values[0].Equals("OCCLIMPA")) { currentCoverNode.m_limitPA = double.Parse(values[1]); pValueType = 2; continue; } if (values[0].Equals("AGGLIMPA")) { currentCoverNode.m_agglimitPA = double.Parse(values[1]); pValueType = 2; continue; } if (values[0].Equals("OCCATT")) { currentCoverNode.Attach = double.Parse(values[1]); continue; } if (values[0].Equals("AGGATT")) { currentCoverNode.m_aggach = double.Parse(values[1]); continue; } if (values[0].Equals("OCCATTPC")) { currentCoverNode.m_attachPC = double.Parse(values[1]); pValueType = 1; continue; } if (values[0].Equals("AGGATTPC")) { currentCoverNode.m_aggachPC = double.Parse(values[1]); pValueType = 1; continue; } if (values[0].Equals("OCCATTPA")) { currentCoverNode.m_attachPA = double.Parse(values[1]); pValueType = 2; continue; } if (values[0].Equals("AGGATTPA")) { currentCoverNode.m_aggachPA = double.Parse(values[1]); pValueType = 2; continue; } if (values[0].Equals("SETS")) { if (values[1].Equals("MAX")) { currentCoverNode._setsType = (int)ContractEntry.COVER_SETS_MAX; } else if (values[1].Equals("MIN")) { currentCoverNode._setsType = (int)ContractEntry.COVER_SETS_MIN; } else if (values[1].Equals("SUM")) { currentCoverNode._setsType = (int)ContractEntry.COVER_SETS_SUM; } continue; } if (values[0].Equals("PAY")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAY; currentCoverNode._pay = double.Parse(values[1]); continue; } if (values[0].Equals("PAYF")) { // TODO : _pay? if (values[1].Equals("MAX")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAYF_MAX; } else if (values[1].Equals("MIN")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAYF_MIN; } continue; } if (values[0].Equals("PAYP")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAYP; currentCoverNode._pay = double.Parse(values[1]) * 0.01; continue; } if (values[0].Equals("PAYFP")) { // TODO : _pay? if (values[1].Equals("MAX")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAYFP_MAX; } else if (values[1].Equals("MIN")) { currentCoverNode._payfType = (int)ContractEntry.COVER_PAYFP_MIN; } continue; } if (values[0].Equals("nNode")) { coverNodes.Add(currentCoverNode); currentCoverNode = null; processingCovers = false; processingNodes = true; nNodes = int.Parse(values[1]); currentContract.nNodes = nNodes; if (pValueType == 1) { _hasPercentCover = true; } else if (pValueType == 2) { _hasPercentAffected = true; } continue; } } if (processingNodes) { if (nodes == null) { nodes = new HashSet <TermNode>(); } if (values[0].Equals("PARENT")) { if (currentTermNode != null) { nodes.Add(currentTermNode); } currentTermNode = new TermNode(); currentTermNode.ExtnId = (nodeExtnId++).ToString(); for (int k = 1; k < values.Length; k++) { currentTermNode.AddParentIdx(values[k]); } continue; } } } if (currentContract != null) { if (currentCoverNode != null) { coverNodes.Add(currentCoverNode); currentCoverNode = null; } // add covers to contract foreach (CoverNode coverNode in coverNodes) { currentContract.AddCoverNode(coverNode); } contracts.Add(currentContract); } }