示例#1
0
        /// <summary>
        /// Load a record of parameters from the configured <see cref="IValuesReader">reader</see> using the key provided, and set value of the properties.
        /// All properties are set.
        /// </summary>
        /// <param name="parametersKey">Parameters key of the record to load</param>
        public void LoadParameters(string parametersKey /*, params  KeyValuePair<string, string>[] varInfoNamesToIgnore*/)
        {
            if (_containingObject == null)
            {
                throw new Exception("The ContainingObject is not configured");
            }
            if (_reader == null)
            {
                throw new Exception("The reader is not configured");
            }
            _parametersSet = _reader.ReadValues();
            var varInfoValues = _parametersSet.Values.Where(kv => kv.Key.Name.Equals(parametersKey)).SingleOrDefault();

            if (varInfoValues.Key == null)
            {
                throw new Exception("The parameters key '" + parametersKey + "' is not present.");
            }
            if (varInfoValues.Value == null)
            {
                throw new Exception("Values set for the parameters key '" + parametersKey + "' is null.");
            }
            foreach (var keyAndValue in varInfoValues.Value)
            {
                var varInfo = keyAndValue.Key;

                //if (!varInfoNamesToIgnore.Contains(new KeyValuePair<string, string>(parametersKey, varInfo.Name)))
                //{

                /*dfuma 2/oct/2012 - added check of the presence of the parameter in the properties description parameters list - new START */
                PropertyInfo propertyInfo;
                if (!_containingObject.PropertiesDescription.TryGetValue(varInfo.Name, out propertyInfo))
                {
                    //suppress any error in case of looking for a parameter that is not defined in the parameters class
                    continue;
                    //throw new Exception("Property '" + varInfo.Name + " not found in the properties list of class " + _containingObject.GetType());
                }
                /*dfuma 2/oct/2012 - new END*/

                /*dfuma 2/oct/2012 - added check of the presence of the parameter in the properties description parameters list - old START
                 * var propertyInfo = _containingObject.PropertiesDescription[varInfo.Name];
                 * dfuma 2/oct/2012 - old END*/

                if (propertyInfo.PropertyType != varInfo.ValueType.TypeForCurrentValue)
                {
                    throw new Exception("Type for property '" + propertyInfo.Name + "' (" + propertyInfo.PropertyType + ") is not coherent with the corresponding " +
                                        "VarInfo type (" + varInfo.ValueType.TypeForCurrentValue + ")");
                }
                var setMethod = propertyInfo.GetSetMethod();
                try
                {
                    setMethod.Invoke(_containingObject,
                                     new object[]
                                     { varInfo.ValueType.Converter.GetParsedValueFromMPE(keyAndValue.Value) });
                }catch (Exception e)
                {
                    throw new ArgumentException("Error reading VarInfo '" + keyAndValue.Key.Name + "' (parameters key '" + parametersKey + "'):" + e.Message, e);
                }
                //}
            }
        }
        /// <summary>
        /// Reads the values of parameter sets from the form of persistence.
        /// </summary>
        /// <returns>instance of <see cref="IParametersSet"> parameters set</see></returns>
        public IParametersSet ReadValues()
        {
            // call the abstract version and store the list of parameter key values
            IParametersSet _parameterSet = InternalReadValues();

            _parameterKeyValues = _parameterSet.Values.Select(kvp => kvp.Key.Name).ToList();
            return(_parameterSet);
        }
示例#3
0
        /// <summary>
        /// Writes the parameters values to the xml file.
        /// </summary>
        /// <param name="e">set to write</param>
        /// <exception cref="ArgumentNullException">The argument is null.</exception>
        /// <exception cref="InvalidOperationException">Data path has not been
        /// defined.</exception>
        /// <exception cref="IOException">An I/O error is occured.</exception>
        public void WriteValues(IParametersSet e)
        {
            // Check arguments
            if (e == null)
            {
                throw new ArgumentNullException();
            }

            WriteValues(e, (new List <IKeyValue>(e.Values.Keys)).ToArray());
        }
