/// <summary>
        /// Translates an activity instance.
        /// </summary>
        /// <param name="modelItem">The ModelItem object representing the activity instance.</param>
        /// <returns>The translated result.</returns>
        public string Translate(ModelItem modelItem)
        {
            if (modelItem == null)
            {
                return(Constants.EmptyTextDisplay);
            }

            ModelItem activityItem = modelItem.GetActivityItem();

            if (null == activityItem)
            {
                return(Constants.EmptyTextDisplay);
            }

            Type genericType        = activityItem.GetGenericType();
            ActivityTranslateItem m = (from a in _activityTranslateItem
                                       where a.Key == genericType
                                       select a.Value).FirstOrDefault();

            if (m == null)
            {
                // Use fallback translation item to prevent the app from crashing.
                m = FallbackTranslateItem;
            }
            return(m(this, activityItem));
        }
        /// <summary>
        /// Gets ModelItem object representing an Activity object, from InArgument.Expression property
        /// if given ModelItem object represents an InArgument object.
        /// </summary>
        /// <param name="item">The given ModelItem object that might represent an InArgument object.</param>
        /// <returns>The ModelItem object retrieved from InArgument.Expression if the given parameter represents an InArgument object;
        /// otherwise, the given parameter itself.</returns>
        public static ModelItem GetActivityItem(this ModelItem item)
        {
            Type genericType = item.GetGenericType();

            if (typeof(InArgument).IsAssignableFrom(genericType))
            {
                ModelProperty exprProp = item.Properties[Constants.ExpressionPropertyName];
                if (exprProp != null)
                {
                    return(exprProp.Value);
                }
                else
                {
                    return(null);
                }
            }
            return(item);
        }