38#include <BESResponseHandler.h>
39#include <BESResponseNames.h>
40#include <BESVersionInfo.h>
41#include <BESDataNames.h>
42#include <BESDataNames.h>
43#include <TheBESKeys.h>
47#include "FONcRequestHandler.h"
50std::string FONcRequestHandler::temp_dir;
51bool FONcRequestHandler::byte_to_short;
52bool FONcRequestHandler::use_compression;
53bool FONcRequestHandler::use_shuffle;
54unsigned long long FONcRequestHandler::chunk_size;
55bool FONcRequestHandler::classic_model;
56bool FONcRequestHandler::no_global_attrs;
57unsigned long long FONcRequestHandler::request_max_size_kb;
58bool FONcRequestHandler::nc3_classic_format;
71static void read_key_value(
const string &key_name,
bool &key,
const bool default_value)
73 bool key_found =
false;
79 key = (value ==
"true" || value ==
"yes");
86static void read_key_value(
const string &key_name,
string &key,
const string &default_value)
88 bool key_found =
false;
99static void read_key_value(
const string &key_name,
size_t &key,
const int default_value)
101 bool key_found =
false;
106 istringstream iss(value);
109 if (iss.bad() || iss.fail()) key = default_value;
116static void read_key_value(
const string &key_name,
unsigned long long &key,
const unsigned long long default_value)
118 bool key_found =
false;
126 catch (
const std::invalid_argument& ia) {
150 if (FONcRequestHandler::temp_dir.empty()) {
151 read_key_value(FONC_TEMP_DIR_KEY, FONcRequestHandler::temp_dir, FONC_TEMP_DIR);
155 read_key_value(FONC_BYTE_TO_SHORT_KEY, FONcRequestHandler::byte_to_short, FONC_BYTE_TO_SHORT);
157 read_key_value(FONC_USE_COMP_KEY, FONcRequestHandler::use_compression, FONC_USE_COMP);
159 read_key_value(FONC_USE_SHUFFLE_KEY, FONcRequestHandler::use_shuffle, FONC_USE_SHUFFLE);
161 read_key_value(FONC_CHUNK_SIZE_KEY, FONcRequestHandler::chunk_size, FONC_CHUNK_SIZE);
163 read_key_value(FONC_CLASSIC_MODEL_KEY, FONcRequestHandler::classic_model, FONC_CLASSIC_MODEL);
165 read_key_value(FONC_NO_GLOBAL_ATTRS_KEY, FONcRequestHandler::no_global_attrs, FONC_NO_GLOBAL_ATTRS);
167 read_key_value(FONC_REQUEST_MAX_SIZE_KB_KEY, FONcRequestHandler::request_max_size_kb, FONC_REQUEST_MAX_SIZE_KB);
169 read_key_value(FONC_NC3_CLASSIC_FORMAT_KEY, FONcRequestHandler::nc3_classic_format, FONC_NC3_CLASSIC_FORMAT);
171 BESDEBUG(
"fonc",
"FONcRequestHandler::temp_dir: " << FONcRequestHandler::temp_dir << endl);
172 BESDEBUG(
"fonc",
"FONcRequestHandler::byte_to_short: " << FONcRequestHandler::byte_to_short << endl);
173 BESDEBUG(
"fonc",
"FONcRequestHandler::use_compression: " << FONcRequestHandler::use_compression << endl);
174 BESDEBUG(
"fonc",
"FONcRequestHandler::use_shuffle: " << FONcRequestHandler::use_shuffle << endl);
175 BESDEBUG(
"fonc",
"FONcRequestHandler::chunk_size: " << FONcRequestHandler::chunk_size << endl);
176 BESDEBUG(
"fonc",
"FONcRequestHandler::classic_model: " << FONcRequestHandler::classic_model << endl);
177 BESDEBUG(
"fonc",
"FONcRequestHandler::turn_off_global_attrs: " << FONcRequestHandler::no_global_attrs << endl);
178 BESDEBUG(
"fonc",
"FONcRequestHandler::request_max_size_kb: " << FONcRequestHandler::request_max_size_kb << endl);
179 BESDEBUG(
"fonc",
"FONcRequestHandler::nc3_classic_format " << FONcRequestHandler::nc3_classic_format << endl);
206 string key =
"FONc.Reference";
209 if (ref.empty()) ref =
"https://docs.opendap.org/index.php/BES_-_Modules_-_FileOut_Netcdf";
210 map<string, string> attrs;
211 attrs[
"name"] = MODULE_NAME;
212 attrs[
"version"] = MODULE_VERSION;
213 attrs[
"reference"] = ref;
214 info->begin_tag(
"module", &attrs);
215 info->end_tag(
"module");
233 info->add_module(MODULE_NAME, MODULE_VERSION);
247 strm << BESIndent::LMarg <<
"FONcRequestHandler::dump - ("
248 << (
void *)
this <<
")" << endl ;
249 BESIndent::Indent() ;
251 BESIndent::UnIndent() ;
Structure storing information used by the BES to handle the request.
informational response object
exception thrown if internal error encountered
Represents a specific data type request handler.
virtual bool add_method(const std::string &name, p_request_handler_method method)
add a handler method to the request handler that knows how to fill in a specific response object
virtual void dump(std::ostream &strm) const
dumps information about this object
virtual BESResponseObject * get_response_object()
return the current response object
Abstract base class representing a specific set of information in response to a request to the BES.
static std::string lowercase(const std::string &s)
static void trim_if_trailing_slash(std::string &value)
If the string ends in a slash, remove it This function works for empty strings (doing nothing)....
virtual void dump(std::ostream &strm) const
dumps information about this object
virtual ~FONcRequestHandler(void)
Any cleanup that needs to take place.
FONcRequestHandler(const std::string &name)
Constructor for FileOut NetCDF module.
static bool build_help(BESDataHandlerInterface &dhi)
adds help information for FileOut NetCDF to a help request
static bool build_version(BESDataHandlerInterface &dhi)
add version information to a version response
void get_value(const std::string &s, std::string &val, bool &found)
Retrieve the value of a given key, if set.
static TheBESKeys * TheKeys()