Пример #1
0
        /// <summary>
        /// Reconstructs an icon formatting rule from the specified XML image.
        /// </summary>
        /// <param name="node">The node containing the icon formatting rule XML.</param>
        /// <returns>The icon formatting rule.</returns>
        private static IconFormattingRule ReadIconFormattingRuleXml(XmlNode node)
        {
            IconFormattingRule formattingRule = new IconFormattingRule();

            XmlNodeList ruleNodes = XmlHelper.SelectNodes(node, "iconFormattingRule/rules/rule");

            foreach (XmlNode ruleNode in ruleNodes)
            {
                IconRule rule = new IconRule();

                rule.Color     = ColorInfoHelper.ReadColorInfoXml(ruleNode, "color");
                rule.Condition = ConditionHelper.ReadConditionXml(ruleNode, "condition");
                rule.Icon      = (IconType)XmlHelper.ReadElementEnum(ruleNode, "icon", typeof(IconType), IconType.None);
                XmlNode iconIdNode = ruleNode.SelectSingleNode("iconId");
                if (iconIdNode != null)
                {
                    long iconId;
                    if (long.TryParse(iconIdNode.InnerText, out iconId))
                    {
                        rule.IconId = iconId;
                    }
                }
                rule.Scale = 1;
                formattingRule.Rules.Add(rule);
            }

            return(formattingRule);
        }
Пример #2
0
        /// <summary>
        /// Writes the icon formatting rule to the specified XML writer.
        /// </summary>
        /// <param name="iconFormattingRule">The icon formatting rule to serialize.</param>
        /// <param name="xmlWriter">The XML writer used to write the image to.</param>
        private static void WriteIconFormattingRuleXml(IconFormattingRule iconFormattingRule, XmlWriter xmlWriter)
        {
            xmlWriter.WriteStartElement("iconFormattingRule");
            xmlWriter.WriteStartElement("rules");
            foreach (IconRule rule in iconFormattingRule.Rules)
            {
                xmlWriter.WriteStartElement("rule");

                ColorInfoHelper.WriteColorInfoXml("color", rule.Color, xmlWriter);
                xmlWriter.WriteElementString("icon", rule.Icon.ToString());
                ConditionHelper.WriteConditionXml("condition", rule.Condition, xmlWriter);
                // Write out the Icon ID
                if (rule.IconId.HasValue)
                {
                    xmlWriter.WriteStartElement("iconId");
                    xmlWriter.WriteAttributeString("entityRef", "true");
                    xmlWriter.WriteString(rule.IconId.Value.ToString(CultureInfo.InvariantCulture));
                    xmlWriter.WriteEndElement();
                }

                xmlWriter.WriteEndElement(); // rule
            }
            xmlWriter.WriteEndElement();     // rules
            xmlWriter.WriteEndElement();     // iconFormattingRule
        }
