bool OGRAmigoCloudDataSource::ListDatasets() { std::stringstream url; url << std::string(GetAPIURL()) << "/users/0/projects/" << std::string(GetProjectId()) << "/datasets/?summary"; json_object* result = RunGET(url.str().c_str()); if( result == nullptr ) { CPLError(CE_Failure, CPLE_AppDefined, "AmigoCloud:get failed."); return false; } if( result != nullptr ) { auto type = json_object_get_type(result); if(type == json_type_object) { json_object *poResults = CPL_json_object_object_get(result, "results"); if(poResults != nullptr && json_object_get_type(poResults) == json_type_array) { CPLprintf("List of available datasets for project id: %s\n", GetProjectId()); CPLprintf("| id \t | name\n"); CPLprintf("|--------|-------------------\n"); const auto nSize = json_object_array_length(poResults); for(auto i = decltype(nSize){0}; i < nSize; ++i) { json_object *ds = json_object_array_get_idx(poResults, i); if(ds!=nullptr) { const char *name = nullptr; int64_t dataset_id = 0; json_object *poName = CPL_json_object_object_get(ds, "name"); if (poName != nullptr) { name = json_object_get_string(poName); } json_object *poId = CPL_json_object_object_get(ds, "id"); if (poId != nullptr) { dataset_id = json_object_get_int64(poId); } if (name != nullptr) { std::stringstream str; str << "| " << dataset_id << "\t | " << name; CPLprintf("%s\n", str.str().c_str()); } } } } } json_object_put(result); } return true; }
void OGRAmigoCloudDataSource::SubmitChangeset(const CPLString &json) { std::stringstream url; url << std::string(GetAPIURL()) << "/users/0/projects/" + std::string(GetProjectId()) + "/submit_changeset"; std::stringstream changeset; changeset << "{\"changeset\":\"" << OGRAMIGOCLOUDJsonEncode(json) << "\"}"; json_object* poObj = RunPOST(url.str().c_str(), changeset.str().c_str()); if( poObj != nullptr ) json_object_put(poObj); }
OGRErr OGRAmigoCloudDataSource::DeleteLayer(int iLayer) { if( !bReadWrite ) { CPLError(CE_Failure, CPLE_AppDefined, "Operation not available in read-only mode"); return OGRERR_FAILURE; } if( iLayer < 0 || iLayer >= nLayers ) { CPLError( CE_Failure, CPLE_AppDefined, "Layer %d not in legal range of 0 to %d.", iLayer, nLayers-1 ); return OGRERR_FAILURE; } /* -------------------------------------------------------------------- */ /* Blow away our OGR structures related to the layer. This is */ /* pretty dangerous if anything has a reference to this layer! */ /* -------------------------------------------------------------------- */ CPLString osDatasetId = papoLayers[iLayer]->GetDatasetId(); CPLDebug( "AMIGOCLOUD", "DeleteLayer(%s)", osDatasetId.c_str() ); int bDeferredCreation = papoLayers[iLayer]->GetDeferredCreation(); papoLayers[iLayer]->CancelDeferredCreation(); delete papoLayers[iLayer]; memmove( papoLayers + iLayer, papoLayers + iLayer + 1, sizeof(void *) * (nLayers - iLayer - 1) ); nLayers--; if (osDatasetId.empty()) return OGRERR_NONE; if( !bDeferredCreation ) { std::stringstream url; url << std::string(GetAPIURL()) << "/users/0/projects/" + std::string(GetProjectId()) + "/datasets/"+ osDatasetId.c_str(); if( !RunDELETE(url.str().c_str()) ) { return OGRERR_FAILURE; } } return OGRERR_NONE; }