41 static bool profile() {
46 static string getDefaultServerURL() {
47 return "http://bridges-cs.herokuapp.com";
50 bool jsonFlag =
false;
52 bool post_visualization_link =
true;
54 string user_name = string(),
57 string description = string();
59 string title = string();
61 unsigned int assn_num = 0;
65 string server_url =
"http://bridges-cs.herokuapp.com";
67 string BASE_URL = server_url +
"/assignments/";
70 string map_overlay_options[3] = {
"cartesian",
"albersusa",
"equirectangular"};
71 bool map_overlay =
false;
72 string coord_system_type =
"cartesian";
75 vector<double> wc_window;
77 unsigned int lastAssignNum = 0, subAssignNum = 0;
96 Bridges (
const string& name,
const string& key) {
116 Bridges (
unsigned int num,
const string& name,
const string& key) {
141 post_visualization_link = link_url;
173 char* force = getenv(
"FORCE_BRIDGES_USERNAME");
174 if (force !=
nullptr) {
199 char* force = getenv(
"FORCE_BRIDGES_APIKEY");
200 if (force !=
nullptr) {
224 char* force = getenv(
"FORCE_BRIDGES_ASSIGNMENT");
225 if (force !=
nullptr) {
226 num = std::atoi(force);
231 if (assn_num != lastAssignNum) {
232 lastAssignNum = assn_num;
292 setDataStructure(&ds);
322 void initialize(
unsigned int num,
const string& username,
const string& apikey) {
324 setUserName(username);
336 if (server_type ==
"live")
337 server_url =
"http://bridges-cs.herokuapp.com";
338 else if (server_type ==
"clone")
339 server_url =
"http://bridges-clone.herokuapp.com";
340 else if (server_type ==
"games")
341 server_url =
"http://bridges-games.herokuapp.com";
342 else if (server_type ==
"local")
343 server_url =
"http://127.0.0.1:3000";
345 BASE_URL = server_url +
"/assignments/";
356 map_overlay = overlay_flag;
369 std::transform(coord.begin(), coord.end(), coord.begin(), ::tolower);
370 if (coord ==
"cartesian" || coord ==
"albersusa" || coord ==
"equirectangular" 371 || coord ==
"window")
372 coord_system_type = coord;
374 cout <<
"Unrecognized coordinate system \'" + coord +
"\', defaulting to " 375 <<
"cartesian. Options:";
376 for (
auto proj : map_overlay_options)
378 coord_system_type =
"cartesian";
389 return coord_system_type;
402 void setWindow (
int xmin,
int xmax,
int ymin,
int ymax) {
403 setWindow(
double(xmin),
double(xmax),
double(ymin),
double(ymax));
416 void setWindow (
double xmin,
double xmax,
double ymin,
double ymax) {
418 wc_window.push_back(xmin);
419 wc_window.push_back(xmax);
420 wc_window.push_back(ymin);
421 wc_window.push_back(ymax);
431 std::chrono::time_point<std::chrono::system_clock> start;
432 std::chrono::time_point<std::chrono::system_clock> end;
433 std::chrono::time_point<std::chrono::system_clock> jsonbuild_start;
434 std::chrono::time_point<std::chrono::system_clock> jsonbuild_end;
435 std::chrono::time_point<std::chrono::system_clock> httprequest_start;
436 std::chrono::time_point<std::chrono::system_clock> httprequest_end;
439 start = std::chrono::system_clock::now();
442 if (getAssignment() != lastAssignNum) {
443 lastAssignNum = getAssignment();
446 if (subAssignNum == 99) {
447 cout <<
"#sub-assignments limit(99) exceeded, visualization not generated .." 452 cerr <<
"Error: Data Structure handle null! Visualization not generated.";
461 jsonbuild_start = std::chrono::system_clock::now();
463 string ds_json = getJSONHeader() + ds_handle->getDataStructureRepresentation();
465 jsonbuild_end = std::chrono::system_clock::now();
470 if (getVisualizeJSONFlag()) {
471 cout <<
"JSON[" + ds_handle->
getDStype() +
"]:\t" << ds_json << endl;
475 httprequest_start = std::chrono::system_clock::now();
478 ServerComm::makeRequest(BASE_URL + to_string(getAssignment()) +
"." +
479 (subAssignNum > 9 ?
"" :
"0") + to_string(subAssignNum) +
"?apikey=" + getApiKey() +
480 "&username=" + getUserName(), {
"Content-Type: text/plain"}, ds_json);
482 if (post_visualization_link) {
483 cout <<
"Success: Assignment posted to the server. " << endl
484 <<
"Check out your visualization at:" << endl << endl
485 << BASE_URL + to_string(getAssignment()) +
"/" + getUserName() << endl << endl;
489 catch (
const string& error_str) {
490 cerr <<
"\nPosting assignment to the server failed!" << endl
491 << error_str << endl << endl;
492 cerr <<
"Provided Bridges Credentials:" << endl <<
493 "\t User Name: " << getUserName() << endl <<
494 "\t API Key: " << getApiKey() << endl <<
495 "\t Assignment Number: " << getAssignment() << endl;
498 httprequest_end = std::chrono::system_clock::now();
503 end = std::chrono::system_clock::now();
505 std::chrono::duration<double> totaltime = end - start;
506 std::chrono::duration<double> jsonbuildtime = jsonbuild_end - jsonbuild_start;
507 std::chrono::duration<double> httptime = httprequest_end - httprequest_start;
508 std::cerr <<
"total visualize() time:" << totaltime.count() <<
" seconds" 509 <<
" (including JSON build time: " << jsonbuildtime.count() <<
" seconds" 510 <<
" and HTTP request time: " << httptime.count() <<
" seconds)." 516 string getServerURL()
const {
521 string getJSONHeader () {
532 if (wc_window.size() == 4) {
534 json_header += std::to_string(wc_window[0]) +
COMMA +
535 std::to_string(wc_window[1]) +
COMMA +
536 std::to_string(wc_window[2]) +
COMMA + std::to_string(wc_window[3]);
void visualize()
Definition: Bridges.h:430
This is the superclass of all data structure types in BRIDGES.
Definition: DataStructure.h:73
void setDescription(const string &descr)
Definition: Bridges.h:269
bool getVisualizeJSONFlag() const
Definition: Bridges.h:127
virtual const string getDStype() const =0
void setCoordSystemType(string coord)
Definition: Bridges.h:368
void setWindow(int xmin, int xmax, int ymin, int ymax)
Definition: Bridges.h:402
const string COLON
Definition: DataStructure.h:51
Bridges(unsigned int num, const string &name, const string &key)
constructor to bridges
Definition: Bridges.h:116
void setTitle(const string &t)
Definition: Bridges.h:254
void setServer(const string &server_type)
Definition: Bridges.h:335
const string OPEN_BOX
Definition: DataStructure.h:54
const string & getCoordSystemType()
Definition: Bridges.h:388
const string & getDescription() const
Definition: Bridges.h:262
void setDataStructure(DataStructure *ds)
Definition: Bridges.h:280
void setAssignment(unsigned int num)
Definition: Bridges.h:223
This is meant to be an internal class, not something that the library user will use.
Definition: SocketConnection.h:37
Bridges(const string &name, const string &key)
constructor to bridges
Definition: Bridges.h:96
void setDataStructure(DataStructure &ds)
Definition: Bridges.h:291
This class contains methods to connect and transmit a user's data structure representation to the Bri...
Definition: Bridges.h:39
void setUserName(string name)
Set user name.
Definition: Bridges.h:172
void postVisualizationLink(bool link_url)
Definition: Bridges.h:140
these methods convert byte arrays in to base64 codes and are used in BRIDGES to represent the color a...
Definition: alltypes.h:4
const string OPEN_CURLY
Definition: DataStructure.h:52
This class provides an API to various data sources used in BRIDGES.
Definition: DataSource.h:59
const string & getTitle() const
Definition: Bridges.h:243
const string CLOSE_BOX
Definition: DataStructure.h:55
void setMapOverlay(bool overlay_flag)
Turns on map overlay for subsequent visualizations - used with location specific datasets.
Definition: Bridges.h:355
void initialize(unsigned int num, const string &username, const string &apikey)
Sets Bridges assignment and credential information.
Definition: Bridges.h:322
void setVisualizeJSONFlag(bool flag)
Definition: Bridges.h:149
Bridges()
Definition: Bridges.h:81
const string & getApiKey() const
Definition: Bridges.h:185
DataStructure * getDataStructure()
Definition: Bridges.h:301
void setApiKey(string key)
Set API key credentials.
Definition: Bridges.h:198
const string & getUserName() const
Definition: Bridges.h:160
const string COMMA
Definition: DataStructure.h:50
void setWindow(double xmin, double xmax, double ymin, double ymax)
sets the world coordinate window defining the space of the user defined objects (or nodes) ...
Definition: Bridges.h:416
const string QUOTE
Definition: DataStructure.h:49
unsigned int getAssignment() const
Definition: Bridges.h:211
std::string JSONencode(const T &d)
Definition: JSONutil.h:37