コード例 #1
0
            public void GetClassPropertyValueNull()
            {
                Application application = new Application();

                object value = application.GetTokenValue("ApplicationId");
                Assert.IsNull(value);
            }
コード例 #2
0
            public void GetDataPropertyValueUnknownToken()
            {
                Application application = new Application();

                object value = application.GetTokenValue("Foo");
                Assert.IsNull(value);
            }
コード例 #3
0
        /// <summary>
        /// Populates <paramref name="target"/> with static and <paramref name="source"/> values
        /// as defined by <paramref name="fieldMap"/>.
        /// </summary>
        /// <param name="source">The application from which to get field values.</param>
        /// <param name="fieldMap">A definition of field mappings.</param>
        /// <param name="target">The target object to populate with mapped key/values.</param>
        internal void Map(Application source, MappedFieldList fieldMap, JObject target)
        {
            foreach (MappedField map in fieldMap)
            {
                switch (map.MapType)
                {
                    case MapType.Value:
                    case MapType.PrivateValue:
                        target.Add(map.Target, map.Source);
                        break;

                    case MapType.Field:
                        object tokenValue = source.GetTokenValue(map.Source);
                        if (tokenValue == null)
                        {
                            target.Add(map.Target, string.Empty);
                        }
                        else if (tokenValue is IEnumerable<object>)
                        {
                            target.Add(map.Target, JArray.FromObject(tokenValue));
                        }
                        else
                        {
                            target.Add(map.Target, tokenValue.ToString());
                        }

                        break;

                    default:
                        throw new InvalidOperationException(string.Format(ExceptionMessages.InvalidMapType, map.MapType));
                }
            }
        }
コード例 #4
0
            public void GetDataPropertyValueNull()
            {
                Application application = new Application();
                application.ApplicationData.Add("Foo", null);

                object value = application.GetTokenValue("Foo");
                Assert.IsNull(value);
            }
コード例 #5
0
            public void GetDataPropertyValue()
            {
                Application application = new Application();
                application.ApplicationData.Add("Foo", "Bar");

                string value = application.GetTokenValue("Foo").ToString();
                Assert.AreEqual("Bar", value);
            }
コード例 #6
0
            public void GetClassPropertyValue()
            {
                Application application = new Application
                {
                    ApplicationId = "GetMe"
                };

                string value = application.GetTokenValue("ApplicationId").ToString();
                Assert.AreEqual("GetMe", value);
            }
コード例 #7
0
            public void GetClassPropertyValueNested()
            {
                Application application = new Application
                {
                    CreatedBy = new AuthenticatedApplicationUser
                    {
                        DisplayName = "Foo Bar"
                    }
                };

                string value = application.GetTokenValue("CreatedBy.DisplayName").ToString();
                Assert.AreEqual("Foo Bar", value);
            }
コード例 #8
0
        /// <summary>
        /// Populates <paramref name="target"/> with static and <paramref name="source"/> values
        /// as defined by <paramref name="fieldMap"/>.
        /// </summary>
        /// <param name="source">The application from which to get field values.</param>
        /// <param name="fieldMap">A definition of field mappings.</param>
        /// <param name="target">The target object to populate with mapped key/values.</param>
        internal void Map(Application source, MappedFieldList fieldMap, XmlDocument target)
        {
            XmlNode root = target.FirstChild;
            foreach (MappedField map in fieldMap)
            {
                switch (map.MapType)
                {
                    case MapType.Value:
                    case MapType.PrivateValue:
                        root.AddElement(map.Target, map.Source);
                        break;

                    case MapType.Field:
                        object tokenValue = source.GetTokenValue(map.Source);
                        if (tokenValue == null)
                        {
                            root.AddElement(map.Target, string.Empty);
                        }
                        else
                        {
                            var value = tokenValue as IEnumerable<object>;
                            if (value != null)
                            {
                                this.GetNestedValue(value, map, root);
                            }
                            else
                            {
                                root.AddElement(map.Target, tokenValue.ToString());
                            }
                        }

                        break;

                    default:
                        throw new InvalidOperationException(string.Format(ExceptionMessages.InvalidMapType, map.MapType));
                }
            }
        }
コード例 #9
0
            public void TraverseTreeBottom()
            {
                Application application = new Application();
                application.ApplicationData.Add("RootChild", "RootChild Value");

                var outerRepeater = new List<Dictionary<string, object>> { new Dictionary<string, object>() };
                var innerRepeater = new List<Dictionary<string, object>> { new Dictionary<string, object>() };

                innerRepeater[0].Add("InnerChild", "InnerChild Value");
                outerRepeater[0].Add("InnerRepeater", innerRepeater.ToArray());
                outerRepeater[0].Add("OuterChild", "OuterChild Value");
                application.ApplicationData.Add("OuterRepeater", outerRepeater.ToArray());

                ApplicationDataPath path = new ApplicationDataPath();
                path.Prepend("InnerRepeater", 0);
                path.Prepend("OuterRepeater", 0);
                string value = application.GetTokenValue("InnerChild", path).ToString();

                Assert.AreEqual("InnerChild Value", value);
            }
コード例 #10
0
            public void OrderOfPrecedence()
            {
                Application application = new Application
                {
                    ApplicationId = "GetMe"
                };
                application.ApplicationData.Add("ApplicationId", "NotMe");

                string value = application.GetTokenValue("ApplicationId").ToString();
                Assert.AreEqual("GetMe", value);
            }
コード例 #11
0
        /// <summary>
        /// Gets the value of a token.
        /// </summary>
        /// <param name="token">The token being replaced.</param>
        /// <param name="application">The application to source data from.</param>
        /// <param name="control">The control.</param>
        /// <param name="path">Specifies the path to the token.</param>
        /// <returns>
        /// The value of the token.
        /// </returns>
        /// <remarks>
        /// Order of precedence: (1) Timestamp; (2) Application URL (3) <paramref name="application" /> object; (4) application data.
        /// </remarks>
        private object GetTokenValue(string token, Application application, Control control, ApplicationDataPath path)
        {
            if (token.StartsWith(FormatterResources.TimestampToken, StringComparison.CurrentCultureIgnoreCase))
            {
                return DateTime.Now;
            }

            if (token.StartsWith(FormatterResources.ApplicationUrlToken, StringComparison.CurrentCultureIgnoreCase))
            {
                string url = string.Format(FormatterResources.ApplicationUrlFormat, this.BaseUrl, application.FormId, application.Id);
                return string.Format(FormatterResources.ApplicationAnchor, url);
            }

            if (application == null)
            {
                return null;
            }

            string valueStr = application.GetTokenValue(token, path) as string;
            if (control is DateControl)
            {
                DateTime dateValue;
                if (valueStr != null && DateTime.TryParseExact(valueStr, DateControl.SYSTEM_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
                {
                    return dateValue.ToString(DateControl.USER_FORMAT);
                }
            }

            var calculationControl = control as CalculationControl;
            if (calculationControl == null || !calculationControl.FormatAsCurrency || valueStr == null)
            {
                return application.GetTokenValue(token, path);
            }

            decimal decimalVal;
            bool parsed = decimal.TryParse(valueStr, out decimalVal);
            if (parsed)
            {
                return string.Format("{0:C}", decimalVal);
            }

            return application.GetTokenValue(token, path);
        }