示例#4
0
        /// <summary>
        /// Save the current value of class properties to overwrite the record of variables identified by the parameters key.
        /// It uses the configured <see cref="IValuesWriter">writer</see>.
        /// </summary>
        /// <param name="parametersKey">Parameters key of the record to save</param>
        public string SaveParameters(string parametersKey)
        {
            string returnMessage = null;

            if (_containingObject == null)
            {
                throw new Exception("The ContainingObject is not configured");
            }
            //if (_parametersSet == null) throw new Exception("The parameters set is not defined: invoke 'LoadParameters()' first.");
            if (_writer == null)
            {
                throw new Exception("The writer is not configured");
            }
            if (_reader == null)
            {
                throw new Exception("The reader is not configured");
            }
            _parametersSet = _reader.ReadValues();
            IKeyValue keyValue = _parametersSet.Values.Keys.Where(k => k.Name.Equals(parametersKey)).SingleOrDefault();

            if (keyValue == null)
            {
                int maxId = 0;
                if (_parametersSet.Values.Count > 0)
                {
                    maxId = _parametersSet.Values.Keys.Select(k => k.Id).Max();
                }
                keyValue = DataTypeFactory.NewKeyValue(maxId + 1, parametersKey, parametersKey);
                _parametersSet.Values.Add(keyValue, new Dictionary <VarInfo, List <string> >());
                foreach (var varInfo in _parametersSet.Parameters)
                {
                    _parametersSet.Values[keyValue].Add(varInfo, null);
                }
            }
            else
            {
                returnMessage = "Overwriting key value '" + parametersKey + "'.";
            }
            foreach (var varInfo in _parametersSet.Parameters)
            {
                PropertyInfo propertyInfo = _containingObject.PropertiesDescription[varInfo.Name];
                if (propertyInfo.PropertyType != varInfo.ValueType.TypeForCurrentValue)
                {
                    throw new Exception("Type for property '" + propertyInfo.Name + "' (" + propertyInfo.PropertyType + ") is not coherent with the corresponding " +
                                        "VarInfo type (" + varInfo.ValueType.TypeForCurrentValue + ")");
                }
                MethodInfo    getMethod       = propertyInfo.GetGetMethod();
                object        propertyValue   = getMethod.Invoke(_containingObject, new object[0]);
                List <string> serializedValue = varInfo.ValueType.Converter.ParseValueForMPE(propertyValue);
                _parametersSet.Values[keyValue][varInfo] = serializedValue;
            }
            _writer.WriteValues(_parametersSet);
            return(returnMessage);
        }
        /// <summary>
        /// Returns the list of VarInfo objects representing the parameters of the parameters class by using the  currently selected <see cref="IValuesReader">IValuesReader</see> .
        /// Reader must be alredy set before invoking this method.
        /// </summary>
        /// <param name="parameterClass"></param>
        /// <returns></returns>
        public static ReadOnlyCollection <VarInfo> GetParameters(this IParameters parameterClass)
        {
            KeyValuePair <IValuesReader, ReadOnlyCollection <VarInfo> > parametersKVP;
            bool found = _cachedVarInfoLists.TryGetValue(parameterClass, out parametersKVP);

            if (found && parameterClass.Reader != parametersKVP.Key)
            {
                _cachedVarInfoLists.Remove(parameterClass);
                found = false;
            }
            if (!found)
            {
                if (parameterClass.Reader == null)
                {
                    throw new ArgumentNullException("Cannot retrieve parameters if the Reader is not configured.");
                }
                List <VarInfo> listVarInfo = new List <VarInfo>();

                IParametersSet parametersSet = parameterClass.Reader.ReadValues();
                foreach (VarInfo originalVarInfo in parametersSet.Values.First().Value.Select(p => p.Key))
                {
                    try
                    {
                        PropertyInfo       property        = parameterClass.PropertiesDescription[originalVarInfo.Name];
                        SetPropertyVarInfo wrappingVarInfo = new SetPropertyVarInfo(parameterClass, property)
                        {
                            DefaultValue = originalVarInfo.DefaultValue,
                            Description  = originalVarInfo.Description,
                            Id           = originalVarInfo.Id,
                            MaxValue     = originalVarInfo.MaxValue,
                            MinValue     = originalVarInfo.MinValue,
                            Name         = originalVarInfo.Name,
                            Size         = originalVarInfo.Size,
                            Units        = originalVarInfo.Units,
                            URL          = originalVarInfo.URL,
                            ValueType    = originalVarInfo.ValueType,
                            VarType      = originalVarInfo.VarType
                        };
                        listVarInfo.Add(wrappingVarInfo);
                    }catch (KeyNotFoundException)
                    {
                        //suppress any error in case of looking for a parameter that is not defined in the parameters class
                        //TODO: must be managed better, for example launching a proper exception
                    }
                }

                parametersKVP = new KeyValuePair <IValuesReader, ReadOnlyCollection <VarInfo> >(parameterClass.Reader, new ReadOnlyCollection <VarInfo>(listVarInfo));
                _cachedVarInfoLists.Add(parameterClass, parametersKVP);
            }
            return(parametersKVP.Value);
        }
