/// <summary>
        /// Writes the condition to the specified XML writer using the specified XML element name.
        /// </summary>
        /// <param name="elementName">The XML element name that will contain the serialized condition.</param>
        /// <param name="condition">The condition to serialize.</param>
        /// <param name="xmlWriter">The XML writer used to write the image to.</param>
        public static void WriteConditionXml(string elementName, Condition condition, XmlWriter xmlWriter)
        {
            if (string.IsNullOrEmpty(elementName))
            {
                throw new ArgumentNullException("elementName");
            }

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

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

            xmlWriter.WriteStartElement(elementName);
            xmlWriter.WriteElementString("operator", condition.Operator.ToString());
            xmlWriter.WriteElementString("columnName", condition.ColumnName ?? string.Empty);
            condition.ColumnType.ToXml(xmlWriter);

            xmlWriter.WriteStartElement("arguments");
            if (condition.Arguments != null)
            {
                foreach (TypedValue arg in condition.Arguments)
                {
                    TypedValueHelper.WriteTypedValueXml("argument", arg, xmlWriter);
                }
            }
            xmlWriter.WriteEndElement(); // arguments

            xmlWriter.WriteEndElement(); //elementName
        }
Exemple #2
0
        /// <summary>
        /// Builds the script expression.
        /// </summary>
        /// <param name="scriptExpression">The script expression.</param>
        /// <returns>ScriptExpression.</returns>
        private static ScriptExpression BuildScriptExpression(Model.ScriptExpression scriptExpression)
        {
            DatabaseType castType = TypedValueHelper.GetDatabaseType(scriptExpression.ReportExpressionResultType);

            return(new ScriptExpression {
                Script = scriptExpression.ReportScript, ResultType = castType
            });
        }
        /// <summary>
        /// Writes the bar formatting rule to the specified XML writer.
        /// </summary>
        /// <param name="barFormattingRule">The bar formatting rule to serialize.</param>
        /// <param name="xmlWriter">The XML writer used to write the image to.</param>
        private static void WriteBarFormattingRuleXml(BarFormattingRule barFormattingRule, XmlWriter xmlWriter)
        {
            xmlWriter.WriteStartElement("barFormattingRule");

            ColorInfoHelper.WriteColorInfoXml("color", barFormattingRule.Color, xmlWriter);
            TypedValueHelper.WriteTypedValueXml("minimum", barFormattingRule.Minimum, xmlWriter);
            TypedValueHelper.WriteTypedValueXml("maximum", barFormattingRule.Maximum, xmlWriter);

            xmlWriter.WriteEndElement(); // barFormattingRule
        }
        private static Formatting.FormattingRule BuildColumnFormatRule(Model.FormattingRule formattingRule, DatabaseType columnType, IReportToQueryContext context)
        {
            var converter = Factory.Current.Resolve <IReportToQueryPartsConverter>( );

            if (formattingRule.Is <Model.BarFormattingRule>())
            {
                Model.BarFormattingRule      barRule           = formattingRule.As <Model.BarFormattingRule>();
                Formatting.BarFormattingRule barFormattingRule = new Formatting.BarFormattingRule()
                {
                    Color = ColourFromString(barRule.BarColor)
                };
                List <TypedValue> value = TypedValueHelper.TypedValueFromEntity(barRule.BarMinValue);
                if (value != null && value.Count > 0)
                {
                    barFormattingRule.Minimum = value[0];
                }
                value = TypedValueHelper.TypedValueFromEntity(barRule.BarMaxValue);
                if (value != null && value.Count > 0)
                {
                    barFormattingRule.Maximum = value[0];
                }
                return(barFormattingRule);
            }
            if (formattingRule.Is <Model.ColorFormattingRule>())
            {
                Model.ColorFormattingRule modelColourRule = formattingRule.As <Model.ColorFormattingRule>();
                List <ColorRule>          colourRules     = modelColourRule.ColorRules.Count > 0 ?
                                                            modelColourRule.ColorRules.OrderBy(rule => rule.RulePriority ?? 0).Select(colorRule => new ColorRule
                {
                    BackgroundColor = ColourFromString(colorRule.ColorRuleBackground),
                    ForegroundColor = ColourFromString(colorRule.ColorRuleForeground),
                    Condition       = converter.ConvertCondition(colorRule.RuleCondition, columnType, context)
                }).ToList()
                                                             : null;
                Formatting.ColorFormattingRule colourFormattingRule = new Formatting.ColorFormattingRule
                {
                    Rules = colourRules
                };
                return(colourFormattingRule);
            }
            if (formattingRule.Is <Model.IconFormattingRule>())
            {
                Model.IconFormattingRule modelIconFormattingRule = formattingRule.As <Model.IconFormattingRule>();
                return(new Formatting.IconFormattingRule
                {
                    Rules = modelIconFormattingRule.IconRules.OrderBy(rule => rule.RulePriority ?? 0).Select(rule => new Formatting.IconRule
                    {
                        CfEntityId = rule.IconRuleCFIcon != null ? rule.IconRuleCFIcon.Id: -1,
                        IconId = GetIconId(rule),
                        Condition = converter.ConvertCondition(rule.RuleCondition, columnType, context)
                    }).ToList()
                });
            }
            return(null);
        }
        public static void CheckLegacyLoad <T>(TypedValue expectedValue, string legacyXml) where T : IComparable
        {
            const string namespaces   = @"xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://enterprisedata.com.au/readinow/v2/query/2.0""";
            string       legacyXml2   = legacyXml.Replace("<TypedValue", "<TypedValue " + namespaces);
            TypedValue   actualValue  = TypedValueHelper.FromXml(legacyXml2);
            T            expectedData = (T)expectedValue.Value;
            T            actualData   = (T)actualValue.Value;

            Assert.AreEqual(expectedValue.Type.GetType(), actualValue.Type.GetType(), "Check type");
            Assert.IsTrue(expectedData.CompareTo(actualData) == 0, "Check Data");
            Assert.AreEqual(expectedValue.SourceEntityTypeId, actualValue.SourceEntityTypeId, "Check SourceEntityTypeId");
        }
        public static void CheckRoundTrip <T>(TypedValue expectedValue, string expectedXml) where T : IComparable
        {
            // Verify serialize
            string actualXml  = TypedValueHelper.ToXml(expectedValue);
            string actualXml2 = RemoveNamespaces(actualXml);

            Assert.AreEqual(expectedXml, actualXml2, "Check XML");

            // Attempt deserialize
            TypedValue actualValue = TypedValueHelper.FromXml(actualXml);

            // Verify type
            Assert.AreEqual(expectedValue.Type.GetType(), actualValue.Type.GetType(), "Check type");

            // Verify data
            if (expectedValue.Value == null)
            {
                Assert.IsNull(actualValue.Value, "Check null data");
            }
            else
            {
                T expectedData = (T)expectedValue.Value;
                T actualData   = (T)actualValue.Value;

                Assert.IsTrue(expectedData.CompareTo(actualData) == 0, "Check Data");
            }
            Assert.AreEqual(expectedValue.SourceEntityTypeId, actualValue.SourceEntityTypeId,
                            "Check SourceEntityTypeId");

            // Attempt alternate deserialize
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(actualXml);
            TypedValue actualValue2 = TypedValueHelper.FromXml(doc.DocumentElement);

            // Verify type2
            Assert.AreEqual(expectedValue.Type.GetType(), actualValue2.Type.GetType(), "Check type2");

            // Verify data2
            if (expectedValue.Value == null)
            {
                Assert.IsNull(actualValue2.Value, "Check null data2");
            }
            else
            {
                T expectedData = (T)expectedValue.Value;
                T actualData   = (T)actualValue2.Value;

                Assert.IsTrue(expectedData.CompareTo(actualData) == 0, "Check Data2");
            }
            Assert.AreEqual(expectedValue.SourceEntityTypeId, actualValue2.SourceEntityTypeId,
                            "Check SourceEntityTypeId2");
        }
