14bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi/*
24bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
34bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi *
44bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
54bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
64bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * You may obtain a copy of the License at
74bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi *
84bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
94bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi *
104bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
114bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
124bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * See the License for the specific language governing permissions and
144bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi * limitations under the License.
154bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi */
164bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi
174bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi#include "utils/command_utils.h"
184bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi
19bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include <cstdio>
20bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi
21bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include "command_executors/diff_executor.h"
22bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include "command_executors/header_executor.h"
23bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include "command_executors/help_executor.h"
24bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include "command_executors/info_executor.h"
25bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi#include "command_executors/makedict_executor.h"
26bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi
274bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanaginamespace latinime {
284bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanaginamespace dicttoolkit {
294bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi
304bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi/* static */ CommandType CommandUtils::getCommandType(const std::string &commandName) {
31bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    if (commandName == InfoExecutor::COMMAND_NAME) {
324bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Info;
33bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    } else if (commandName == DiffExecutor::COMMAND_NAME) {
344bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Diff;
35bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    } else if (commandName == MakedictExecutor::COMMAND_NAME) {
364bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Makedict;
37bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    } else if (commandName == HeaderExecutor::COMMAND_NAME) {
384bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Header;
39bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    } else if (commandName == HelpExecutor::COMMAND_NAME) {
404bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Help;
414bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi    } else {
424bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi        return CommandType::Unknown;
434bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi    }
444bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi}
454bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi
46bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi/* static */ void CommandUtils::printCommandUnknownMessage(const std::string &programName,
47bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        const std::string &commandName) {
48bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    fprintf(stderr, "Command '%s' is unknown. Try '%s %s' for more information.\n",
49bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            commandName.c_str(), programName.c_str(), HelpExecutor::COMMAND_NAME);
50bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi}
51bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi
52bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi/* static */ std::function<int(int, char **)> CommandUtils::getCommandExecutor(
53bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        const CommandType commandType) {
54bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    switch (commandType) {
55bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        case CommandType::Info:
56bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return InfoExecutor::run;
57bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        case CommandType::Diff:
58bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return DiffExecutor::run;
59bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        case CommandType::Makedict:
60bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return MakedictExecutor::run;
61bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        case CommandType::Header:
62bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return HeaderExecutor::run;
63bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        case CommandType::Help:
64bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return HelpExecutor::run;
65bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi        default:
66bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            return [] (int, char **) -> int {
67bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi                printf("Command executor not found.");
68bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi                return 1;
69bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi            };
70bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi    }
71bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi}
72bd48963bdf20aa58b2f4d0cca762aba0f2917858Keisuke Kuroyanagi
734bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi} // namespace dicttoolkit
744bfa3b273ea9d23fa642b5b87b1113429f5f539bKeisuke Kuroyanagi} // namespace latinime
75