Пример #3
0
        /// <summary>
        /// Writes the column formats to the specified xml writer.
        /// </summary>
        /// <param name="columnFormats">The column formats to serialize.</param>
        /// <param name="xmlWriter">The writer used to write the xml.</param>
        public static void WriteColumnFormatsXml(IList <ColumnFormatting> columnFormats, XmlWriter xmlWriter)
        {
            if (columnFormats == null)
            {
                throw new ArgumentNullException("columnFormats");
            }

            if (xmlWriter == null)
            {
                throw new ArgumentNullException("xmlWriter");
            }

            if (columnFormats.Count > 0)
            {
                xmlWriter.WriteStartElement("columnFormats");

                foreach (ColumnFormatting columnFormat in columnFormats)
                {
                    xmlWriter.WriteStartElement("columnFormat");
                    xmlWriter.WriteElementString("queryColumnId", columnFormat.QueryColumnId.ToString());
                    xmlWriter.WriteElementString("columnName", columnFormat.ColumnName);
                    columnFormat.ColumnType.ToXml(xmlWriter);

                    xmlWriter.WriteElementString("showText", columnFormat.ShowText.ToString());
                    xmlWriter.WriteElementString("formatString", columnFormat.FormatString);

                    xmlWriter.WriteElementString("decimalPlaces", columnFormat.DecimalPlaces.ToString());
                    xmlWriter.WriteElementString("prefix", columnFormat.Prefix);
                    xmlWriter.WriteElementString("suffix", columnFormat.Suffix);
                    xmlWriter.WriteElementString("lines", columnFormat.Lines.ToString());
                    if (columnFormat.FormattingRule is ColorFormattingRule)
                    {
                        ColorFormattingRule colorRule = columnFormat.FormattingRule as ColorFormattingRule;
                        WriteColorFormattingRuleXml(colorRule, xmlWriter);
                    }
                    else if (columnFormat.FormattingRule is IconFormattingRule)
                    {
                        IconFormattingRule iconRule = columnFormat.FormattingRule as IconFormattingRule;
                        WriteIconFormattingRuleXml(iconRule, xmlWriter);
                    }
                    else if (columnFormat.FormattingRule is BarFormattingRule)
                    {
                        BarFormattingRule barRule = columnFormat.FormattingRule as BarFormattingRule;
                        WriteBarFormattingRuleXml(barRule, xmlWriter);
                    }
                    else if (columnFormat.FormattingRule is ImageFormattingRule)
                    {
                        var imageRule = columnFormat.FormattingRule as ImageFormattingRule;
                        WriteImageFormattingRuleXml(imageRule, xmlWriter);
                    }
                    xmlWriter.WriteEndElement(); //columnFormat
                }

                xmlWriter.WriteEndElement(); //columnFormats
            }
        }
        /// <summary>
        /// </summary>
        /// <param name="index"></param>
        /// <param name="ifr1"></param>
        /// <param name="ifr2"></param>
        private static void CompareIconFormattingRules(int index, IconFormattingRule ifr1, IconFormattingRule ifr2)
        {
            Assert.IsNotNull(ifr1, "Format Index:{0} IconFormattingRule 1 should not be null.", index.ToString(CultureInfo.InvariantCulture));
            Assert.IsNotNull(ifr2, "Format Index:{0} IconFormattingRule 2 should not be null.", index.ToString(CultureInfo.InvariantCulture));

            Assert.IsNotNull(ifr1.Rules, "Format Index:{0} IconFormattingRule.Rules 1 should not be null.", index.ToString(CultureInfo.InvariantCulture));
            Assert.IsNotNull(ifr2.Rules, "Format Index:{0} IconFormattingRule.Rules 2 should not be null.", index.ToString(CultureInfo.InvariantCulture));

            Assert.AreEqual(ifr1.Rules.Count, ifr2.Rules.Count, "Format Index:{0} IconFormattingRule.Rules.Count is invalid.", index.ToString(CultureInfo.InvariantCulture));

            for (int ri = 0; ri < ifr1.Rules.Count; ri++)
            {
                IconRule ir1 = ifr1.Rules[ri];
                IconRule ir2 = ifr2.Rules[ri];

                Assert.AreEqual(ir1.Color.A, ir2.Color.A, "Format Index:{0} Rule Index:{1} Color.A is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Color.R, ir2.Color.R, "Format Index:{0} Rule Index:{1} Color.R is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Color.G, ir2.Color.G, "Format Index:{0} Rule Index:{1} Color.G is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Color.B, ir2.Color.B, "Format Index:{0} Rule Index:{1} Color.B is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));

                Assert.AreEqual(ir1.Icon, ir2.Icon, "Format Index:{0} Rule Index:{1} Icon is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));

                Assert.AreEqual(ir1.Condition.ColumnName, ir2.Condition.ColumnName, "Format Index:{0} Rule Index:{1} Condition.ColumnName is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Condition.ColumnType.GetType( ), ir2.Condition.ColumnType.GetType( ), "Format Index:{0} Rule Index:{1} Condition.ColumnType is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Condition.Operator, ir2.Condition.Operator, "Format Index:{0} Rule Index:{1} Condition.Operator is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));
                Assert.AreEqual(ir1.Condition.Arguments.Count, ir2.Condition.Arguments.Count, "Format Index:{0} Rule Index:{1} Condition.Arguments.Count is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture));

                for (int ti = 0; ti < ir1.Condition.Arguments.Count; ti++)
                {
                    TypedValue tv1 = ir1.Condition.Arguments[ti];
                    TypedValue tv2 = ir1.Condition.Arguments[ti];

                    Assert.AreEqual(tv1.Type, tv2.Type, "Format Index:{0} Rule Index:{1} Arg Index:{2} Argument.Type is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture), ti.ToString(CultureInfo.InvariantCulture));
                    Assert.AreEqual(tv1.Value, tv2.Value, "Format Index:{0} Rule Index:{1} Arg Index:{2} Argument.Value is invalid", index.ToString(CultureInfo.InvariantCulture), ri.ToString(CultureInfo.InvariantCulture), ti.ToString(CultureInfo.InvariantCulture));
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionalFormatter" /> class.
        /// </summary>
        /// <param name="columnFormats">The column formats.</param>
        /// <param name="additionalColumnInfo">The additional column info.</param>
        /// <param name="reportResult">The report result.</param>
        public ConditionalFormatter(IList <ColumnFormatting> columnFormats, IEnumerable <ResultColumn> additionalColumnInfo, ReportResult reportResult)
        {
            _reportResult = reportResult;

            if (columnFormats != null)
            {
                _formatRules = new Dictionary <string, List <ConditionInfo> >(columnFormats.Count);

                // Cache the formatting rules into a dictionary for fast lookup.
                Dictionary <string, ColumnFormatting> formatters = columnFormats.ToDictionary(cf => cf.EntityId.ToString(CultureInfo.InvariantCulture));

                foreach (KeyValuePair <string, ColumnFormatting> keyValuePair in formatters.Where(f => f.Value != null))
                {
                    BarFormattingRule barFormattingRule = keyValuePair.Value.FormattingRule as BarFormattingRule;
                    if (barFormattingRule != null)
                    {
                        ConditionInfo condition = new ConditionInfo
                        {
                            ColorRule = new ColorRule {
                                BackgroundColor = barFormattingRule.Color
                            },
                            Style    = ConditionalFormatStyleEnum.ProgressBar,
                            ShowText = keyValuePair.Value.ShowText
                        };
                        DatabaseType columnForFormatType = additionalColumnInfo.FirstOrDefault(ac => ac.RequestColumn.EntityId.ToString(CultureInfo.InvariantCulture) == keyValuePair.Key).ColumnType;
                        if (columnForFormatType != null)
                        {
                            barFormattingRule.Minimum.Type = columnForFormatType;
                            barFormattingRule.Maximum.Type = columnForFormatType;
                        }

                        DateTime minumumDateTime;
                        if (barFormattingRule.Minimum.Value != null &&
                            (columnForFormatType is DateType || columnForFormatType is TimeType || columnForFormatType is DateTimeType) &&
                            DateTime.TryParse(barFormattingRule.Minimum.Value.ToString(), out minumumDateTime))
                        {
                            condition.LowerBounds = minumumDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                        }
                        else
                        {
                            float minimum;
                            condition.LowerBounds = float.TryParse(barFormattingRule.Minimum.ValueString, out minimum) ? minimum : 0.0f;
                        }
                        DateTime maximumDateTime;
                        if (barFormattingRule.Maximum.Value != null &&
                            (columnForFormatType is DateType || columnForFormatType is TimeType || columnForFormatType is DateTimeType) &&
                            DateTime.TryParse(barFormattingRule.Maximum.Value.ToString(), out maximumDateTime))
                        {
                            condition.Upperbounds = maximumDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                        }
                        else
                        {
                            float maximum;
                            if (float.TryParse(barFormattingRule.Maximum.ValueString, out maximum))
                            {
                                condition.Upperbounds = maximum;
                            }
                        }
                        _formatRules.Add(keyValuePair.Key, new List <ConditionInfo>(new[] { condition }));
                    }
                    ColorFormattingRule colorFormattingRule = keyValuePair.Value.FormattingRule as ColorFormattingRule;
                    if (colorFormattingRule != null)
                    {
                        IList <ColorRule>    colorRules = colorFormattingRule.Rules;
                        List <ConditionInfo> predicates = new List <ConditionInfo>(colorRules.Count);
                        foreach (ColorRule colorRule in colorRules)
                        {
                            ResultColumn gridResultColumn = additionalColumnInfo.FirstOrDefault(gu => gu.RequestColumn.EntityId.ToString(CultureInfo.InvariantCulture) == keyValuePair.Key);
                            if (gridResultColumn == null)
                            {
                                continue;
                            }
                            colorRule.Condition.Arguments = TypedValuesForOperatorColumnType(colorRule.Condition.Arguments, colorRule.Condition.Operator, gridResultColumn.ColumnType);
                        }
                        predicates.AddRange(from colorRule in colorRules
                                            let gridResultColumn = additionalColumnInfo.FirstOrDefault(gu => gu.RequestColumn.EntityId.ToString(CultureInfo.InvariantCulture) == keyValuePair.Key)
                                                                   let predicate = PredicateForRule(colorRule.Condition, IsResourceCondition(gridResultColumn), gridResultColumn, this)
                                                                                   where (predicate != null)
                                                                                   select new ConditionInfo
                        {
                            Predicate = predicate,
                            ColorRule = colorRule,
                            Operator  = colorRule.Condition.Operator,
                            Values    = colorRule.Condition.Arguments,
                            Style     = ConditionalFormatStyleEnum.Highlight,
                            ShowText  = keyValuePair.Value.ShowText
                        });
                        _formatRules.Add(keyValuePair.Key, predicates);
                    }
                    IconFormattingRule iconFormattingRule = keyValuePair.Value.FormattingRule as IconFormattingRule;
                    if (iconFormattingRule != null)
                    {
                        IList <IconRule> iconRulesRules = iconFormattingRule.Rules;
                        foreach (IconRule iconRule in iconRulesRules)
                        {
                            ResultColumn gridResultColumn = additionalColumnInfo.FirstOrDefault(gu => gu.RequestColumn.EntityId.ToString(CultureInfo.InvariantCulture) == keyValuePair.Key);
                            if (gridResultColumn == null)
                            {
                                continue;
                            }
                            iconRule.Condition.Arguments = TypedValuesForOperatorColumnType(iconRule.Condition.Arguments, iconRule.Condition.Operator, gridResultColumn.ColumnType);
                        }
                        List <ConditionInfo> predicates = new List <ConditionInfo>(iconRulesRules.Count);
                        predicates.AddRange(from iconRule in iconRulesRules
                                            let gridResultColumn = additionalColumnInfo.FirstOrDefault(gu => gu.RequestColumn.EntityId.ToString(CultureInfo.InvariantCulture) == keyValuePair.Key)
                                                                   let predicate = PredicateForRule(iconRule.Condition, IsResourceCondition(gridResultColumn), gridResultColumn, this)
                                                                                   where (predicate != null)
                                                                                   select new ConditionInfo
                        {
                            Predicate = predicate,
                            IconRule  = iconRule,
                            Operator  = iconRule.Condition.Operator,
                            Values    = iconRule.Condition.Arguments,
                            Style     = ConditionalFormatStyleEnum.Icon,
                            ShowText  = keyValuePair.Value.ShowText
                        });
                        _formatRules.Add(keyValuePair.Key, predicates);
                    }
                }
            }
        }