Esempio n. 1
0
        /// <summary>
        ///   Returns the stored parameter value or, if none is set, the default value.
        /// </summary>
        /// <param name="parameterDescription"> Description of parameter to get value for. </param>
        /// <returns> Parameter value or default one, if none was set before. </returns>
        public object GetValueOrDefault(TaskParameterDescription parameterDescription)
        {
            if (this.taskDescription == null)
            {
                throw new InvalidOperationException("Can't get parameter value, because no task description was set.");
            }

            if (parameterDescription == null)
            {
                throw new NullReferenceException("Passed parameter description was null.");
            }

            if (!this.taskDescription.ParameterDescriptions.Contains(parameterDescription))
            {
                throw new ArgumentException(
                          string.Format(
                              "No parameter with description '{0}' found in task description.", parameterDescription.Name));
            }

            object value;

            if (!this.parameterValues.TryGetValue(parameterDescription, out value))
            {
                value = parameterDescription.CreateDefaultValue();
            }

            return(value);
        }
Esempio n. 2
0
        /// <summary>
        ///   The invoke parameter changed.
        /// </summary>
        /// <param name="parameterDescription"> The parameter description. </param>
        private void InvokeParameterChanged(TaskParameterDescription parameterDescription)
        {
            ParameterChangedDelegate handler = this.ParameterChanged;

            if (handler != null)
            {
                handler(this, parameterDescription);
            }
        }
Esempio n. 3
0
        /// <summary>
        ///   Tries to fetch the value of the parameter with the passed description.
        /// </summary>
        /// <typeparam name="T"> Expected type of value. </typeparam>
        /// <param name="parameterDescription"> Parameter description. </param>
        /// <param name="value"> Contains the value of the parameter with the passed description if found. </param>
        /// <returns> True if the value for the parameter with the passed description was found; otherwise, false. </returns>
        public bool TryGetValue <T>(TaskParameterDescription parameterDescription, ref T value)
        {
            object objectValue;
            bool   result = this.parameterValues.TryGetValue(parameterDescription, out objectValue);

            if (result)
            {
                if (!(objectValue is T))
                {
                    return(false);
                }

                value = (T)objectValue;
            }

            return(result);
        }
Esempio n. 4
0
        /// <summary>
        ///   Sets the value for the parameter with the specified description.
        /// </summary>
        /// <param name="parameterDescription"> Description of parameter to set value for. </param>
        /// <param name="value"> New parameter value. </param>
        public void SetValue(TaskParameterDescription parameterDescription, object value)
        {
            // Check if task description contains parameter.
            if (this.taskDescription == null)
            {
                throw new InvalidOperationException(
                          string.Format(
                              "Reference task '{0}' doesn't have a task description, couldn't set parameter value.", this.Name));
            }

            if (parameterDescription == null)
            {
                throw new NullReferenceException(
                          string.Format(
                              "Parameter description is null, couldn't set a value for it in reference task '{0}'.", this.Name));
            }

            if (!this.taskDescription.ParameterDescriptions.Contains(parameterDescription))
            {
                throw new ArgumentException(
                          string.Format(
                              "Task description of reference task '{0}' doesn't contain a parameter description '{1}'.",
                              this.Name,
                              parameterDescription.Name));
            }

            // Check if value changed.
            object oldValue;

            if (this.parameterValues.TryGetValue(parameterDescription, out oldValue) && value == oldValue)
            {
                return;
            }

            this.parameterValues[parameterDescription] = value;

            // Invoke event.
            this.InvokeParameterChanged(parameterDescription);
        }
Esempio n. 5
0
 /// <summary>
 ///   Tries to fetch the value of the parameter with the passed description.
 /// </summary>
 /// <param name="parameterDescription"> Parameter description. </param>
 /// <param name="objectValue"> Contains the value of the parameter with the passed description if found; otherwise the default value. </param>
 /// <returns> True if the value for the parameter with the passed description was found; otherwise, false. </returns>
 public bool TryGetValue(TaskParameterDescription parameterDescription, out object objectValue)
 {
     return(this.parameterValues.TryGetValue(parameterDescription, out objectValue));
 }
Esempio n. 6
0
        /// <summary>
        ///   The read xml.
        /// </summary>
        /// <param name="reader"> The reader. </param>
        public void ReadXml(XmlReader reader)
        {
            this.Name = string.Empty;
            this.parameterValues.Clear();

            if (reader.IsEmptyElement)
            {
                reader.ReadStartElement();
                return;
            }

            reader.ReadStartElement();

            while (reader.NodeType != XmlNodeType.EndElement)
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    string elementName = reader.Name;
                    if (elementName == "Name")
                    {
                        this.Name = reader.ReadElementString();
                    }
                    else if (elementName == "Child")
                    {
                        XmlWrapper wrapper = new XmlWrapper();
                        wrapper.ReadXml(reader);
                        this.DecoratorTask = wrapper.Task;
                    }
                    else if (this.taskDescription != null)
                    {
                        // Check if parameter.
                        TaskParameterDescription parameterDescription =
                            this.taskDescription.ParameterDescriptions.Find(desc => desc.ParameterName == elementName);
                        if (parameterDescription != null)
                        {
                            Type type = Type.GetType(parameterDescription.Type);

                            reader.ReadStartElement(parameterDescription.ParameterName);

                            XmlSerializer xmlSerializer = new XmlSerializer(type);
                            object        value         = xmlSerializer.Deserialize(reader);

                            reader.ReadEndElement();

                            this.parameterValues[parameterDescription] = value;
                        }
                        else
                        {
                            reader.Skip();
                        }
                    }
                    else
                    {
                        reader.Skip();
                    }
                }
                else
                {
                    reader.Skip();
                }
            }

            reader.ReadEndElement();
        }