private static int[] GetThumbnailSizePair(ThumbnailSizeEnum e)
 {
     int[] pair = new int[2];
     switch (e)
     {
         case ThumbnailSizeEnum.Small:
             pair[0] = pair[1] = 48;
             break;
         case ThumbnailSizeEnum.Medium:
             pair[0] = pair[1] = 120;
             break;
     }
     return pair;
 }
 public static byte[] MakeThumbnail(string originalImagePath, ThumbnailSizeEnum e)
 {
     int[] pair = GetThumbnailSizePair(e);
     return MakeThumbnail(originalImagePath, pair[0], pair[1], OperationModeEnum.HW);
 }
        /// <summary>
        /// Builds a list of conditional format rules for the report.
        /// </summary>
        /// <returns>Dictionary{GuidList{ReportConditionalFormatRule}}.</returns>
        public Dictionary <string, ReportColumnConditionalFormat> FormatsForReport(out Dictionary <string, ReportImageScale> imageScaleRules)
        {
            imageScaleRules = null;
            if (_formatRules != null && _formatRules.Count > 0)
            {
                Dictionary <string, ReportColumnConditionalFormat> formats = new Dictionary <string, ReportColumnConditionalFormat>(_formatRules.Count);
                EntityRef         imageScale        = null;
                EntityRef         imageSize         = null;
                ThumbnailSizeEnum thumbnailSizeEnum = null;
                foreach (KeyValuePair <string, List <ConditionInfo> > formatRule in _formatRules)
                {
                    ReportColumnConditionalFormat columnFormat = new ReportColumnConditionalFormat();

                    List <ReportConditionalFormatRule> rules = new List <ReportConditionalFormatRule>();
                    foreach (ConditionInfo conditionInfo in formatRule.Value)
                    {
                        if (rules.Count <= 0)
                        {
                            columnFormat.Style     = conditionInfo.Style;
                            columnFormat.ShowValue = conditionInfo.ShowText;
                        }
                        ReportConditionalFormatRule rule = new ReportConditionalFormatRule
                        {
                            Operator = conditionInfo.Operator,
                        };
                        if (conditionInfo.ColorRule != null)
                        {
                            if (conditionInfo.ColorRule.ForegroundColor != null)
                            {
                                rule.ForegroundColor = new ReportConditionColor
                                {
                                    Alpha = conditionInfo.ColorRule.ForegroundColor.A,
                                    Blue  = conditionInfo.ColorRule.ForegroundColor.B,
                                    Green = conditionInfo.ColorRule.ForegroundColor.G,
                                    Red   = conditionInfo.ColorRule.ForegroundColor.R
                                };
                            }
                            if (conditionInfo.ColorRule.BackgroundColor != null)
                            {
                                rule.BackgroundColor = new ReportConditionColor
                                {
                                    Alpha = conditionInfo.ColorRule.BackgroundColor.A,
                                    Blue  = conditionInfo.ColorRule.BackgroundColor.B,
                                    Green = conditionInfo.ColorRule.BackgroundColor.G,
                                    Red   = conditionInfo.ColorRule.BackgroundColor.R
                                };
                            }
                        }
                        if (conditionInfo.LowerBounds != null || conditionInfo.Upperbounds != null)
                        {
                            rule.PercentageBounds = new ReportPercentageBounds
                            {
                                LowerBounds = conditionInfo.LowerBounds,
                                UpperBounds = conditionInfo.Upperbounds
                            };
                        }
                        if (conditionInfo.IconRule != null && (conditionInfo.IconRule.IconId ?? 0) > 0)
                        {
                            if ((conditionInfo.IconRule.CfEntityId ?? 0) > 0)
                            {
                                IEntity cfEntity = Entity.Get(conditionInfo.IconRule.CfEntityId.Value);
                                var     cfi      = cfEntity.As <ConditionalFormatIcon>();
                                if (cfi != null)
                                {
                                    rule.CfEntityId    = cfi.Id;
                                    rule.ImageEntityId = cfi.CondFormatImage != null ? cfi.CondFormatImage.Id : -1;
                                }
                            }
                            else
                            {
                                IEntity entity = Entity.Get(conditionInfo.IconRule.IconId.Value);
                                if (entity.Is <IconFileType>())
                                {
                                    rule.ImageEntityId = conditionInfo.IconRule.IconId.Value;
                                }
                            }

                            if (imageScale == null)
                            {
                                imageScale = new EntityRef("core", "scaleImageProportionally");
                            }
                            if (imageSize == null)
                            {
                                imageSize = new EntityRef("console", "iconThumbnailSize");
                            }
                            if (thumbnailSizeEnum == null)
                            {
                                thumbnailSizeEnum = Entity.Get <ThumbnailSizeEnum>(imageSize);
                            }
                            if (imageScaleRules == null)
                            {
                                imageScaleRules = new Dictionary <string, ReportImageScale>();
                            }
                            if (!imageScaleRules.ContainsKey(formatRule.Key))
                            {
                                ReportImageScale reportImageScale = new ReportImageScale
                                {
                                    ImageScaleId = imageScale.Id,
                                    ImageSizeId  = imageSize.Id,
                                    ImageWidth   = thumbnailSizeEnum.ThumbnailWidth ?? 16,
                                    ImageHeight  = thumbnailSizeEnum.ThumbnailHeight ?? 16
                                };
                                imageScaleRules.Add(formatRule.Key, reportImageScale);
                            }
                        }
                        // Handle the values for the typed value only if this is not an icon as it has relationships
                        if (conditionInfo.Values != null && conditionInfo.Values.Count > 0)
                        {
                            if (conditionInfo.Values[0].Type is ChoiceRelationshipType || conditionInfo.Values[0].Type is InlineRelationshipType || conditionInfo.Values[0].Type is StructureLevelsType)
                            {
                                rule.Values = ProcessConditionValues(conditionInfo.Values);
                                // If there are no values returned then this must be a text string rather than a list of entity identifiers.
                                if (rule.Values == null)
                                {
                                    rule.Value = conditionInfo.Values[0].ValueString;
                                }
                            }
                            else
                            {
                                DateTime dateTimeValue;
                                if ((conditionInfo.Values[0].Type is DateTimeType || conditionInfo.Values[0].Type is TimeType || conditionInfo.Values[0].Type is DateType) &&
                                    (DateTime.TryParse(conditionInfo.Values[0].Value.ToString(), out dateTimeValue)))
                                {
                                    rule.Value = dateTimeValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
                                }
                                else
                                {
                                    rule.Value = conditionInfo.Values[0].ValueString;
                                }
                            }
                        }
                        rules.Add(rule);
                    }
                    columnFormat.Rules = rules;
                    formats.Add(formatRule.Key, columnFormat);
                }
                return(formats);
            }
            return(null);
        }