34 #include <XMLWriter.h>
38 #include "BESInternalFatalError.h"
40 #include "DmrppParserSax2.h"
41 #include "DmrppTypeFactory.h"
42 #include "DmrppMetadataStore.h"
46 #define DEBUG_KEY "dmrpp_store"
47 #define MAINTAIN_STORE_SIZE_EVEN_WHEN_UNLIMITED 0
50 #define AT_EXIT(x) atexit((x))
64 #undef SYMETRIC_ADD_RESPONSES
70 using namespace dmrpp;
73 bool DmrppMetadataStore::d_enabled =
true;
107 DmrppMetadataStore::get_instance(
const string &cache_dir,
const string &prefix,
unsigned long long size)
109 if (d_enabled && d_instance == 0) {
111 d_enabled = d_instance->cache_enabled();
116 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::"<<__func__ <<
"() - " <<
"Cache is DISABLED"<< endl);
119 AT_EXIT(delete_instance);
121 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::"<<__func__ <<
"() - " <<
"Cache is ENABLED"<< endl);
125 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::get_instance(dir,prefix,size) - d_instance: " << d_instance << endl);
137 DmrppMetadataStore::get_instance()
139 if (d_enabled && d_instance == 0) {
141 d_enabled = d_instance->cache_enabled();
145 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::"<<__func__ <<
"() - " <<
"Cache is DISABLED"<< endl);
148 AT_EXIT(delete_instance);
150 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::"<<__func__ <<
"() - " <<
"Cache is ENABLED"<< endl);
154 BESDEBUG(DEBUG_KEY,
"DmrppMetadataStore::get_instance() - d_instance: " << (
void *) d_instance << endl);
160 void DmrppMetadataStore::StreamDMRpp::operator()(ostream &os)
168 dmrpp->set_print_chunks(
true);
174 static_cast<dmrpp::DMRpp*
>(d_dmr)->print_dmrpp(xml, href);
180 throw BESInternalFatalError(
"StreamDMRpp output operator call with non-DMRpp instance.", __FILE__, __LINE__);
196 DmrppMetadataStore::add_responses(DMR *dmr,
const string &name)
198 bool stored_dmr = GlobalMetadataStore::add_responses(dmr, name);
200 bool stored_dmrpp =
false;
202 d_ledger_entry = string(
"add DMR++ ").append(name);
205 stored_dmrpp = store_dap_response(write_the_dmrpp_response, get_hash(name +
"dmrpp_r"), name,
"DMRpp");
213 return(stored_dmr && stored_dmrpp);
217 DmrppMetadataStore::add_dmrpp_response(libdap::DMR *dmrpp,
const std::string &name)
219 bool stored_dmrpp =
false;
221 d_ledger_entry = string(
"add DMR++ ").append(name);
223 StreamDMRpp write_the_dmrpp_response(dmrpp);
224 stored_dmrpp = store_dap_response(write_the_dmrpp_response, get_hash(name +
"dmrpp_r"), name,
"DMRpp");
232 return(stored_dmrpp);
242 DmrppMetadataStore::get_dmr_object(
const string &name)
248 write_dmr_response(name, oss);
251 unique_ptr<DMRpp> dmrpp(
new DMRpp(&dmrpp_btf,
"mds"));
254 parser.
intern(oss.str(), dmrpp.get());
256 dmrpp->set_factory(0);
258 return dmrpp.release();
274 DmrppMetadataStore::get_dmrpp_object(
const string &name)
277 write_dmrpp_response(name, oss);
280 unique_ptr<DMRpp> dmrpp(
new DMRpp(&dmrpp_btf,
"mds"));
283 parser.
intern(oss.str(), dmrpp.get());
285 dmrpp->set_factory(0);
287 return dmrpp.release();