using System; using System.Collections.Generic; namespace Mongo2Go.Helper { public static class MongodArguments { private const string ArgumentSeparator = "--"; private const string Space = " "; /// /// Returns the if it is verified that it does not contain any mongod argument already defined by Mongo2Go. /// /// mongod arguments defined by Mongo2Go /// Additional mongod arguments /// contains at least one mongod argument already defined by Mongo2Go /// A string with the additional mongod arguments public static string GetValidAdditionalArguments(string existingMongodArguments, string additionalMongodArguments) { if (string.IsNullOrWhiteSpace(additionalMongodArguments)) { return string.Empty; } var existingMongodArgumentArray = existingMongodArguments.Trim().Split(new[] { ArgumentSeparator }, StringSplitOptions.RemoveEmptyEntries); var existingMongodArgumentOptions = new List(); for (var i = 0; i < existingMongodArgumentArray.Length; i++) { var argumentOptionSplit = existingMongodArgumentArray[i].Split(' '); if (argumentOptionSplit.Length == 0 || string.IsNullOrWhiteSpace(argumentOptionSplit[0].Trim())) { continue; } existingMongodArgumentOptions.Add(argumentOptionSplit[0].Trim()); } var additionalMongodArgumentArray = additionalMongodArguments.Trim().Split(new[] { ArgumentSeparator }, StringSplitOptions.RemoveEmptyEntries); var validAdditionalMongodArguments = new List(); var duplicateMongodArguments = new List(); for (var i = 0; i < additionalMongodArgumentArray.Length; i++) { var additionalArgument = additionalMongodArgumentArray[i].Trim(); var argumentOptionSplit = additionalArgument.Split(' '); if (argumentOptionSplit.Length == 0 || string.IsNullOrWhiteSpace(argumentOptionSplit[0].Trim())) { continue; } if (existingMongodArgumentOptions.Contains(argumentOptionSplit[0].Trim())) { duplicateMongodArguments.Add(argumentOptionSplit[0].Trim()); } validAdditionalMongodArguments.Add(ArgumentSeparator + additionalArgument); } if (duplicateMongodArguments.Count != 0) { throw new ArgumentException($"mongod arguments defined by Mongo2Go ({string.Join(", ", existingMongodArgumentOptions)}) cannot be overriden. Please remove the following additional argument(s): {string.Join(", ", duplicateMongodArguments)}."); } return validAdditionalMongodArguments.Count == 0 ? string.Empty : Space + string.Join(" ", validAdditionalMongodArguments); } } }