Commit 890ef5ed58a76eaf72b632835712c67ef15d4eea

Authored by Peter M. Groen
1 parent 6a79aebe

Added argumentparser

tools/publish_cli/CMakeLists.txt 0 → 100644
  1 +cmake_minimum_required(VERSION 3.12)
  2 +LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/submodules/cmake)
  3 +
  4 +include(projectheader)
  5 +project_header(publish_cli)
  6 +
  7 +find_package( Boost REQUIRED COMPONENTS regex )
  8 +
  9 +include(compiler)
  10 +
  11 +include_directories(
  12 + ${CMAKE_CURRENT_SOURCE_DIR}/../../include
  13 +)
  14 +
  15 +set(SRC_LIST
  16 + ${CMAKE_CURRENT_SOURCE_DIR}/argumentparserbase.h
  17 + ${CMAKE_CURRENT_SOURCE_DIR}/argumentparserbase.cpp
  18 + ${CMAKE_CURRENT_SOURCE_DIR}/argumentparser.h
  19 + ${CMAKE_CURRENT_SOURCE_DIR}/argumentparser.cpp
  20 + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
  21 +)
  22 +
  23 +include(library)
  24 +add_libraries(
  25 + PUBLIC
  26 + Boost::boost
  27 + Boost::regex
  28 + mqtt-cpp
  29 + paho-mqtt3a
  30 +)
  31 +
  32 +include(installation)
  33 +install_component()
tools/publish_cli/argumentparser.cpp
  1 +/* ****************************************************************************
  2 + * Copyright 2024 Open Systems Development BV *
  3 + * *
  4 + * Permission is hereby granted, free of charge, to any person obtaining a *
  5 + * copy of this software and associated documentation files (the "Software"), *
  6 + * to deal in the Software without restriction, including without limitation *
  7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, *
  8 + * and/or sell copies of the Software, and to permit persons to whom the *
  9 + * Software is furnished to do so, subject to the following conditions: *
  10 + * *
  11 + * The above copyright notice and this permission notice shall be included in *
  12 + * all copies or substantial portions of the Software. *
  13 + * *
  14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
  15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
  16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
  17 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
  18 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
  19 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
  20 + * DEALINGS IN THE SOFTWARE. *
  21 + * ***************************************************************************/
  22 +#include "argumentparser.h"
  23 +
  24 +#include <iostream>
  25 +
  26 +std::string ArgumentParser::getHost()
  27 +{
  28 + return getArgument("-h");
  29 +}
  30 +
  31 +std::string ArgumentParser::getPort()
  32 +{
  33 + return getArgument("-p");
  34 +}
  35 +
  36 +std::string ArgumentParser::getUserName()
  37 +{
  38 + return getArgument("-u");
  39 +}
  40 +
  41 +std::string ArgumentParser::getPassword()
  42 +{
  43 + return getArgument("-pw");
  44 +}
  45 +
  46 +std::string ArgumentParser::getTopic()
  47 +{
  48 + return getArgument("-t");
  49 +}
  50 +
  51 +std::string ArgumentParser::getFile()
  52 +{
  53 + return getArgument("-f");}
  54 +std::string ArgumentParser::getMessage();
0 \ No newline at end of file 55 \ No newline at end of file
tools/publish_cli/argumentparser.h
  1 +/* ****************************************************************************
  2 + * Copyright 2024 Open Systems Development BV *
  3 + * *
  4 + * Permission is hereby granted, free of charge, to any person obtaining a *
  5 + * copy of this software and associated documentation files (the "Software"), *
  6 + * to deal in the Software without restriction, including without limitation *
  7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, *
  8 + * and/or sell copies of the Software, and to permit persons to whom the *
  9 + * Software is furnished to do so, subject to the following conditions: *
  10 + * *
  11 + * The above copyright notice and this permission notice shall be included in *
  12 + * all copies or substantial portions of the Software. *
  13 + * *
  14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
  15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
  16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
  17 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
  18 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
  19 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
  20 + * DEALINGS IN THE SOFTWARE. *
  21 + * ***************************************************************************/
  22 +#pragma once
  23 +
  24 +#include "argumentparserbase.h"
  25 +
  26 +class ArgumentParser : public ArgumentParserBase
  27 +{
  28 +public:
  29 + ArgumentParser(int num_of_args, char* argv[]) : ArgumentParserBase(num_of_args, argv) {}
  30 + virtual ~ArgumentParser() {}
  31 +
  32 + std::string getHost();
  33 + std::string getPort();
  34 + std::string getUserName();
  35 + std::string getPassword();
  36 + std::string getTopic();
  37 + std::string getFile();
  38 + std::string getMessage();
  39 +};
