Exemplo n.º 1
0
        public virtual void Execute(Path homeDir, Path configDir, params string[] args)
        {
            try
            {
                if (args.Length == 0)
                {
                    BadUsage("you must provide a command");
                    return;
                }

                if (Args.parse(args).has("version"))
                {
                    _outsideWorld.stdOutLine("neo4j-admin " + neo4jVersion());
                    Success();
                    return;
                }

                string   name        = args[0];
                string[] commandArgs = Arrays.copyOfRange(args, 1, args.Length);

                AdminCommand_Provider provider;
                try
                {
                    provider = _commandLocator.findProvider(name);
                    foreach (AdminCommand_Blocker blocker in _blockerLocator.findBlockers(name))
                    {
                        if (blocker.DoesBlock(homeDir, configDir))
                        {
                            CommandFailed(new CommandFailed(blocker.Explanation()));
                        }
                    }
                }
                catch (NoSuchElementException)
                {
                    BadUsage(format("unrecognized command: %s", name));
                    return;
                }

                if (provider == null)
                {
                    BadUsage(format("unrecognized command: %s", name));
                    return;
                }

                if (Args.parse(commandArgs).has("help"))
                {
                    _outsideWorld.stdErrLine("unknown argument: --help");
                    _usage.printUsageForCommand(provider, _outsideWorld.stdErrLine);
                    Failure();
                }
                else
                {
                    AdminCommand command = provider.Create(homeDir, configDir, _outsideWorld);
                    try
                    {
                        command.Execute(commandArgs);
                        Success();
                    }
                    catch (IncorrectUsage e)
                    {
                        BadUsage(provider, e);
                    }
                    catch (CommandFailed e)
                    {
                        CommandFailed(e);
                    }
                }
            }
            catch (Exception e)
            {
                Unexpected(e);
            }
        }