/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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)); }
/// <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(); }