123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "hdfspp/config_parser.h"
- #include "common/hdfs_configuration.h"
- #include "common/configuration_loader.h"
- #include <string>
- #include <memory>
- #include <vector>
- #include <numeric>
- namespace hdfs {
- static const char kSearchPathSeparator = ':';
- HdfsConfiguration LoadDefault(ConfigurationLoader & loader)
- {
- optional<HdfsConfiguration> result = loader.LoadDefaultResources<HdfsConfiguration>();
- if (result)
- {
- return result.value();
- }
- else
- {
- return loader.NewConfig<HdfsConfiguration>();
- }
- }
- class ConfigParser::impl {
- public:
- impl() :
- config_(loader_.NewConfig<HdfsConfiguration>()) {
- }
- impl(const std::vector<std::string>& dirs) :
- config_(loader_.NewConfig<HdfsConfiguration>()) {
- // Convert vector of paths into ':' separated path
- std::string path = std::accumulate(dirs.begin(), dirs.end(), std::string(""),
- [](std::string cumm, std::string elem) {return cumm + kSearchPathSeparator + elem;});
- loader_.SetSearchPath(path);
- config_ = LoadDefault(loader_);
- }
- impl(const std::string& path) :
- config_(loader_.NewConfig<HdfsConfiguration>()) {
- loader_.SetSearchPath(path);
- config_ = LoadDefault(loader_);
- }
- bool LoadDefaultResources() {
- config_ = LoadDefault(loader_);
- return true;
- }
- std::vector<std::pair<std::string, Status> > ValidateResources() const {
- return loader_.ValidateDefaultResources<HdfsConfiguration>();
- }
- bool get_int(const std::string& key, int& outval) const {
- auto ret = config_.GetInt(key);
- if (!ret) {
- return false;
- } else {
- outval = *ret;
- return true;
- }
- }
- bool get_string(const std::string& key, std::string& outval) const {
- auto ret = config_.Get(key);
- if (!ret) {
- return false;
- } else {
- outval = *ret;
- return true;
- }
- }
- bool get_bool(const std::string& key, bool& outval) const {
- auto ret = config_.GetBool(key);
- if (!ret) {
- return false;
- } else {
- outval = *ret;
- return true;
- }
- }
- bool get_double(const std::string& key, double& outval) const {
- auto ret = config_.GetDouble(key);
- if (!ret) {
- return false;
- } else {
- outval = *ret;
- return true;
- }
- }
- bool get_uri(const std::string& key, URI& outval) const {
- auto ret = config_.GetUri(key);
- if (!ret) {
- return false;
- } else {
- outval = *ret;
- return true;
- }
- }
- bool get_options(Options& outval) {
- outval = config_.GetOptions();
- return true;
- }
- private:
- ConfigurationLoader loader_;
- HdfsConfiguration config_;
- };
- ConfigParser::ConfigParser() {
- pImpl.reset(new ConfigParser::impl());
- }
- ConfigParser::ConfigParser(const std::vector<std::string>& configDirectories) {
- pImpl.reset(new ConfigParser::impl(configDirectories));
- }
- ConfigParser::ConfigParser(const std::string& path) {
- pImpl.reset(new ConfigParser::impl(path));
- }
- ConfigParser::~ConfigParser() = default;
- ConfigParser::ConfigParser(ConfigParser&&) = default;
- ConfigParser& ConfigParser::operator=(ConfigParser&&) = default;
- bool ConfigParser::LoadDefaultResources() { return pImpl->LoadDefaultResources(); }
- std::vector<std::pair<std::string, Status> > ConfigParser::ValidateResources() const { return pImpl->ValidateResources();}
- bool ConfigParser::get_int(const std::string& key, int& outval) const { return pImpl->get_int(key, outval); }
- int ConfigParser::get_int_or(const std::string& key, const int defaultval) const {
- int res = 0;
- if(get_int(key, res)) {
- return res;
- } else {
- return defaultval;
- }
- }
- bool ConfigParser::get_string(const std::string& key, std::string& outval) const { return pImpl->get_string(key, outval); }
- std::string ConfigParser::get_string_or(const std::string& key, const std::string& defaultval) const {
- std::string res;
- if(get_string(key, res)) {
- return res;
- } else {
- return defaultval;
- }
- }
- bool ConfigParser::get_bool(const std::string& key, bool& outval) const { return pImpl->get_bool(key, outval); }
- bool ConfigParser::get_bool_or(const std::string& key, const bool defaultval) const {
- bool res = false;
- if(get_bool(key, res)) {
- return res;
- } else {
- return defaultval;
- }
- }
- bool ConfigParser::get_double(const std::string& key, double& outval) const { return pImpl->get_double(key, outval); }
- double ConfigParser::get_double_or(const std::string& key, const double defaultval) const {
- double res = 0;
- if(get_double(key, res)) {
- return res;
- } else {
- return defaultval;
- }
- }
- bool ConfigParser::get_uri(const std::string& key, URI& outval) const { return pImpl->get_uri(key, outval); }
- URI ConfigParser::get_uri_or(const std::string& key, const URI& defaultval) const {
- URI res;
- if(get_uri(key, res)) {
- return res;
- } else {
- res = defaultval;
- return res;
- }
- }
- bool ConfigParser::get_options(Options& outval) const { return pImpl->get_options(outval); }
- Options ConfigParser::get_options_or(const Options& defaultval) const {
- Options res;
- if(get_options(res)) {
- return res;
- } else {
- res = defaultval;
- return res;
- }
- }
- } // end namespace hdfs
|