-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshowMetadata.cpp
More file actions
111 lines (103 loc) · 3.51 KB
/
Copy pathshowMetadata.cpp
File metadata and controls
111 lines (103 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <sstream>
#include <strutils.hpp>
#include <metadata_export_pg.hpp>
#include <metadata.hpp>
#include <web/web.hpp>
#include <tokendoc.hpp>
#include <PostgreSQL.hpp>
#include <myerror.hpp>
using namespace PostgreSQL;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::unique_ptr;
using strutils::ds_aliases;
using strutils::ng_gdex_id;
using strutils::replace_all;
using strutils::to_sql_tuple_string;
metautils::Directives metautils::directives;
metautils::Args metautils::args;
string myerror = "";
string mywarning = "";
struct LocalArgs {
LocalArgs() : action("ListFormats"), format() { }
string action, format;
} local_args;
void parseQuery() {
QueryString query_string(QueryString::GET);
auto v = query_string.value("action");
if (!v.empty()) {
local_args.action = v;
}
metautils::args.dsid = query_string.value("dsnum");
local_args.format = query_string.value("format");
}
void list_formats() {
cout << "Content-type: text/html" << endl << endl;
TokenDocument tdoc("/usr/local/www/server_root/web/html/oai/showMetadata-"
"format-menu.html");
tdoc.add_replacement("__DSNUM__", metautils::args.dsid);
Server server(metautils::directives.database_server, metautils::directives.
metadb_username, metautils::directives.metadb_password, "rdadb");
LocalQuery q("doi", "dssdb.dsvrsn", "dsid in " + to_sql_tuple_string(
ds_aliases(ng_gdex_id(metautils::args.dsid))) + " and status = 'A'");
Row row;
if (q.submit(server) == 0 && q.fetch_row(row)) {
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "datacite4" },
{ "DESCRIPTION", "DataCite v4" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "datacite" },
{ "DESCRIPTION", "DataCite v3" }
});
}
server.disconnect();
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "dif" },
{ "DESCRIPTION", "GCMD Directory Interchange Format (DIF)" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "oai_dc" },
{ "DESCRIPTION", "Dublin Core (DC)" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "fgdc" },
{ "DESCRIPTION", "Federal Geographic Data Committee (FGDC)" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "iso19139" },
{ "DESCRIPTION", "International Organization for Standardization (ISO) 19139" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "iso19115-3" },
{ "DESCRIPTION", "International Organization for Standardization (ISO) 19115-3" }
});
tdoc.add_repeat("__FORMAT_OPTIONS__", TokenDocument::REPEAT_PAIRS{
{ "IDENTIFIER", "json-ld" },
{ "DESCRIPTION", "JSON-LD Structured Data" }
});
cout << tdoc << endl;
}
void get_content() {
stringstream xmlss;
unique_ptr<TokenDocument> token_doc;
metadataExport::export_metadata(local_args.format, token_doc, xmlss,
metautils::args.dsid);
auto xs = xmlss.str();
replace_all(xs, "<", "<");
replace_all(xs, ">", ">");
cout << "Content-type: text/plain" << endl << endl;
cout << xs << endl;
}
int main(int argc, char **argv) {
metautils::read_config("showMetadata", "", false);
parseQuery();
if (local_args.action == "ListFormats") {
list_formats();
} else if (local_args.action == "GetContent") {
get_content();
}
}