コード例 #1
0
        public static void ConfigureArxmlUsingDBCFiles(NodeItem DBCNode, IList <ElementBase> elementList)
        {
            string filePath = FileSysHelper.GetCurrentAppLocationPath() + "\\Resources\\ArxmlTemplateDealerResources\\Template.json";
            //Seraching to locate
            var canStackConfigureTemplateList = JObject.Parse(File.ReadAllText(filePath)).Value <JObject> ("ComStack").Value <JArray> ("Template");

            foreach (JObject template in canStackConfigureTemplateList)
            {
                IEnumerable <ElementBase> fliteredElements = ArxmlHelper.SearchingElementsByConfigure(template, elementList);
                //Configure the parameters By ParametersTemplate
                JObject canStackConfigureParametersTemplate = template.Value <JObject> ("ParametersTemplate");
                ArxmlHelper.ConfigureParametersByTemplate(fliteredElements, elementList, canStackConfigureParametersTemplate, CanStackDealerFactory(DBCNode));
            }

            //  var list = ArxmlTemplateDealer.ArxmlHelper.SearchingElementsByConfigure (canStackConfigureParametersTemplate, elementList);
        }
コード例 #2
0
        static IParameterTemplateDealer CanStackDealerFactory(NodeItem DBCNode)
        {
            void canStackConfigure(ElementBase parametersContainer, ISupportParameterElement parameter, JToken template)
            {
                //first using DBC formater to help parser
                string formaterString   = null;
                var    receiveNameList  = DBCNode.ReceiveMessages.Select(message => message.MessageName).Concat(DBCNode.ReceiveMessages.SelectMany(message => message.SignalList).Select(signal => signal.SignalName));
                var    transferNameList = DBCNode.TransimitMessages.Select(message => message.MessageName).Concat(DBCNode.TransimitMessages.SelectMany(message => message.SignalList).Select(signal => signal.SignalName));

                if (template is JObject configures)
                {
                    if (configures.ContainsKey("__RX__") && receiveNameList.Contains(parametersContainer.ElementName))
                    {
                        formaterString = configures.Value <string> ("__RX__");
                    }
                    else if (configures.ContainsKey("__TX__") && transferNameList.Contains(parametersContainer.ElementName))
                    {
                        formaterString = configures.Value <string> ("__TX__");
                    }
                    else
                    {
                        return;
                    }
                }
                else if (template is JToken configure)
                {
                    formaterString = configure.ToString();
                }
                else
                {
                    return;
                }
                //formatString using DBC
                if (string.IsNullOrEmpty(formaterString))
                {
                    parameter.Value = string.Empty;
                    return;
                }
                string returnValue = formaterString;

                returnValue = ArxmlHelper.DefaultParametersParser(parametersContainer, parameter, returnValue);
                foreach (Match match in Regex.Matches(returnValue, @"\{__DBC__\.([\S]*?)\.([\S]*?)\}"))
                {
                    string valueReplace = "";
                    switch (match.Groups[1].Value)
                    {
                    case "MESSAGE":
                        var selectMessage = DBCNode
                                            .ReceiveMessages
                                            .Concat(DBCNode.TransimitMessages)
                                            .Where(message => message.MessageName.Equals(parametersContainer.ElementName) || message.SignalList.Select(signal => signal.SignalName).Contains(parametersContainer.ElementName))
                                            .First();
                        if (selectMessage.AttributesDict.ContainsKey(match.Groups[2].Value))
                        {
                            valueReplace = selectMessage.AttributesDict[match.Groups[2].Value];
                        }
                        else
                        {
                            var property = selectMessage.GetType().GetProperty(match.Groups[2].Value);
                            valueReplace = property.GetValue(selectMessage).ToString();
                        }

                        break;

                    case "SIGNAL":
                        var selectSignal = DBCNode
                                           .ReceiveMessages
                                           .Concat(DBCNode.TransimitMessages)
                                           .SelectMany(message => message.SignalList)
                                           .Where(signal => signal.SignalName.Equals(parametersContainer.ElementName))
                                           .First();
                        if (selectSignal.AttributesDict.ContainsKey(match.Groups[2].Value))
                        {
                            valueReplace = selectSignal.AttributesDict[match.Groups[2].Value];
                        }
                        else
                        {
                            var property = selectSignal.GetType().GetProperty(match.Groups[2].Value);
                            valueReplace = property.GetValue(selectSignal).ToString();
                        }
                        break;

                    case "NODE":
                        if (DBCNode.AttributesDict.ContainsKey(match.Groups[2].Value))
                        {
                            valueReplace = DBCNode.AttributesDict[match.Groups[2].Value];
                        }
                        else
                        {
                            var property = DBCNode.GetType().GetProperty(match.Groups[2].Value);
                            valueReplace = property.GetValue(DBCNode).ToString();
                        }
                        break;
                    }
                    returnValue = returnValue.Replace(match.Value, valueReplace);
                }

                parameter.Value = returnValue;
            }

            return(canStackConfigure);
        }