Exemple #7
0
        protected override ScalarExpression OnBuildQuery(QueryBuilderContext context)
        {
            if (ResultType.IsList)
            {
                throw new InvalidOperationException();
            }

            var result = new LiteralExpression
            {
                Value = TypedValueHelper.FromDataType(ResultType.Type, Value)
            };

            return(result);
        }
        /// <summary>
        /// Returns a tree node that is representative of an entity or.
        /// </summary>
        /// <param name="context">Context information about this query building session, including the target structured query object.</param>
        /// <param name="allowReuse">A dedicated node should be returned because the caller intends on disturbing it.</param>
        /// <returns>A query node that can be used within the query.</returns>
        public override SQ.Entity OnBuildQueryNode(QueryBuilderContext context, bool allowReuse)
        {
            IEntity instance = Instance.Entity;
            long    typeId   = instance.TypeIds.First( );

            if (context.ParentNode == null)
            {
                throw new Exception("No context.");
            }

            // Look for an existing relationship node in the tree that we can reuse
            SQ.CustomJoinNode result = !allowReuse ? null :
                                       context.ParentNode
                                       .RelatedEntities
                                       .OfType <SQ.CustomJoinNode>( )
                                       .FirstOrDefault(cj => IsMatch(cj, Instance.Id) && cj.EntityTypeId.Id == typeId);

            // New node
            if (result == null)
            {
                result = new SQ.CustomJoinNode
                {
                    EntityTypeId        = typeId,
                    JoinPredicateScript = "true"
                };
                SQ.ScalarExpression predicate = new SQ.ComparisonExpression
                {
                    Operator    = SQ.ComparisonOperator.Equal,
                    Expressions =
                    {
                        new SQ.IdExpression
                        {
                            NodeId = result.NodeId
                        },
                        new SQ.LiteralExpression
                        {
                            Value = TypedValueHelper.FromDataType(ResultType.Type, Instance.Id)
                        }
                    }
                };
                result.Conditions = new List <SQ.ScalarExpression> {
                    predicate
                };
            }
            context.ParentNode.RelatedEntities.Add(result);
            AddChildNodes(context, result, allowReuse);

            return(result);
        }
        public static void CheckLegacyConditionalFormat <T>(TypedValue expectedValue, string legacyXml) where T : IComparable
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(legacyXml);

            TypedValue actualValue = TypedValueHelper.ReadTypedValueXml(doc.DocumentElement, "whatever");

            T expectedData = (T)expectedValue.Value;
            T actualData   = (T)actualValue.Value;

            Assert.AreEqual(expectedValue.Type.GetType(), actualValue.Type.GetType(), "Check type");
            Assert.IsTrue(expectedData.CompareTo(actualData) == 0, "Check Data");
            Assert.AreEqual(expectedValue.SourceEntityTypeId, actualValue.SourceEntityTypeId, "Check SourceEntityTypeId");
        }
        /// <summary>
        /// Reconstructs a bar formatting rule from the specified XML image.
        /// </summary>
        /// <param name="node">The node containing the bar formatting rule XML.</param>
        /// <returns>The bar formatting rule.</returns>
        private static BarFormattingRule ReadBarFormattingRuleXml(XmlNode node)
        {
            BarFormattingRule formattingRule = new BarFormattingRule();

            if (XmlHelper.EvaluateSingleNode(node, "barFormattingRule"))
            {
                XmlNode barFormattingRuleNode = XmlHelper.SelectSingleNode(node, "barFormattingRule");
                if (barFormattingRuleNode != null)
                {
                    formattingRule.Color   = ColorInfoHelper.ReadColorInfoXml(barFormattingRuleNode, "color");
                    formattingRule.Minimum = TypedValueHelper.ReadTypedValueXml(barFormattingRuleNode, "minimum");
                    formattingRule.Maximum = TypedValueHelper.ReadTypedValueXml(barFormattingRuleNode, "maximum");
                }
            }

            return(formattingRule);
        }
