Пример #1
0
        /// <summary>
        /// Converts network attributes to route attribute parameters.
        /// </summary>
        /// <param name="attrs">Network attributes.</param>
        /// <param name="settings">Solver settings.</param>
        /// <returns>Route attribute parameters.</returns>
        private static RouteAttrParameters _ConvertAttrParameters(
            ICollection <NetworkAttribute> attrs,
            SolverSettings settings)
        {
            Debug.Assert(attrs != null);
            Debug.Assert(settings != null);

            var list = new List <RouteAttrParameter>();

            foreach (NetworkAttribute attr in attrs)
            {
                foreach (NetworkAttributeParameter param in attr.Parameters)
                {
                    object value = null;
                    if (settings.GetNetworkAttributeParameterValue(attr.Name, param.Name, out value))
                    {
                        // skip null value overrides, let the service to use defaults
                        if (value != null)
                        {
                            var p = new RouteAttrParameter();
                            p.AttrName  = attr.Name;
                            p.ParamName = param.Name;
                            p.Value     = value;
                            list.Add(p);
                        }
                    }
                }
            }

            var res = new RouteAttrParameters();

            res.Parameters = list.ToArray();

            return(res);
        }
        /// <summary>
        /// Get value for parameter.
        /// </summary>
        /// <param name="attributeName">Attribute name.</param>
        /// <param name="parameterName">Parameter name.</param>
        /// <param name="solverSettings">Solver settings from which 
        /// parameter value will be taken.</param>
        /// <returns>Parameter value or empty string if no such parameter.</returns>
        private string _GetParameterValue(string attributeName, string parameterName, 
            SolverSettings solverSettings)
        {
            object valueObj = null;
            if (!solverSettings.GetNetworkAttributeParameterValue(attributeName,
                parameterName, out valueObj))
                valueObj = null;

            return _ConvertValue2String(valueObj);
        }
        /// <summary>
        /// Update parameter if it has been changed.
        /// </summary>
        /// <param name="solverSettings">Solver settings in which 
        /// parameter value will be updated.</param>
        /// <param name="attribute">Network attribute, which parameter must be updated.</param>
        /// <param name="parameterName">Name of the parameter which must be updated.</param>
        /// <param name="parameterValue">Value, which must be set in parameter.</param>
        /// <exception cref="System.ArgumentException">Is thrown when there is no 
        /// attribute with such parameter name in solver settings.</exception>
        private void _UpdateParameterIfNeeded(SolverSettings solverSettings,
            NetworkAttribute attribute, string parameterName, string parameterValue)
        {
            Debug.Assert(solverSettings != null);
            Debug.Assert(attribute != null);
            Debug.Assert(parameterName != null);

            // Get parameter.
            var parameter = attribute.Parameters.First(par => par.Name == parameterName);

            // Get current parameter value.
            object valueObj = null;
            if (!solverSettings.GetNetworkAttributeParameterValue(attribute.Name, parameterName, out valueObj))
                throw new ArgumentException("parameterName");
            string value = _ConvertValue2String(valueObj);

            // If value has changed - set new value.
            if (!value.Equals(parameterValue, StringComparison.OrdinalIgnoreCase))
            {
                if (parameterValue != null)
                {
                    try
                    {
                        solverSettings.SetNetworkAttributeParameterValue(attribute.Name,
                            parameter.Name, parameterValue);
                    }
                    // Inputed value is in wrong format - do not change solver settings.
                    catch
                    {
                    }
                }
            }
        }
        /// <summary>
        /// Converts network attributes to route attribute parameters.
        /// </summary>
        /// <param name="attrs">Network attributes.</param>
        /// <param name="settings">Solver settings.</param>
        /// <returns>Route attribute parameters.</returns>
        private static RouteAttrParameters _ConvertAttrParameters(
            ICollection<NetworkAttribute> attrs,
            SolverSettings settings)
        {
            Debug.Assert(attrs != null);
            Debug.Assert(settings != null);

            var list = new List<RouteAttrParameter>();
            foreach (NetworkAttribute attr in attrs)
            {
                foreach (NetworkAttributeParameter param in attr.Parameters)
                {
                    object value = null;
                    if (settings.GetNetworkAttributeParameterValue(attr.Name, param.Name, out value))
                    {
                        // skip null value overrides, let the service to use defaults
                        if (value != null)
                        {
                            var p = new RouteAttrParameter();
                            p.AttrName = attr.Name;
                            p.ParamName = param.Name;
                            p.Value = value;
                            list.Add(p);
                        }
                    }
                }
            }

            var res = new RouteAttrParameters();
            res.Parameters = list.ToArray();

            return res;
        }