/// <summary> /// Обновить список подписок /// </summary> private void UpdateSubscriptions() { SubscriptionsUnit subs = _configuration.SubscriptionsUnit; List <SubscriptionView> rows = new List <SubscriptionView>(); SubscriptionView row = new SubscriptionView(); row.ParameterName = "Потоков"; row.ParameterValue = subs.Threads.ToString(); rows.Add(row); for (int i = 0; i < subs.SubObjects.Count; i++) { ConfigurationUnit item = subs.SubObjects[i]; row = new SubscriptionView { ParameterName = "TCP-сервер", ParameterValue = item.Name }; rows.Add(row); foreach (var(key, value) in item.Parameters) { row = new SubscriptionView { ParameterName = key, ParameterValue = value }; rows.Add(row); } foreach (var(key, value) in item.SubObjects.SelectMany(subItem => subItem.Parameters)) { row = new SubscriptionView { ParameterName = key, ParameterValue = value }; rows.Add(row); } } dataSubsriptions.DataSource = rows; dataSubsriptions.Columns[0].HeaderText = "Параметр"; dataSubsriptions.Columns[0].Width = 150; dataSubsriptions.Columns[1].HeaderText = "Значение"; dataSubsriptions.Columns[1].Width = 150; }
public void EditSubscription() { textThreads.Text = Subscription.Threads.ToString(); if (Subscription.SubObjects.Count == 0) { ConfigurationUnit item = new ConfigurationUnit(); item.Parameters.Add("Port", "0"); Subscription.SubObjects.Add(item); } foreach (ConfigurationUnit item in Subscription.SubObjects) { foreach (KeyValuePair <string, string> parameter in item.Parameters) { if (parameter.Key == "Port") { textPort.Text = parameter.Value ?? ""; } } } ShowDialog(); }
/// <summary> /// Создать новую конфигурацию /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void createConfigurationMenuItem_Click(object sender, EventArgs e) { bool canCreate = false; // Создание нового экземпляра конфигурации if (!_modified) { canCreate = true; } else { DialogResult result = MessageBox.Show("Отменить все внесенные изменения в текущую конфигурацию?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { canCreate = true; } } if (canCreate) { _cfgFileName = ""; _modified = false; _configuration = new Parser(); ConfigurationUnit tcpServer = new ConfigurationUnit(); tcpServer.Parameters.Add("Port", "0"); tcpServer.Name = "TcpServer"; _configuration.SubscriptionsUnit.SubObjects.Add(tcpServer); ResetForm(); // Устанавливаем все элементы формы в начальное состояние _statusBarMessage = "Создана новая конфигурация"; statusBar1.Text = _statusBarMessage; _logger.Info(_statusBarMessage); } }
/// <summary> /// Enter the Config REPL /// </summary> internal static void Interactive() { ConfigurationUnit Configuration = new ConfigurationUnit(); String Choice; ListConfig: new PragmaChoice("1", "Ada Version", Configuration.AdaVersion).WriteLine(); new PragmaChoice("2", "Assertion Policy", Configuration.AssertionPolicy).WriteLine(); new PragmaChoice("3", "Assume No Invalid Values", Configuration.AssumeNoInvalidValues).WriteLine(); new PragmaChoice("4", "Elaboration Checks", Configuration.ElaborationChecks).WriteLine(); new PragmaChoice("5", "Extensions Allowed", Configuration.ExtensionsAllowed).WriteLine(); new PragmaChoice("6", "Fast Math", Configuration.FastMath).WriteLine(); new PragmaChoice("7", "Source File Name", Configuration.SourceFileNames).WriteLine(); new PragmaChoice("8", "Wide Character Encoding", Configuration.WideCharacterEncoding).WriteLine(); // No, License was not forgotten. Rather, it is modified through another command. new Choice("Q", "Quit").Write(); new Choice("S", "Save").Write(); new Choice("SQ", "Save & Quit").WriteLine(); EnterChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine(); switch (Choice.ToUpper()) { case "Q": return; case "S": case "SQ": Configuration.Save(); Console.WriteLine(" Configuration Saved "); if (Choice == "SQ") { goto case "Q"; } goto EnterChoice; case "1": // Ada Version new Choice("1", "Ada1983").Write(); new Choice("2", "Ada1995").Write(); new Choice("3", "Ada2005").Write(); new Choice("4", "Ada2012").Write(); new Choice("C", "Cancel").WriteLine(); EnterAdaChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.AdaVersion = AdaVersion.Ada1983; break; case "2": Configuration.AdaVersion = AdaVersion.Ada1995; break; case "3": Configuration.AdaVersion = AdaVersion.Ada2005; break; case "4": Configuration.AdaVersion = AdaVersion.Ada2012; break; default: goto EnterAdaChoice; } goto ListConfig; case "2": // Assertion Policy new Choice("1", "Check Globally").Write(); new Choice("2", "Disable Globally").Write(); new Choice("3", "Ignore Globally").Write(); new Choice("4", "Specific Policies").Write(); new Choice("C", "Cancel").WriteLine(); EnterAssertionPolicyChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.AssertionPolicy = new AssertionPolicy(PolicyIdentifier.Check); break; case "2": Configuration.AssertionPolicy = new AssertionPolicy(PolicyIdentifier.Disable); break; case "3": Configuration.AssertionPolicy = new AssertionPolicy(PolicyIdentifier.Ignore); break; case "4": Dictionary <String, PolicyIdentifier> Policies; if (Configuration.AssertionPolicy.Policies != null) { Policies = new Dictionary <String, PolicyIdentifier>(Configuration.AssertionPolicy.Policies); } else { Policies = new Dictionary <String, PolicyIdentifier>(); } ListAssertionMarks: foreach (KeyValuePair <String, PolicyIdentifier> policy in Policies) { Console.Write(" " + policy.Key + " => "); switch (policy.Value) { case PolicyIdentifier.Check: Console.WriteLine("Check"); break; case PolicyIdentifier.Disable: Console.WriteLine("Disable"); break; case PolicyIdentifier.Ignore: Console.WriteLine("Ignore"); break; case PolicyIdentifier.Suppressible: Console.WriteLine("Suppressible"); break; } } EnterAssertionMarkChoice: new Choice("V", "View").Write(); new Choice("D", "Done").WriteLine(); Console.Write(" Enter Choice or Policy Name: "); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "V": goto ListAssertionMarks; case "D": Configuration.AssertionPolicy = new AssertionPolicy(Policies); goto ListConfig; default: // The choice is actually a Policy Mark, so create a new entry String PolicyMark = Choice; new Choice("1", "Check").Write(); new Choice("2", "Disable").Write(); new Choice("3", "Ignore").Write(); new Choice("4", "Suppressible").Write(); new Choice("R", "Remove").Write(); new Choice("C", "Cancel").WriteLine(); Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListAssertionMarks; case "R": Policies.Remove(PolicyMark); goto EnterAssertionMarkChoice; case "1": if (Policies.ContainsKey(PolicyMark)) { Policies[PolicyMark] = PolicyIdentifier.Check; } else { Policies.Add(PolicyMark, PolicyIdentifier.Check); } goto EnterAssertionMarkChoice; case "2": if (Policies.ContainsKey(PolicyMark)) { Policies[PolicyMark] = PolicyIdentifier.Disable; } else { Policies.Add(PolicyMark, PolicyIdentifier.Disable); } goto EnterAssertionMarkChoice; case "3": if (Policies.ContainsKey(PolicyMark)) { Policies[PolicyMark] = PolicyIdentifier.Ignore; } else { Policies.Add(PolicyMark, PolicyIdentifier.Ignore); } goto EnterAssertionMarkChoice; case "4": if (Policies.ContainsKey(PolicyMark)) { Policies[PolicyMark] = PolicyIdentifier.Suppressible; } else { Policies.Add(PolicyMark, PolicyIdentifier.Suppressible); } goto EnterAssertionMarkChoice; } goto EnterAssertionMarkChoice; } default: goto EnterAssertionPolicyChoice; } goto ListConfig; case "3": // Assume No Invalid Values new Choice("1", "On").Write(); new Choice("2", "Off").Write(); new Choice("C", "Cancel").WriteLine(); EnterAssumeNoInvalidValuesChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.AssumeNoInvalidValues = AssumeNoInvalidValues.On; break; case "2": Configuration.AssumeNoInvalidValues = AssumeNoInvalidValues.Off; break; default: goto EnterAssumeNoInvalidValuesChoice; } goto ListConfig; case "4": // Elaboration Checks new Choice("1", "Dynamic").Write(); new Choice("2", "Static").Write(); new Choice("C", "Cancel").WriteLine(); EnterElaborationChecksChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.ElaborationChecks = ElaborationChecks.Dynamic; break; case "2": Configuration.ElaborationChecks = ElaborationChecks.Static; break; default: goto EnterElaborationChecksChoice; } goto ListConfig; case "5": // Extensions Allowed new Choice("1", "On").Write(); new Choice("2", "Off").Write(); new Choice("C", "Cancel").WriteLine(); EnterExtensionsAllowedChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.ExtensionsAllowed = ExtensionsAllowed.On; break; case "2": Configuration.ExtensionsAllowed = ExtensionsAllowed.Off; break; default: goto EnterExtensionsAllowedChoice; } goto ListConfig; case "6": //Fast Math new Choice("1", "Proper").Write(); new Choice("2", "Fast").Write(); new Choice("C", "Cancel").WriteLine(); EnterFastMathChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.FastMath = false; break; case "2": Configuration.FastMath = true; break; default: goto EnterFastMathChoice; } goto ListConfig; case "7": //Source File Name ListSourceFileConfig: new Choice("1", "Spec File Name").Write(); new Choice("2", "Body File Name").Write(); new Choice("3", "Subunit File Name").Write(); new Choice("D", "Done").WriteLine(); EnterSourceFileNameChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "D": goto ListConfig; case "1": if (Configuration.SourceFileNames.SpecFileName is null) { Configuration.SourceFileNames.SpecFileName = new SpecFileName(); } ListSpecFileChoice: new Choice("1", "Spec File Name").Write(); new Choice("2", "Casing").Write(); new Choice("3", "Dot Replacement").Write(); new Choice("D", "Done").WriteLine(); EnterSpecFileChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "D": goto ListSourceFileConfig; case "1": Console.Write(" Spec File Name: "); Configuration.SourceFileNames.SpecFileName.UnitFileName = Console.ReadLine(); goto ListSpecFileChoice; case "2": new Choice("1", "Lowercase").Write(); new Choice("2", "Uppercase").Write(); new Choice("3", "Mixedcase").Write(); new Choice("C", "Cancel").WriteLine(); EnterSpecFileCasing: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListSpecFileChoice; case "1": Configuration.SourceFileNames.SpecFileName.Casing = Casing.Lowercase; break; case "2": Configuration.SourceFileNames.SpecFileName.Casing = Casing.Uppercase; break; case "3": Configuration.SourceFileNames.SpecFileName.Casing = Casing.Mixedcase; break; default: goto EnterSpecFileCasing; } goto ListSpecFileChoice; case "3": Console.Write(" Dot Replacement: "); Configuration.SourceFileNames.SpecFileName.DotReplacement = Console.ReadLine(); goto ListSpecFileChoice; default: goto EnterSpecFileChoice; } case "2": if (Configuration.SourceFileNames.BodyFileName is null) { Configuration.SourceFileNames.BodyFileName = new BodyFileName(); } ListBodyFileChoice: new Choice("1", "Body File Name").Write(); new Choice("2", "Casing").Write(); new Choice("3", "Dot Replacement").Write(); new Choice("D", "Done").WriteLine(); EnterBodyFileChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "D": goto ListSourceFileConfig; case "1": Console.Write(" Body File Name: "); Configuration.SourceFileNames.BodyFileName.UnitFileName = Console.ReadLine(); goto ListBodyFileChoice; case "2": new Choice("1", "Lowercase").Write(); new Choice("2", "Uppercase").Write(); new Choice("3", "Mixedcase").Write(); new Choice("C", "Cancel").WriteLine(); EnterBodyFileCasing: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListBodyFileChoice; case "1": Configuration.SourceFileNames.BodyFileName.Casing = Casing.Lowercase; break; case "2": Configuration.SourceFileNames.BodyFileName.Casing = Casing.Uppercase; break; case "3": Configuration.SourceFileNames.BodyFileName.Casing = Casing.Mixedcase; break; default: goto EnterBodyFileCasing; } goto ListBodyFileChoice; case "3": Console.Write(" Dot Replacement: "); Configuration.SourceFileNames.BodyFileName.DotReplacement = Console.ReadLine(); goto ListBodyFileChoice; default: goto EnterBodyFileChoice; } case "3": if (Configuration.SourceFileNames.SubunitFileName is null) { Configuration.SourceFileNames.SubunitFileName = new SubunitFileName(); } ListSubunitFileChoice: new Choice("1", "Subunit File Name").Write(); new Choice("2", "Casing").Write(); new Choice("3", "Dot Replacement").Write(); new Choice("D", "Done").WriteLine(); EnterSubunitFileChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "D": goto ListSourceFileConfig; case "1": Console.Write(" Subunit File Name: "); Configuration.SourceFileNames.SubunitFileName.UnitFileName = Console.ReadLine(); goto ListSubunitFileChoice; case "2": new Choice("1", "Lowercase").Write(); new Choice("2", "Uppercase").Write(); new Choice("3", "Mixedcase").Write(); new Choice("C", "Cancel").WriteLine(); EnterSubunitFileCasing: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListSubunitFileChoice; case "1": Configuration.SourceFileNames.SubunitFileName.Casing = Casing.Lowercase; break; case "2": Configuration.SourceFileNames.SubunitFileName.Casing = Casing.Uppercase; break; case "3": Configuration.SourceFileNames.SubunitFileName.Casing = Casing.Mixedcase; break; default: goto EnterSubunitFileCasing; } goto ListSubunitFileChoice; case "3": Console.Write(" Dot Replacement: "); Configuration.SourceFileNames.SubunitFileName.DotReplacement = Console.ReadLine(); goto ListSubunitFileChoice; default: goto EnterSubunitFileChoice; } default: goto EnterSourceFileNameChoice; } case "8": //Wide Character Encoding new Choice("1", "Hex").Write(); new Choice("2", "Upper").Write(); new Choice("3", "Shift_JIS").Write(); new Choice("4", "EUC").Write(); new Choice("5", "UTF-8").Write(); new Choice("6", "Brackets").Write(); new Choice("C", "Cancel").WriteLine(); EnterWideCharacterEncodingChoice: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" Enter Choice: "); Console.ResetColor(); Choice = Console.ReadLine().ToUpper(); switch (Choice) { case "C": goto ListConfig; case "1": Configuration.WideCharacterEncoding = WideCharacterEncoding.Hex; break; case "2": Configuration.WideCharacterEncoding = WideCharacterEncoding.Upper; break; case "3": Configuration.WideCharacterEncoding = WideCharacterEncoding.Shift_JIS; break; case "4": Configuration.WideCharacterEncoding = WideCharacterEncoding.EUC; break; case "5": Configuration.WideCharacterEncoding = WideCharacterEncoding.UTF8; break; case "6": Configuration.WideCharacterEncoding = WideCharacterEncoding.Brackets; break; default: goto EnterWideCharacterEncodingChoice; } goto ListConfig; default: goto EnterChoice; } }
public void Constructor() { ConfigurationUnit ConfigurationUnit = new ConfigurationUnit(); }
/// <summary> /// Разбор конфигурационного файла на объекты /// </summary> /// <exception cref="NullReferenceException">Неверный формат конфигурационного файла</exception> public void Parse() { if (String.IsNullOrEmpty(_cfgFileName)) { return; } List <ConfigurationUnit> objectsList = new List <ConfigurationUnit>(); Stack <ConfigurationUnit> subobjects = new Stack <ConfigurationUnit>(); bool openedMainObject = false; int subObjectsCount = 0; bool closedSubObject = true; string line; ConfigurationUnit currConfigurationUnit = null; // Открываем файл конфигурации для чтения и читаем его построчно StreamReader reader = new StreamReader(_cfgFileName, System.Text.Encoding.Default); while ((line = reader.ReadLine()) != null) { line = line.Replace("\t", " ").Trim(); if (line == "" || line.StartsWith("//") || line == "(") { continue; } if (line.Contains("=") && currConfigurationUnit != null) { // Разбираем параметры объекта по первому вхождению символа '=' int separator = line.IndexOf('='); string key = line.Substring(0, separator); string val = line.Substring(separator + 1); currConfigurationUnit.Parameters[key] = val; } else { // Определяем тип операции с объектом if (line == ")") { if (openedMainObject) { // Закрывем объект if (subObjectsCount > 0) { // Закрываем подобъект if (subObjectsCount > 1) { // Забираем очередной подобъект из стека ConfigurationUnit topLevel = subobjects.Pop(); topLevel.SubObjects.Add(currConfigurationUnit); currConfigurationUnit = topLevel; subObjectsCount--; } else { // В стеке нет подобъектов, последний подобъект в переменной currObject ConfigurationUnit topLevel = objectsList[objectsList.Count - 1]; objectsList.Remove(topLevel); topLevel.SubObjects.Add(currConfigurationUnit); currConfigurationUnit = topLevel; subObjectsCount--; closedSubObject = true; } } else { // Закрываем главный объект if (!closedSubObject) { ConfigurationUnit sub = subobjects.Pop(); currConfigurationUnit?.SubObjects.Add(sub); closedSubObject = true; } objectsList.Add(currConfigurationUnit); currConfigurationUnit = null; openedMainObject = false; } } else { // Нет созданных объектов throw new NullReferenceException("Ошибка при разборе конфигурационного файла"); } } else { // Открываем объект if (openedMainObject) { if (subObjectsCount == 0) { // Это главный объект, и подобъектов пока нет // Сохраняем главный объект и создаем подобъект objectsList.Add(currConfigurationUnit); currConfigurationUnit = new ConfigurationUnit(); ConfigurationUnitType type = GetObjectType(line); currConfigurationUnit.Name = line; currConfigurationUnit.Type = type; closedSubObject = false; subObjectsCount++; } else { // Это подобъект, сохроаняем его в стеке и создаем новый подобъект subobjects.Push(currConfigurationUnit); currConfigurationUnit = new ConfigurationUnit(); ConfigurationUnitType type = GetObjectType(line); currConfigurationUnit.Name = line; currConfigurationUnit.Type = type; subObjectsCount++; closedSubObject = false; } } else { // Это главный объект currConfigurationUnit = new ConfigurationUnit(); ConfigurationUnitType type = GetObjectType(line); currConfigurationUnit.Name = line; currConfigurationUnit.Type = type; openedMainObject = true; } } } } reader.Close(); foreach (ConfigurationUnit item in objectsList) { switch (item.Type) { case ConfigurationUnitType.MillConfig: MillConfigUnit = new MillConfigUnit(item); break; case ConfigurationUnitType.Subscription: SubscriptionsUnit = new SubscriptionsUnit(item); break; case ConfigurationUnitType.DataBlock: ListDataBlockUnits.Add(new DataBlockUnit(item)); break; case ConfigurationUnitType.Signal: ListSignalUnits.Add(new SignalUnit(item)); break; case ConfigurationUnitType.Thread: ListThreadUnits.Add(new ThreadUnit(item)); break; case ConfigurationUnitType.Rollgang: ListRollgangUnits.Add(new RollgangUnit(item)); break; case ConfigurationUnitType.Label: ListLabelUnits.Add(new LabelUnit(item)); break; case ConfigurationUnitType.Sensor: ListSensorUnits.Add(new SensorUnit(item)); break; case ConfigurationUnitType.Stopper: ListStopperUnits.Add(new StopperUnit(item)); break; case ConfigurationUnitType.LinearMoving: ListLinearDisplacementUnits.Add(new LinearDisplacementUnit(item)); break; case ConfigurationUnitType.Deleter: ListDeleterUnits.Add(new DeleterUnit(item)); break; case ConfigurationUnitType.Cage: ListCagesUnits.Add(new CageUnit(item)); break; case ConfigurationUnitType.IngotParams: ListIngotParametersUnits.Add(new IngotParametersUnit(item)); break; case ConfigurationUnitType.Connection: ListConnectionStringUnits.Add(new ConnectionStringUnit(item)); break; case ConfigurationUnitType.Aggregate: ListAggregateUnits.Add(new AggregateUnit(item)); break; case ConfigurationUnitType.TechnicalUnit: ListTechnicalUnits.Add(new TechnicalUnit(item)); break; } } }