Beispiel #1
0
 public static void AddConflict(ArgumentHeader master, params ArgumentHeader[] slaves)
 {
     foreach (var slave in slaves)
     {
         AddConflict(master, slave);
     }
 }
Beispiel #2
0
 private static IEnumerable <ArgumentHeader> GetDependeds(ArgumentHeader master)
 {
     return
         (_dependenciesDictionary.Where(kvp => kvp.Value.Contains(master))
          .Select(kvp => kvp.Key)
          .Distinct());
 }
Beispiel #3
0
        static string GetSubargumentUsageDetails(ArgumentHeader header)
        {
            if (header.HasValue)
            {
                return(String.Format(SubargumentWithValueUsageFormat, header.Token, header.Value.Name));
            }

            return(String.Format(SubargumentWithoutValueUsageFormat, header.Token));
        }
Beispiel #4
0
        public static bool TryGetHeader(string token, out ArgumentHeader header)
        {
            header = null;
            if (token == null)
            {
                return(false);
            }

            header = Headers.FirstOrDefault(h => h.Token == token);
            return(header != null);
        }
Beispiel #5
0
        public static IEnumerable <ArgumentHeader> GetConflicts(ArgumentHeader master)
        {
            IList <ArgumentHeader> conflicts;

            if (_conflictsDictionary.TryGetValue(master, out conflicts))
            {
                return(conflicts);
            }

            return(new ArgumentHeader[0]);
        }
Beispiel #6
0
        private static IEnumerable <ArgumentHeader> GetDependencies(ArgumentHeader slave)
        {
            IList <ArgumentHeader> dependencies;

            if (_dependenciesDictionary.TryGetValue(slave, out dependencies))
            {
                return(dependencies);
            }

            return(new ArgumentHeader[0]);
        }
Beispiel #7
0
        public static void AddConflict(ArgumentHeader master, ArgumentHeader slave)
        {
            IList <ArgumentHeader> conflicts;

            if (!_conflictsDictionary.TryGetValue(master, out conflicts))
            {
                _conflictsDictionary[master] = (conflicts = new List <ArgumentHeader>());
            }

            conflicts.Add(slave);
        }
Beispiel #8
0
        public static void AddDependency(ArgumentHeader slave, ArgumentHeader master)
        {
            IList <ArgumentHeader> dependencies;

            if (!_dependenciesDictionary.TryGetValue(slave, out dependencies))
            {
                _dependenciesDictionary[slave] = (dependencies = new List <ArgumentHeader>());
            }

            dependencies.Add(master);
        }
Beispiel #9
0
        private Routine BuildRoutine(ArgumentHeader header)
        {
            Type routineType;

            if (!_routines.TryGetValue(header, out routineType))
            {
                throw new NotImplementedException();
            }

            var routine = Activator.CreateInstance(routineType) as Routine;

            routine.SetArguments(_arguments);

            return(routine);
        }
Beispiel #10
0
        static string GetUsage(ArgumentHeader header)
        {
            var argument = header.Token;
            var appfile  = AppDomain.CurrentDomain.FriendlyName;

            if (header.HasValue)
            {
                argument += @" " + String.Format(UsageValueFormat, header.Value.Name);
            }

            if (!header.HasSubArgument)
            {
                return(String.Format(UsageFormat, appfile, argument));
            }

            var subargs = String.Join(@" ", header.SubArguments.Select(GetSubargumentUsage));

            return(String.Format(UsageWithSubargumentsFormat, appfile, argument, subargs));
        }
Beispiel #11
0
            public static IEnumerable <Argument> Parse(string cliArguments)
            {
                var args = new List <Argument>();

                foreach (var phrase in GetPhrasesDictionary(cliArguments))
                {
                    ArgumentHeader header;
                    if (!ArgumentHeader.TryGetHeader(phrase.Key, out header))
                    {
                        throw new UnexpectedArgumentException(phrase.Key);
                    }

                    args.Add(new Argument(header, phrase.Value));
                }

                CheckIsValidArgumentSet(args);

                return(args);
            }
        static void SetConflicts()
        {
            foreach (var header in ArgumentHeader.Headers)
            {
                ArgumentHeader.AddConflict(Help, header);
            }

            foreach (var header in ArgumentHeader.Headers)
            {
                ArgumentHeader.AddConflict(ImportDb, header);
            }

            foreach (var header in ArgumentHeader.Headers)
            {
                ArgumentHeader.AddConflict(ExportDb, header);
            }

            ArgumentHeader.AddConflict(new [] { DropImport, DropRecords, DropEverything });
            ArgumentHeader.AddConflict(new[] { Import, ImportSource });
            ArgumentHeader.AddConflict(new [] { ShowSources, ShowRules, ShowImports });
        }
Beispiel #13
0
 static string GetSubargumentDetails(ArgumentHeader subargument)
 {
     return(String.Format(SubArgumentUsageFormat, GetSubargumentUsageDetails(subargument)));
 }
Beispiel #14
0
 static string GetHeaderString(ArgumentHeader header)
 {
     return(String.Format(TokenFormat, header.Token, header.Description));
 }
