argParser.h 3.75 KB
/**
 * \file argParser.h
 *
 * \author Wesnydy Lima Ribeiro <wesnydy@lavid.ufpb.br>
 * \date 2015
 */

#ifndef ARG_PARSER_H
#define ARG_PARSER_H

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include "logging.h"
#include <lavidlib/base/RuntimeException.h>

#define MAX_SIZE_PATH 256

using namespace std;
using namespace util;

/** \brief Analizador de argumentos de linha de comando.
 *
 * \headerfile util/src/include/argParser.h
 */
class ArgParser {
public:
	/** Construtor */
	ArgParser();

	/** Destrutor */
	~ArgParser();

	/** Analiza os argumentos da linha de comando.
	 *
	 * \param argv Os argumentos.
	 * \param arc O número de argumentos.
	 * \exception RuntimeException Se forem encontrados argumentos inválidos ou na falta de argumentos.
	 */
	void readArgs(char** argv, int argc);

	/** Retorna o serviço requisitado.
	 *
	 * \return O serviço.
	 */
	int getService();

	/** Retorna a linguagem do arquivo de entrada.
	 *
	 * \return A linguagem do arquivo.
	 */
	int getLanguage();

	/** Retorna a posição do vídeo de LIBRAS.
	 *
	 * \return A posição do vídeo.
	 */
	int getPosition();

	/** Retorna o tamanho do vídeo de LIBRAS.
	 *
	 * \return O tamanho do vídeo.
	 */
	int getSize();

	/** Retorna a transparência do plano de fundo.
	 *
	 * \return O background do vídeo.
	 */
	int getBackground();

	/** Retorna o modo de execução.
	 *
	 * \return O modo de execução.
	 */
	int getMode();

	/** Retorna opções extras ativadas.
	 *
	 * \return A opção extra.
	 */
	int getOption();

	/** Retorna o path arquivo de entrada.
	 *
	 * \return O path do arquivo.
	 */
	string getInput();

	/** Retorna o path arquivo de legendas.
	 *
	 * \return O path do arquivo de legendas.
	 */
	string getInputSRT();

	/** Retorna a identificação do cliente.
	 *
	 * \return O ID do cliente.
	 */
	string getId();

	/** Retorna o nível de log selecionado.
	 *
	 * 	\return O nível do log.
	 */
	util::logLevel getLog();

private:
	enum Services   { _VIDEO_WITH_SRT = 1, _REC_VIDEO, _TEXT, _ONLY_SRT, _REC_AUDIO, _WITHOUT_MIXER, _TESTER , _HELP};
	enum Languages  { _PORTUGUESE = 1, _GLOSA };
	enum Positions  { _TOP_LEFT = 1, _TOP_RIGHT, _BOTTOM_RIGHT, _BOTTOM_LEFT };
	enum Resolution { _SMALL = 1, _MEDIUM, _LARGE };
	enum Background { _OPAQUE, _TRANSPARENT };
	enum Options    { _NO_MIXER = 1 };
	enum Mode       { _DEVEL = 1 , _PROD };

	struct globalArgs_t {
		Services   service;
		Languages  language;
		Positions  position;
		Resolution size;
		Background back;
		Options    mixer;
		Mode       mode;
		string     input;
		string     input_srt;
		string     id;
		util::logLevel l_level;
	}globalArgs;

	/** Exibe erros ocorridos durante a analise dos argumentos.
	 *
	 * \param option A mensagem de erro.
	 */
	void returnErr(const string& option);

	/** Retorna a opção de linguagem a partir de uma string.
	 *
	 * \return A linguagem do arquivo.
	 */
	Languages  languageFromString(const string& language);

	/** Retorna a opção de posição a partir de uma string.
	 *
	 * \return A posição do vídeo.
	 */
	Positions  positionFromString(const string& position);

	/** Retorna a opção de resolução a partir de uma string.
	 *
	 * \return A resolução do vídeo.
	 */
	Resolution resolutionFromString(const string& resolution);

	/** Retorna a opção de background a partir de uma string.
	 *
	 * \return O background do vídeo.
	 */
	Background backgroundFromString(const string& backg);

	/** Retorna a opção do modo de execução a partir de uma string.
	 *
	 * \return O modo de execução.
	 */
	Mode executionModeFromString(const string& mode);

	/** Retorna o nível de log selecionado.
	 *
	 * \return O nível de log.
	 */
	util::logLevel logFromString(const string& level);
};

#endif /* ARG_PARSER_H */