0 \ No newline at end of file 40 \ No newline at end of file
tools/publish_cli/argumentparserbase.cpp 0 → 100644
  1 +/* ****************************************************************************
  2 + * Copyright 2024 Open Systems Development BV *
  3 + * *
  4 + * Permission is hereby granted, free of charge, to any person obtaining a *
  5 + * copy of this software and associated documentation files (the "Software"), *
  6 + * to deal in the Software without restriction, including without limitation *
  7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, *
  8 + * and/or sell copies of the Software, and to permit persons to whom the *
  9 + * Software is furnished to do so, subject to the following conditions: *
  10 + * *
  11 + * The above copyright notice and this permission notice shall be included in *
  12 + * all copies or substantial portions of the Software. *
  13 + * *
  14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
  15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
  16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
  17 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
  18 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
  19 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
  20 + * DEALINGS IN THE SOFTWARE. *
  21 + * ***************************************************************************/
  22 +
  23 +#include "argumentparserbase.h"
  24 +
  25 +ArgumentParserBase::ArgumentParserBase(int num_of_args, char* argv[])
  26 +{
  27 + // Store the program name
  28 + m_programName = argv[0];
  29 +
  30 + // Store the arguments
  31 + for (int i = 1; i < num_of_args; i++)
  32 + {
  33 + std::string arg = argv[i];
  34 + if (arg[0] == '-')
  35 + {
  36 + if (i + 1 < num_of_args)
  37 + {
  38 + m_arguments[arg] = argv[i + 1];
  39 + }
  40 + else
  41 + {
  42 + m_arguments[arg] = "";
  43 + }
  44 + }
  45 + }
  46 +}
  47 +
  48 +ArgumentParserBase::~ArgumentParserBase()
  49 +{
  50 + m_arguments.clear();
  51 + m_programName.clear();
  52 +}
  53 +
  54 +std::string ArgumentParserBase::getArgument(const std::string &option)
  55 +{
  56 + auto it = m_arguments.find(option);
  57 + if (it != m_arguments.end())
  58 + {
  59 + return it->second;
  60 + }
  61 + return "";
  62 +}
tools/publish_cli/argumentparserbase.h 0 → 100644
  1 +/* ****************************************************************************
  2 + * Copyright 2024 Open Systems Development BV *
  3 + * *
  4 + * Permission is hereby granted, free of charge, to any person obtaining a *
  5 + * copy of this software and associated documentation files (the "Software"), *
  6 + * to deal in the Software without restriction, including without limitation *
  7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, *
  8 + * and/or sell copies of the Software, and to permit persons to whom the *
  9 + * Software is furnished to do so, subject to the following conditions: *
  10 + * *
  11 + * The above copyright notice and this permission notice shall be included in *
  12 + * all copies or substantial portions of the Software. *
  13 + * *
  14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
  15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
  16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
  17 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
  18 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
  19 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
  20 + * DEALINGS IN THE SOFTWARE. *
  21 + * ***************************************************************************/
  22 +#include <iostream>
  23 +#include <string>
  24 +#include <unordered_map>
  25 +
  26 +/*!
  27 + * @brief ArgumentParserBase class
  28 + */
  29 +class ArgumentParserBase
  30 +{
  31 +public:
  32 + ArgumentParserBase(int num_of_args, char* argv[]);
  33 + virtual ~ArgumentParserBase();
  34 +
  35 + /// @brief Returns the argument for the given option
  36 + std::string getArgument(const std::string &option);
  37 +
  38 + /// @brief Returns the number of arguments
  39 + int count() const { return m_arguments.size(); }
  40 +
  41 +private: // members (Giggity)
  42 + std::string m_programName;
  43 + std::unordered_map<std::string, std::string> m_arguments;
  44 +};
0 \ No newline at end of file 45 \ No newline at end of file