예제 #1
0
        private bool UpdateOption(
            bool verbose,
            string dir,
            string option,
            Func <ConfigurationOption, bool> updateOption)
        {
            try
            {
                if (verbose)
                {
                    Logger.EnableVerbose();
                }

                if (!PlugInConfigurationValidation.ValidateElementName(option))
                {
                    Logger.Error(
                        "The option name is invalid '{0}'- " + PlugInConfigurationValidation.ValidCharactersMessage,
                        option);
                    return(false);
                }

                string file = GetFileName(dir);
                using var fileStream = File.Open(file, FileMode.Open, FileAccess.ReadWrite);

                var logger = new BridgeLogger();
                var existingConfiguration = PlugInConfigurationSerializer.ReadFromStream(fileStream, logger);
                if (existingConfiguration == null)
                {
                    return(false);
                }

                var options      = new HashSet <ConfigurationOption>(existingConfiguration.Options);
                var targetOption = options.FirstOrDefault(o => StringComparer.InvariantCulture.Equals(o.Name, option));
                if (targetOption == null)
                {
                    Logger.Error($"Option {option} was not found.");
                    return(false);
                }

                if (!updateOption(targetOption))
                {
                    return(false);
                }

                fileStream.Position = 0;

                var configuration = new PlugInConfiguration(
                    existingConfiguration.PlugInName,
                    existingConfiguration.Version,
                    options);

                PlugInConfigurationSerializer.WriteToStream(configuration, fileStream, logger);
            }
            catch (Exception e)
            {
                _parsingException = e;
            }

            return(true);
        }
예제 #2
0
        private void ProcessesCommandDelAppFromOption(
            bool verbose,
            string dir,
            string option,
            string name)
        {
            if (!PlugInConfigurationValidation.ValidateElementName(name))
            {
                Logger.Error(
                    "The application name is invalid '{0}'- " + PlugInConfigurationValidation.ValidCharactersMessage,
                    option);
                return;
            }

            bool result = UpdateOption(
                verbose,
                dir,
                option,
                (configurationOption) =>
            {
                bool updateResult = configurationOption.DelApplication(name);
                if (!updateResult)
                {
                    Logger.Warning("Application {0} was not deleted from option {1}", name, option);
                }
                return(updateResult);
            });

            if (result)
            {
                Logger.Information($"Deleted application {name} to option {option}.");
            }
        }
예제 #3
0
        private void ProcessesCommandDelRuntimeFromOption(
            bool verbose,
            string dir,
            string option,
            string name)
        {
            if (!PlugInConfigurationValidation.ValidateElementName(name))
            {
                Logger.Error(
                    "The runtime name is invalid '{0}'- " + PlugInConfigurationValidation.ValidCharactersMessage,
                    option);
                return;
            }

            bool result = UpdateOption(
                verbose,
                dir,
                option,
                (configurationOption) =>
            {
                bool deleted = configurationOption.DelRuntime(name);
                if (!deleted)
                {
                    Logger.Warning("Runtime '{0}' was not removed from option {1}.", name, option);
                }

                return(deleted);
            });

            if (result)
            {
                Logger.Information($"Deleted runtime {name} to option {option}.");
            }
        }
예제 #4
0
        private void ProcessesCommandAddOption(
            bool verbose,
            string dir,
            string name,
            string description)
        {
            try
            {
                if (verbose)
                {
                    Logger.EnableVerbose();
                }

                if (!PlugInConfigurationValidation.ValidateElementName(name))
                {
                    Logger.Error(
                        "The name is invalid '{0}'- " + PlugInConfigurationValidation.ValidCharactersMessage,
                        name);
                    return;
                }

                string file = GetFileName(dir);
                using var fileStream = File.Open(file, FileMode.Open, FileAccess.ReadWrite);

                var logger = new BridgeLogger();
                var existingConfiguration = PlugInConfigurationSerializer.ReadFromStream(fileStream, logger);
                if (existingConfiguration == null)
                {
                    return;
                }

                ConfigurationOption newOption = new ConfigurationOption(name, description);
                var options = new HashSet <ConfigurationOption>(existingConfiguration.Options);
                if (!options.Add(newOption))
                {
                    Logger.Error("Option {0} already exists.", name);
                    return;
                }

                fileStream.Position = 0;

                var configuration = new PlugInConfiguration(
                    existingConfiguration.PlugInName,
                    existingConfiguration.Version,
                    options);

                PlugInConfigurationSerializer.WriteToStream(configuration, fileStream, logger);

                Logger.Information($"Added option {name}.");
            }
            catch (Exception e)
            {
                _parsingException = e;
            }
        }