Exemple #1
0
        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)]");
            }
        }
Exemple #2
0
        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);
        }