Exemple #11
0
        /// <summary>
        /// Builds the field expression.
        /// </summary>
        /// <param name="fieldExpression">The field expression.</param>
        /// <param name="context"></param>
        /// <returns>ResourceDataColumn.</returns>
        private static ResourceDataColumn BuildFieldExpression(Model.FieldExpression fieldExpression, FromEntityContext context)
        {
            DatabaseType castType = TypedValueHelper.GetDatabaseType(fieldExpression.ReportExpressionResultType);

            if (fieldExpression.FieldExpressionField == null)
            {
                EventLog.Application.WriteWarning(context.DebugInfo + "field was null");
                return(null);
            }

            ResourceDataColumn rdc = new ResourceDataColumn
            {
                FieldId            = fieldExpression.FieldExpressionField,
                CastType           = castType, ExpressionId = Guid.NewGuid(),
                SourceNodeEntityId = fieldExpression.As <NodeExpression>().SourceNode.Id
            };

            return(rdc);
        }
Exemple #12
0
        /// <summary>
        /// Builds the condition parameter.
        /// </summary>
        /// <param name="reportCondition">The report condition.</param>
        /// <param name="queryCondition">The query condition.</param>
        /// <param name="context"></param>
        internal static void BuildConditionParameter([NotNull] ReportCondition reportCondition, QueryCondition queryCondition, FromEntityContext context)
        {
            if (reportCondition == null)
            {
                throw new ArgumentNullException(nameof(reportCondition));
            }

            ActivityArgument activityArgument;

            // Get the column expression for the analysable field. If this is a referenced column then use it's referenced column's expression.
            ReportExpression reportExpression = reportCondition.ConditionExpression;

            if (reportExpression != null && reportExpression.Is <ColumnReferenceExpression>())
            {
                reportExpression =
                    reportCondition.ConditionExpression.As <ColumnReferenceExpression>()
                    .ExpressionReferencesColumn.ColumnExpression;
            }


            if (reportCondition.ConditionParameter?.ParamTypeAndDefault != null)
            {
                activityArgument = reportCondition.ConditionParameter.ParamTypeAndDefault;
            }
            else if (reportExpression?.ReportExpressionResultType != null)
            {
                activityArgument = reportCondition.ConditionExpression.ReportExpressionResultType;
            }
            else
            {
                EventLog.Application.WriteWarning(context.DebugInfo + "condition parameter could not be processed");
                return;
            }
            List <TypedValue> typedValues = TypedValueHelper.TypedValueFromEntity(activityArgument);

            foreach (TypedValue typedValue in typedValues)
            {
                queryCondition.Arguments.Add(typedValue);
            }
        }
        /// <summary>
        /// Builds the column format rules for the report columns.
        /// </summary>
        /// <param name="reportColumns">The report columns.</param>
        /// <param name="context">The context.</param>
        /// <returns>
        /// List{ColumnFormatting}.
        /// </returns>
        internal static List <ColumnFormatting> BuildColumnFormats(IEntityCollection <ReportColumn> reportColumns, IReportToQueryContext context)
        {
            List <ColumnFormatting> reportColumnFormats = new List <ColumnFormatting>();

            foreach (ReportColumn reportColumn in reportColumns)
            {
                ColumnFormatting columnFormatting = null;
                if (reportColumn.ColumnDisplayFormat != null && reportColumn.ColumnExpression != null)
                {
                    Formatting.ImageFormattingRule imageFormattingRule = null;
                    if (reportColumn.ColumnDisplayFormat.FormatImageScale != null &&
                        reportColumn.ColumnDisplayFormat.FormatImageSize != null)
                    {
                        imageFormattingRule = new Formatting.ImageFormattingRule
                        {
                            ThumbnailSizeId  = new Model.EntityRef(reportColumn.ColumnDisplayFormat.FormatImageSize.Id),
                            ThumbnailScaleId = new Model.EntityRef(reportColumn.ColumnDisplayFormat.FormatImageScale.Id),
                        };
                    }


                    columnFormatting = new ColumnFormatting
                    {
                        EntityId             = reportColumn.Id,
                        ColumnName           = reportColumn.Name,
                        DecimalPlaces        = reportColumn.ColumnDisplayFormat.FormatDecimalPlaces ?? 0,
                        ShowText             = reportColumn.ColumnDisplayFormat.ColumnShowText ?? false,
                        DisableDefaultFormat = reportColumn.ColumnDisplayFormat.DisableDefaultFormat ?? false,
                        Prefix         = reportColumn.ColumnDisplayFormat.FormatPrefix,
                        Suffix         = reportColumn.ColumnDisplayFormat.FormatSuffix,
                        Lines          = reportColumn.ColumnDisplayFormat.MaxLineCount ?? 0,
                        FormattingRule = imageFormattingRule ?? null
                    };
                    // Column Type
                    columnFormatting.ColumnType = TypedValueHelper.GetDatabaseType(reportColumn.ColumnExpression.ReportExpressionResultType);

                    DisplayFormat displayFormat = reportColumn.ColumnDisplayFormat;
                    // Format String
                    if (displayFormat.DateColumnFormat != null)
                    {
                        columnFormatting.DateFormat = displayFormat.DateColumnFormat;
                    }
                    if (displayFormat.DateTimeColumnFormat != null)
                    {
                        columnFormatting.DateTimeFormat = displayFormat.DateTimeColumnFormat;
                    }
                    if (displayFormat.TimeColumnFormat != null)
                    {
                        columnFormatting.TimeFormat = displayFormat.TimeColumnFormat;
                    }

                    // Text Alignment
                    if (displayFormat.FormatAlignment != null)
                    {
                        columnFormatting.Alignment = displayFormat.FormatAlignment;
                    }

                    if (displayFormat.EntityListColumnFormat != null)
                    {
                        columnFormatting.EntityListColumnFormat = displayFormat.EntityListColumnFormat;
                    }
                }
                // Formatting Rule
                if (reportColumn.ColumnFormattingRule != null && reportColumn.ColumnExpression != null)
                {
                    if (columnFormatting == null)
                    {
                        columnFormatting = new ColumnFormatting
                        {
                            EntityId   = reportColumn.Id,
                            ColumnName = reportColumn.Name,
                        }
                    }
                    ;
                    columnFormatting.FormattingRule = BuildColumnFormatRule(reportColumn.ColumnFormattingRule, columnFormatting.ColumnType, context);
                }

                if (columnFormatting != null && reportColumn.ColumnExpression != null)
                {
                    reportColumnFormats.Add(columnFormatting);
                }
            }

            return(reportColumnFormats);
        }
        /// <summary>
        /// Reconstructs the condition object from the specified XML node and XML element name.
        /// </summary>
        /// <param name="node">The XML node containing the condition XML.</param>
        /// <param name="elementName">The name of the XML element containing the condition data.</param>
        /// <returns>The condition object.</returns>
        public static Condition ReadConditionXml(XmlNode node, string elementName)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            if (string.IsNullOrEmpty(elementName))
            {
                throw new ArgumentNullException("elementName");
            }

            var condition = new Condition();

            if (XmlHelper.EvaluateSingleNode(node, elementName))
            {
                XmlNode conditionNode = XmlHelper.SelectSingleNode(node, elementName);

                condition.Operator   = (ConditionType)XmlHelper.ReadElementEnum(conditionNode, "operator", typeof(ConditionType), ConditionType.Unspecified);
                condition.ColumnName = XmlHelper.ReadElementString(conditionNode, "columnName", string.Empty);

                //database type
                condition.ColumnType = DatabaseType.UnknownType;
                if (XmlHelper.EvaluateSingleNode(conditionNode, "type"))
                {
                    XmlNode typeNode = XmlHelper.SelectSingleNode(conditionNode, "type");
                    condition.ColumnType = DatabaseType.FromXml(typeNode);
                }

                if (DatabaseTypeHelper.IsTypeRelationshipField(condition.ColumnType))
                {
                    XmlNode argumentsNode = XmlHelper.SelectSingleNode(conditionNode, "arguments");

                    foreach (XmlNode argumentNode in argumentsNode.ChildNodes)
                    {
                        TypedValue argument = TypedValueHelper.FromXml(argumentNode);
                        if (argument != null)
                        {
                            condition.Arguments.Add(argument);
                            if (argument.Value != null)
                            {
                                string strArgumentValue = argument.Value.ToString();
                                long   longArgumentValue;
                                if (long.TryParse(strArgumentValue, out longArgumentValue))
                                {
                                    Resource resource = Model.Entity.Get <Resource>(new EntityRef(longArgumentValue));
                                    ConvertArgumentValue(strArgumentValue, resource == null ? "Missing" : resource.Name);
                                }
                            }
                        }
                    }
                }
                else
                {
                    XmlNodeList argumentNodes = XmlHelper.SelectNodes(conditionNode, "arguments");
                    foreach (TypedValue argument in argumentNodes.Cast <XmlNode>().Select(argumentNode => TypedValueHelper.ReadTypedValueXml(argumentNode, "argument")).Where(argument => argument != null))
                    {
                        condition.Arguments.Add(argument);
                    }
                }
            }

            return(condition);
        }