示例#6
0
        /// <summary>
        /// Writes the parameters values only for specified key values to the xml file.
        /// </summary>
        /// <param name="e">set to write</param>
        /// <param name="keyValues">key values to write</param>
        /// <exception cref="ArgumentNullException">The argument is null.
        /// </exception>
        /// <exception cref="InvalidOperationException">Data path has not been
        /// defined.</exception>
        /// <exception cref="IOException">An I/O error is occured.</exception>
        public void WriteValues(IParametersSet e, IKeyValue[] keyValues)
        {
            // Check arguments
            if ((e == null) || (keyValues == null))
            {
                throw new ArgumentNullException();
            }

            // If there is no key value to write, return
            if (keyValues.Length == 0)
            {
                return;
            }

            XmlTextWriter xwriter = null;

            try
            {
                // Write Xml document

                if (Directory.Exists(FilePath))
                {
                    xwriter = new XmlTextWriter(FilePath + Path.DirectorySeparatorChar +
                                                e.Descriptor.Component + "_" + e.Descriptor.Model + ".xml",
                                                System.Text.Encoding.UTF8);
                }
                /* 11/6/2012 - DFa - Dependency Injection - begin */
                else if (File.Exists(FilePath))
                {
                    if (File.Exists(FilePath))
                    {
                        xwriter = new XmlTextWriter(FilePath,
                                                    System.Text.Encoding.UTF8);
                    }
                }
                /* 11/6/2012 - DFa - Dependency Injection - end */
                else
                {
                    xwriter = new XmlTextWriter(FilePath, System.Text.Encoding.UTF8);
                }
                xwriter.Formatting = Formatting.Indented;
                xwriter.WriteStartDocument(true);

                // Write start element
                xwriter.WriteStartElement(DOCUMENT_NAME);

                // Write the description
                xwriter.WriteStartElement(E_DESCRIPTION);

                xwriter.WriteElementString(E_DESC_E_NAMESPACE, e.Descriptor.Component);
                xwriter.WriteElementString(E_DESC_E_TYPENAME, e.Descriptor.Model);
                xwriter.WriteElementString(E_DESC_E_URL, e.Descriptor.URL);
                xwriter.WriteElementString(E_DESC_E_PARAMETER_KEY, e.Descriptor.KeyType);
                xwriter.WriteElementString(E_DESC_E_DESCRIPTION, e.Descriptor.Description);

                xwriter.WriteEndElement();


                // Write parameters
                xwriter.WriteStartElement(E_VARINFO_ATTRIBUTES);

                foreach (VarInfo vInfo in e.Parameters)
                {
                    xwriter.WriteStartElement(E_VIATT_E_VARINFO);

                    xwriter.WriteAttributeString(E_VIATT_E_VARINFO_A_NAME, vInfo.Name);
                    xwriter.WriteElementString(E_VIATT_E_DESCRIPTION, vInfo.Description);
                    xwriter.WriteElementString(E_VIATT_E_MAXVALUE,
                                               vInfo.MaxValue.ToString(NumberFormatInfo.InvariantInfo));
                    xwriter.WriteElementString(E_VIATT_E_MINVALUE,
                                               vInfo.MinValue.ToString(NumberFormatInfo.InvariantInfo));
                    xwriter.WriteElementString(E_VIATT_E_DEFAULTVALUE,
                                               vInfo.DefaultValue.ToString(NumberFormatInfo.InvariantInfo));

                    xwriter.WriteElementString(E_VIATT_E_TYPE, vInfo.ValueType.Converter.GetTypeNameRepresentation(vInfo.Size));

                    xwriter.WriteElementString(E_VIATT_E_UNITS, vInfo.Units);
                    xwriter.WriteElementString(E_VIATT_E_URL, vInfo.URL);

                    xwriter.WriteEndElement();
                }

                xwriter.WriteEndElement();


                // Write values
                xwriter.WriteStartElement(E_VALUES);

                foreach (IKeyValue kv in keyValues)
                {
                    xwriter.WriteStartElement(E_VALS_E_KEYVALUE);
                    xwriter.WriteAttributeString(E_VALS_E_KEYVALUE_A_NAME, kv.Name);

                    xwriter.WriteElementString(E_VALS_E_KV_E_DESCRIPTION, kv.Description);

                    foreach (VarInfo param in e.Values[kv].Keys)
                    {
                        IVarInfoConverter converter = param.ValueType.Converter;
                        xwriter.WriteRaw(converter.ParseValue(converter.GetParsedValueFromMPE(e.Values[kv][param]), param.Name).ToString());
                    }

                    xwriter.WriteEndElement();
                }

                xwriter.WriteEndElement();


                xwriter.WriteEndElement();
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(ex.Message, ex);
            }
            finally
            {
                // Closes writer
                xwriter.Close();
            }
        }
 public bool Equals(IParametersSet other)
 {
     return(other.Descriptor.Component.Equals(Descriptor.Component) &&
            other.Descriptor.Model.Equals(Descriptor.Model));
 }