提交 eca87785845929e6b67a932b28b7a4bc0b0ff1d1

作者 LJH 李佳桓
1 个父辈 8a644d9f

add

正在显示 1 个修改的文件 包含 197 行增加0 行删除
  1 +/**************************************************************************
  2 +* file: dmpapplication.cpp
  3 +
  4 +* Author: wanzhongping
  5 +* Date: 2021-02-24 11:23:15
  6 +* Email: zhongpingw@chinadci.com
  7 +* copyright: 广州城市信息研究所有限公司
  8 +***************************************************************************/
  9 +#include "dmpapplication.h"
  10 +#include <iostream>
  11 +#include <fstream>
  12 +#include "dmpconfig.h"
  13 +#include "dmplogger.h"
  14 +
  15 +bool DmpApplication::running_from_build_dir_ = false;
  16 +bool DmpApplication::initialized_ = false;
  17 +std::string DmpApplication::plugin_path_ = "";
  18 +std::string DmpApplication::prefix_path_ = "";
  19 +std::string DmpApplication::libexec_path_ = "";
  20 +std::string DmpApplication::library_path_ = "";
  21 +std::string DmpApplication::build_source_path_ = "";
  22 +std::string DmpApplication::build_output_path_ = "";
  23 +std::string DmpApplication::pkg_data_path_ = "";
  24 +
  25 +DmpApplication::DmpApplication()
  26 +{
  27 + std::cout << "constructor called!" << std::endl;
  28 + LOGGER_DEBUG("constructor called!");
  29 +}
  30 +
  31 +DmpApplication::~DmpApplication()
  32 +{
  33 + std::cout << "destructor called!" << std::endl;
  34 + LOGGER_DEBUG("destructor called!");
  35 +}
  36 +
  37 +DmpApplication &DmpApplication::Instance()
  38 +{
  39 + static DmpApplication instance;
  40 + return instance;
  41 +}
  42 +
  43 +void DmpApplication::Init()
  44 +{
  45 + LOGGER_INFO("DmpApplication init...");
  46 + ResolvePkgPath();
  47 + if (running_from_build_dir_)
  48 + {
  49 + // we run from source directory - not installed to destination (specified prefix)
  50 + prefix_path_ = "";
  51 + set_plugin_path(build_source_path_ + '/' + DMAP_PLUGIN_SUBDIR);
  52 + set_pkg_data_path(build_output_path_ + "/data"); // in buildDir/data - used for: doc, resources, svg
  53 + library_path_ = build_output_path_ + '/' + DMAP_LIB_SUBDIR + '/';
  54 + libexec_path_ = build_output_path_ + '/' + DMAP_LIBEXEC_SUBDIR + '/';
  55 + }
  56 + else
  57 + {
  58 + char *prefix_path = getenv("DMAP_PREFIX_PATH");
  59 + if (!prefix_path)
  60 + {
  61 + set_prefix_path("/usr/local");
  62 + }else{
  63 + set_prefix_path(prefix_path);
  64 + }
  65 + }
  66 + initialized_ = true;
  67 + LOGGER_INFO("DmpApplication init done");
  68 +}
  69 +bool DmpApplication::IsRunningFromBuildDir()
  70 +{
  71 + return running_from_build_dir_;
  72 +}
  73 +std::string DmpApplication::ApplicationDirPath()
  74 +{
  75 + boost::filesystem::path libDir = boost::filesystem::current_path();
  76 + return libDir.c_str();
  77 +}
  78 +
  79 +std::string DmpApplication::ResolvePkgPath()
  80 +{
  81 + std::string app_path = ApplicationDirPath();
  82 + if (!app_path.empty() || getenv("DMAP_PREFIX_PATH"))
  83 + {
  84 + std::string prefix_Path = getenv("DMAP_PREFIX_PATH") ? getenv("DMAP_PREFIX_PATH") : app_path;
  85 + // check if DMAP is run from build directory (not the install directory)
  86 + boost::filesystem::path dmapbuildpath;
  87 + boost::filesystem::path dir(prefix_Path);
  88 + if (SearchFile(dir, "dmapbuildpath.txt", dmapbuildpath))
  89 + {
  90 + std::cout << dmapbuildpath.c_str() << std::endl;
  91 + running_from_build_dir_ = true;
  92 + std::ifstream fin(dmapbuildpath.c_str());
  93 + std::getline(fin, build_source_path_);
  94 + boost::trim(build_source_path_);
  95 + std::getline(fin, build_output_path_);
  96 + boost::trim(build_output_path_);
  97 + }
  98 +
  99 + if (IsRunningFromBuildDir)
  100 + {
  101 + return build_output_path_ + "/Data";
  102 + }
  103 + else
  104 + {
  105 + return prefix_Path + '/' + DMAP_DATA_SUBDIR;
  106 + }
  107 + }
  108 + return "";
  109 +}
  110 +std::string DmpApplication::pkg_data_path()
  111 +{
  112 + return pkg_data_path_;
  113 +}
  114 +void DmpApplication::set_pkg_data_path(const std::string &pkg_data_path)
  115 +{
  116 + pkg_data_path_ = pkg_data_path;
  117 +}
  118 +
  119 +std::string DmpApplication::library_path()
  120 +{
  121 + return library_path_;
  122 +}
  123 +
  124 +void DmpApplication::set_prefix_path(const std::string &prefix_path)
  125 +{
  126 + LOGGER_DEBUG("set_prefix_path: " + prefix_path);
  127 + prefix_path_ = prefix_path;
  128 + if(IsRunningFromBuildDir)
  129 + {
  130 + set_plugin_path(prefix_path_ + '/' + DMAP_PLUGIN_SUBDIR);
  131 + set_pkg_data_path(prefix_path_ + '/' + DMAP_DATA_SUBDIR);
  132 + }
  133 + library_path_ = prefix_path_ + '/' + DMAP_LIB_SUBDIR + '/';
  134 + libexec_path_ = prefix_path_ + '/' + DMAP_LIBEXEC_SUBDIR + '/';
  135 +}
  136 +
  137 +bool DmpApplication::SearchFile(const boost::filesystem::path &dir, const std::string file_name, boost::filesystem::path &path)
  138 +{
  139 + if (!boost::filesystem::exists(dir))
  140 + {
  141 + return false;
  142 + }
  143 +
  144 + boost::filesystem::directory_iterator end_iter;
  145 + for (boost::filesystem::directory_iterator iter(dir); iter != end_iter; ++iter)
  146 + {
  147 + if (boost::filesystem::is_regular_file(iter->status()) && iter->path().filename() == file_name)
  148 + {
  149 + path = iter->path();
  150 + return true;
  151 + }
  152 +
  153 + if (boost::filesystem::is_directory(iter->status()))
  154 + {
  155 + if (SearchFile(iter->path(), file_name, path))
  156 + {
  157 + return true;
  158 + }
  159 + }
  160 + }
  161 + return false;
  162 +}
  163 +
  164 +void DmpApplication::set_plugin_path(const std::string &plugin_path)
  165 +{
  166 + plugin_path_ = plugin_path;
  167 +}
  168 +
  169 +std::string DmpApplication::prefix_path()
  170 +{
  171 + return prefix_path_;
  172 +}
  173 +
  174 +std::string DmpApplication::libexec_path()
  175 +{
  176 + return libexec_path_;
  177 +}
  178 +
  179 +std::string DmpApplication::plugin_path()
  180 +{
  181 + return plugin_path_;
  182 +}
  183 +
  184 +bool DmpApplication::CreateDatabase()
  185 +{
  186 + return false;
  187 +}
  188 +
  189 +std::string DmpApplication::build_output_path()
  190 +{
  191 + return build_output_path_;
  192 +}
  193 +
  194 +std::string DmpApplication::DMapSettingsDirPath()
  195 +{
  196 + return "";
  197 +}
\ No newline at end of file
... ...
注册登录 后发表评论