예제 #1
0
        /// <summary>
        /// Gets the template dictionary from the common properties or creates it.
        /// </summary>
        private Dictionary <string, DeviceTemplate> GetTemplateDictionary()
        {
            Dictionary <string, DeviceTemplate> templateDict = CommonProps.ContainsKey(TemplateDictKey) ?
                                                               CommonProps[TemplateDictKey] as Dictionary <string, DeviceTemplate> : null;

            if (templateDict == null)
            {
                templateDict = new TemplateDict();
                CommonProps.Add(TemplateDictKey, templateDict);
            }

            return(templateDict);
        }
예제 #2
0
        /// <summary>
        /// Gets or creates the template dictionary from the common line properties.
        /// </summary>
        private TemplateDict GetTemplateDictionary()
        {
            TemplateDict templateDict = CommonProps.ContainsKey(TemplateDictKey) ?
                                        CommonProps[TemplateDictKey] as TemplateDict : null;

            if (templateDict == null)
            {
                templateDict = new TemplateDict();
                CommonProps.Add(TemplateDictKey, templateDict);
            }

            return(templateDict);
        }
예제 #3
0
        /// <summary>
        /// Получить из общих свойств линии связи или создать словарь шаблонов устройств
        /// </summary>
        private Dictionary <string, DeviceTemplate> GetTemplates()
        {
            Dictionary <string, DeviceTemplate> templates = CommonProps.ContainsKey("Templates") ?
                                                            CommonProps["Templates"] as Dictionary <string, DeviceTemplate> : null;

            if (templates == null)
            {
                templates = new TemplateDict();
                CommonProps.Add("Templates", templates);
            }

            return(templates);
        }
예제 #4
0
        /// <summary>
        /// Gets a template dictionary from the shared data of the communication line, or creates a new one.
        /// </summary>
        protected virtual TemplateDict GetTemplateDict()
        {
            TemplateDict templateDict = LineContext.SharedData.ContainsKey(TemplateDictKey) ?
                                        LineContext.SharedData[TemplateDictKey] as TemplateDict : null;

            if (templateDict == null)
            {
                templateDict = new TemplateDict();
                LineContext.SharedData.Add(TemplateDictKey, templateDict);
            }

            return(templateDict);
        }
예제 #5
0
        public DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var key = KeySelector == null
                ? _defaultKeySelector.Invoke(item)
                : KeySelector.Invoke(item);

            if (TemplateDict.ContainsKey(key))
            {
                return(TemplateDict[key]);
            }

            return(null);
        }
예제 #6
0
        /// <summary>
        /// Gets existing or create a new device template.
        /// </summary>
        private void PrepareTemplate(string fileName)
        {
            deviceTemplate = null;

            if (string.IsNullOrEmpty(fileName))
            {
                WriteToLog(string.Format(Localization.UseRussian ?
                                         "{0} Ошибка: Не задан шаблон устройства для {1}" :
                                         "{0} Error: Template is undefined for the {1}", CommUtils.GetNowDT(), Caption));
            }
            else
            {
                TemplateDict templateDict = GetTemplateDictionary();

                if (templateDict.TryGetValue(fileName, out DeviceTemplate existingTemplate))
                {
                    if (existingTemplate != null)
                    {
                        deviceTemplate = GetTemplateFactory().CreateDeviceTemplate();
                        deviceTemplate.CopyFrom(existingTemplate);
                    }
                }
                else
                {
                    DeviceTemplate newTemplate = GetTemplateFactory().CreateDeviceTemplate();
                    WriteToLog(string.Format(Localization.UseRussian ?
                                             "{0} Загрузка шаблона устройства из файла {1}" :
                                             "{0} Load device template from file {1}", CommUtils.GetNowDT(), fileName));
                    string filePath = Path.IsPathRooted(fileName) ?
                                      fileName : Path.Combine(AppDirs.ConfigDir, fileName);

                    if (newTemplate.Load(filePath, out string errMsg))
                    {
                        deviceTemplate = newTemplate;
                    }
                    else
                    {
                        WriteToLog(errMsg);
                    }

                    templateDict.Add(fileName, deviceTemplate);
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Gets the device template from the shared dictionary.
        /// </summary>
        protected virtual DeviceTemplate GetDeviceTemplate()
        {
            DeviceTemplate deviceTemplate = null;
            string         fileName       = PollingOptions.CmdLine.Trim();

            if (string.IsNullOrEmpty(fileName))
            {
                Log.WriteLine(string.Format(Locale.IsRussian ?
                                            "Ошибка: Не задан шаблон устройства для {0}" :
                                            "Error: Device template is undefined for {0}", Title));
            }
            else
            {
                TemplateDict templateDict = GetTemplateDict();

                if (templateDict.TryGetValue(fileName, out DeviceTemplate existingTemplate))
                {
                    deviceTemplate = existingTemplate;
                }
                else
                {
                    Log.WriteLine(string.Format(Locale.IsRussian ?
                                                "Загрузка шаблона устройства из файла {0}" :
                                                "Load device template from file {0}", fileName));

                    DeviceTemplate newTemplate = CreateDeviceTemplate();
                    templateDict.Add(fileName, newTemplate);

                    if (newTemplate.Load(Storage, fileName, out string errMsg))
                    {
                        deviceTemplate = newTemplate;
                    }
                    else
                    {
                        Log.WriteLine(errMsg);
                    }
                }
            }

            return(deviceTemplate);
        }