Beispiel #15
0
 public IEnumerable <Argument> All(ArgumentHeader header)
 {
     return(_arguments.Where(a => a.Header == header));
 }
Beispiel #16
0
 static string GetSubargumentUsage(ArgumentHeader subargument)
 {
     return(subargument.HasValue
         ? String.Format(SubargumentFormat, subargument.Token + @" " + subargument.Value.Name)
         : String.Format(SubargumentFormat, subargument.Token));
 }
Beispiel #17
0
 private Argument(ArgumentHeader header, string value)
 {
     _header = header;
     _value  = value;
 }
Beispiel #18
0
 public Argument First(ArgumentHeader header)
 {
     return(_arguments.First(a => a.Header == header));
 }
        static void MakeConstants()
        {
            Help = new ArgumentHeader
            {
                Token       = @"usage",
                Description = @"Выводит справку по аргументам командной строки",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            DropImport = new ArgumentHeader
            {
                Token       = @"drop-import",
                Description = @"Удаляет записи, импортированные с указанным идентификатором импорта",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"import_id",
                    Description = @"Идентификатор импорта"
                }
            };

            DropRecords = new ArgumentHeader
            {
                Token       = @"drop-records",
                Description = @"Удаляет все импортированные записи",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            DropEverything = new ArgumentHeader
            {
                Token       = @"drop-everything",
                Description = @"Очищает базу данных, удаляя все импортированные записи и настройки",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            IKnowWhatImDoing = new ArgumentHeader
            {
                Token       = @"i-know-what-i-m-doing",
                Description = @"Отключает запрос подтверждения при деструктивных операциях",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            Import = new ArgumentHeader
            {
                Token       = @"import",
                Description = @"Импортирует записи из произвольного источника",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"source",
                    Description = @"Источник записей. Тип источника должен соответствовать типу правила"
                }
            };

            ImportId = new ArgumentHeader
            {
                Token         = @"import-id",
                Description   = @"Задает идентификатор импорта при импортировании записей из произвольного источника",
                IsSubArgument = true,
                Value         = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"id",
                    Description = @"Идентификатор импорта"
                }
            };

            RuleId = new ArgumentHeader
            {
                Token         = @"rule-id",
                Description   = @"Задает идентификатор правила для импортирования записей из произвольного источника",
                IsSubArgument = true,
                Value         = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"id",
                    Description = @"Идентификатор правила"
                }
            };

            EmbedSource = new ArgumentHeader
            {
                Token         = @"embed-source",
                Description   = @"Сохранить образ источника в базе данных",
                IsSubArgument = true,
                Value         = ArgumentHeader.ArgumentValue.Empty
            };

            ImportSource = new ArgumentHeader
            {
                Token       = @"import-source",
                Description = @"Производит импорт записей из источника с указанным идентификатором",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"id",
                    Description = @"Идентификатор источника"
                }
            };

            ImportDb = new ArgumentHeader
            {
                Token       = @"import-db",
                Description = @"Производит замену текущей базы данных",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"file",
                    Description = @"Путь к файлу новой базы данных"
                }
            };

            ExportDb = new ArgumentHeader
            {
                Token       = @"export-db",
                Description = @"Готовит базу данных к замене",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"file",
                    Description = @"Путь к создаваемому файлу замены"
                }
            };

            ShowSources = new ArgumentHeader
            {
                Token       = @"show-sources",
                Description = @"Выводит список зарегистрированных источников записей",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            ShowRules = new ArgumentHeader
            {
                Token       = @"show-rules",
                Description = @"Выводит список правил импорта",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            ShowImports = new ArgumentHeader
            {
                Token       = @"show-imports",
                Description = @"Выводит список идентификаторов импорта",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };

            Batch = new ArgumentHeader
            {
                Token       = @"batch",
                Description = @"Выполняет указанный пакетный файл",
                Value       = new ArgumentHeader.ArgumentValue
                {
                    Name        = @"file",
                    Description = @"Пакетный файл"
                }
            };

            Silent = new ArgumentHeader
            {
                Token       = @"silent",
                Description = @"Уменьшает количество выводимой на экран информации",
                Value       = ArgumentHeader.ArgumentValue.Empty
            };
        }
Beispiel #20
0
        static string GetConflicts(ArgumentHeader header)
        {
            var conflicts = String.Join(@", ", header.ConflictsWith.Select(c => c.Token));

            return(String.Format(Conflicts, conflicts));
        }
 static void SetDependencies()
 {
     ArgumentHeader.AddDependency(Import, ImportId);
     ArgumentHeader.AddDependency(Import, RuleId);
     ArgumentHeader.AddDependency(Import, EmbedSource);
 }
Beispiel #22
0
 static string GetSubargumentHeader(ArgumentHeader subargument)
 {
     return(String.Format(SubArgumentHeaderFormat, subargument.Token, subargument.Description));
 }
Beispiel #23
0
 public bool Has(ArgumentHeader header)
 {
     return(_arguments.Any(a => a.Header == header));
 }