private static string calculateTreeNodeText(IO2Finding o2Finding, string propertyToUse, string filterToUse) { string nodeText; try { switch (propertyToUse) { case "severity": return(OzasmtUtils.getSeverityFromId(o2Finding.severity)); case "confidence": return(OzasmtUtils.getConfidenceFromId(o2Finding.confidence)); case "o2Traces": var allO2Traces = OzasmtUtils.getAllTraces(o2Finding.o2Traces); return((allO2Traces.Keys.Count > 0) ? "# nodes: {0}".format(allO2Traces.Keys.Count) : ""); default: nodeText = PublicDI.reflection.getProperty(propertyToUse, o2Finding).ToString(); break; } if (nodeText != "") { if (RegEx.findStringInString(nodeText, filterToUse) || nodeText.index(filterToUse) > -1) { return(nodeText); } else { return(""); } } return(nodeText); } catch (Exception ex) { PublicDI.log.error("in calculateTreeNodeText: {0}", ex.Message); return("[O2 Error (check logs for details)]"); } }
public static DataTable getDataTableFromO2FindingsLinqQuery(List <object> dataToConvert, int maxNumberOfRecords, ref Dictionary <DataRow, object> mappingOfDataRowsToObjects) { mappingOfDataRowsToObjects = new Dictionary <DataRow, object>(); var dataTable = new DataTable(); try { // calculate Rows names // column names PropertyInfo[] properties = null; foreach (object firstItem in dataToConvert) { // only first time, others will follow //if (dataTable.Columns.Count == 0) { switch (firstItem.GetType().Name) { case "String": case "Byte": case "UInt32": case "Int32": dataTable.Columns.Add(new DataColumn(firstItem.GetType().Name, firstItem.GetType())); break; case "Variant": foreach (string key in ((Variant)firstItem).members.Keys) { switch (key) { case "finding": // this 'finding' is an hardcoded keyword that I am using to represent a complete finding (this way we can also have results to save on queries that result in Variant results break; // don't show these case "getSource": case "o2Traces": dataTable.Columns.Add(new DataColumn(key, typeof(string))); break; default: dataTable.Columns.Add(new DataColumn(key, ((Variant)firstItem).members[key]. GetType())); break; } // object keyValue = ((Variant)firstItem).members[key]; // if (keyValue is List<O2Trace>) // dataTable.Columns.Add(new DataColumn("o2Traces", keyType)); // else //dataTable.Columns.Add(new DataColumn(key, keyType)); //((Variant)firstItem).members[key].GetType())); } break; /* case "o2Trace": * dataTable.Columns.Add(new DataColumn("o2Trace",typeof(string))); * break;*/ default: properties = (firstItem.GetType()).GetProperties(); foreach (PropertyInfo pi in properties) { switch (pi.Name) { case "getSource": case "getSink": case "getLostSink": case "getKnownSink": break; // hide this ones case "confidence": case "severity": dataTable.Columns.Add(new DataColumn(pi.Name, typeof(string))); break; default: Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable <>))) { colType = colType.GetGenericArguments()[0]; } dataTable.Columns.Add(new DataColumn(pi.Name, colType)); break; } } break; } } break; // we only want the first one } // Could add a check to verify that there is an element 0 foreach (object item in dataToConvert) { DataRow dataRow = dataTable.NewRow(); mappingOfDataRowsToObjects.Add(dataRow, item); // this will allow to save the data of the rows selected switch (item.GetType().Name) { case "String": case "Byte": case "UInt32": case "Int32": dataRow[item.GetType().Name] = item; break; case "Variant": foreach (string key in ((Variant)item).members.Keys) { switch (key) { case "finding": // this 'finding' is an hardcoded keyword that I am using to represent a complete finding (this way we can also have results to save on queries that result in Variant results break; // don't show these case "o2Traces": dataRow[key] = ((List <IO2Trace>)((Variant)item)[key]).Count > 0 ? "has smart trace" : "no trace"; break; case "getSource": if (((Variant)item)[key] is IO2Trace) { var o2Trace = (IO2Trace)((Variant)item)[key]; dataRow[key] = o2Trace.signature; } else { dataRow[key] = ".........."; } break; default: dataRow[key] = ((Variant)item)[key]; break; } } break; default: if (properties != null) { foreach (PropertyInfo pi in properties) { switch (pi.Name) { case "getSource": case "getSink": case "getLostSink": case "getKnownSink": break; // hide this ones case "severity": dataRow[pi.Name] = OzasmtUtils.getSeverityFromId((byte)pi.GetValue(item, null)); break; case "confidence": dataRow[pi.Name] = OzasmtUtils.getConfidenceFromId((byte)pi.GetValue(item, null)); break; case "o2Traces": dataRow[pi.Name] = ((List <IO2Trace>)pi.GetValue(item, null)).Count > 0 ? pi.GetValue(item, null) : DBNull.Value; break; default: dataRow[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value; break; } } } /* * { * if (pi.GetValue(rec, null) == null) * dr[pi.Name] = DBNull.Value; * else * { * dr[pi.Name] = pi.GetValue(rec, null); * } * }*/ break; } // dataTable.Rows.Add(dataRow); if (dataTable.Rows.Count > maxNumberOfRecords) { break; } } } catch (Exception ex) { DI.log.ex(ex, " in getDataTableFromO2FindingsLinqQuery ", true); } return(dataTable); }