private bool _FindParamInNetworkDesc(string attrName, string paramName,
                                             out NetworkAttributeParameter attrParameter)
        {
            Debug.Assert(attrName != null);
            Debug.Assert(paramName != null);

            attrParameter = null;

            bool found = false;

            foreach (NetworkAttribute attr in _netDesc.NetworkAttributes)
            {
                if (attr.Name.Equals(attrName, StringComparison.InvariantCultureIgnoreCase))
                {
                    foreach (NetworkAttributeParameter param in attr.Parameters)
                    {
                        if (param.Name.Equals(paramName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            attrParameter = param;
                            found         = true;
                            break;
                        }
                    }

                    if (found)
                    {
                        break;
                    }
                }
            }

            return(found);
        }
        private void _InitAttrParameters(SolveInfoWrap settings)
        {
            Debug.Assert(settings != null);

            foreach (RouteAttrInfo attr in settings.AttrParameters)
            {
                bool isValid = false;

                // check if attribute settings are valid
                if (!String.IsNullOrEmpty(attr.AttrName) &&
                    !String.IsNullOrEmpty(attr.ParamName) &&
                    attr.Value != null)
                {
                    // find parameter in network description
                    NetworkAttributeParameter param = null;
                    if (_FindParamInNetworkDesc(attr.AttrName, attr.ParamName, out param))
                    {
                        // check if parameter value is valid
                        if (_IsParamValueValid(attr.Value, param.Type))
                        {
                            isValid = true;
                        }
                    }
                }

                if (!isValid)
                {
                    Logger.Warning(String.Format(LOG_INVALID_NETWORK_ATTR,
                                                 attr.AttrName,
                                                 attr.ParamName));
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        public bool GetNetworkAttributeParameterValue(string attrName,
                                                      string paramName,
                                                      out object paramValue)
        {
            Debug.Assert(attrName != null);
            Debug.Assert(paramName != null);

            paramValue = null;
            bool res = false;

            // find parameter in network description
            NetworkAttributeParameter param = null;

            if (_FindParamInNetworkDesc(attrName, paramName, out param))
            {
                // try to get value from attribute settings
                RouteAttrInfo attrInfo = _settings.GetAttrParameter(attrName, paramName);
                if (attrInfo != null)
                {
                    if (_DeserializeParamValue(attrInfo.Value, param.Type, out paramValue))
                    {
                        res = true;
                    }
                }
                else
                {
                    // get default value from network description
                    paramValue = param.DefaultValue;
                    res        = true;
                }
            }

            return(res);
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="vrpAttributeName">VRP attribute name.</param>
 /// <param name="routingAttributeName">Routing attribute name.</param>
 /// <param name="unit">Network attribute unit.</param>
 /// <param name="usageType">Network attribute usage type.</param>
 /// <param name="parameters">Collection of network attribute parameters.</param>
 public NetworkAttribute(string vrpAttributeName, string routingAttributeName,
                         NetworkAttributeUnits unit, NetworkAttributeUsageType usageType,
                         ICollection <NetworkAttributeParameter> parameters,
                         NetworkAttributeParameter usageParameter)
 {
     _name                      = vrpAttributeName;
     this.RoutingName           = routingAttributeName;
     _unit                      = unit;
     _usageType                 = usageType;
     _parameters                = parameters;
     _restrictionUsageParameter = usageParameter;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="vrpAttributeName">VRP attribute name.</param>
 /// <param name="routingAttributeName">Routing attribute name.</param>
 /// <param name="unit">Network attribute unit.</param>
 /// <param name="usageType">Network attribute usage type.</param>
 /// <param name="parameters">Collection of network attribute parameters.</param>
 public NetworkAttribute(string vrpAttributeName, string routingAttributeName,
     NetworkAttributeUnits unit, NetworkAttributeUsageType usageType,
     ICollection<NetworkAttributeParameter> parameters,
     NetworkAttributeParameter usageParameter)
 {
     _name = vrpAttributeName;
     this.RoutingName = routingAttributeName;
     _unit = unit;
     _usageType = usageType;
     _parameters = parameters;
     _restrictionUsageParameter = usageParameter;
 }
        public void SetNetworkAttributeParameterValue(string attrName,
                                                      string paramName,
                                                      object paramValue)
        {
            Debug.Assert(attrName != null);
            Debug.Assert(paramName != null);

            // find parameter in network description
            NetworkAttributeParameter param = null;

            if (!_FindParamInNetworkDesc(attrName, paramName, out param))
            {
                // cannot find attribute
                throw new ArgumentException(
                          Properties.Messages.Error_InvalidNetworkAttr);
            }

            string serializedValue = String.Empty;

            if (paramValue != null)
            {
                // If new value is not empty string or if parameter doesnt accept empty string -
                // try to serialize current value.
                if (paramValue as string != string.Empty || !param.IsEmptyStringValid)
                {
                    object convertedValue = paramValue;

                    // check if value type is correct
                    if (!param.Type.Equals(paramValue.GetType()))
                    {
                        if (!_ConvertParamValue(paramValue, param.Type, out convertedValue))
                        {
                            // provided value cannot be converted to required type
                            throw new ArgumentException(
                                      Properties.Messages.Error_InvalidNetworkParamType);
                        }
                    }

                    // serialize value for storing
                    serializedValue = _SerializeParamValue(convertedValue);
                }
            }

            // try to find attribute in settings
            RouteAttrInfo attrInfo = _settings.GetUserAttrParameter(attrName, paramName);

            if (attrInfo != null)
            {
                // update existing attribute entry
                attrInfo.Value = serializedValue;
            }
            else
            {
                // add new attribute entry
                attrInfo           = new RouteAttrInfo();
                attrInfo.AttrName  = attrName;
                attrInfo.ParamName = paramName;
                attrInfo.Value     = serializedValue;
                _settings.AddAttrParameter(attrInfo);
            }
        }
        private bool _FindParamInNetworkDesc(string attrName, string paramName,
            out NetworkAttributeParameter attrParameter)
        {
            Debug.Assert(attrName != null);
            Debug.Assert(paramName != null);

            attrParameter = null;

            bool found = false;
            foreach (NetworkAttribute attr in _netDesc.NetworkAttributes)
            {
                if (attr.Name.Equals(attrName, StringComparison.InvariantCultureIgnoreCase))
                {
                    foreach (NetworkAttributeParameter param in attr.Parameters)
                    {
                        if (param.Name.Equals(paramName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            attrParameter = param;
                            found = true;
                            break;
                        }
                    }

                    if (found)
                        break;
                }
            }

            return found;
        }