|
|
|
#pragma once
|
|
|
|
#include "cache.h"
|
|
|
|
#include "curlfuncs.h"
|
|
|
|
#include "merrors.h"
|
|
|
|
#include <json/json.h>
|
|
|
|
|
|
|
|
using michlib::Error;
|
|
|
|
using michlib::RetVal;
|
|
|
|
|
|
|
|
class CopernicusCatalog
|
|
|
|
{
|
|
|
|
static const MString caturl;
|
|
|
|
|
|
|
|
std::unique_ptr<GenericCache> cache;
|
|
|
|
CURLRAII chandle;
|
|
|
|
Json::Value catalog;
|
|
|
|
|
|
|
|
// Download catalog
|
|
|
|
Error GetCatalog();
|
|
|
|
|
|
|
|
// Asset url from dataset
|
|
|
|
RetVal<MString> AssetURL(const MString& prod, const MString& dataset, const MString& asset) const;
|
|
|
|
|
|
|
|
public:
|
|
|
|
CopernicusCatalog();
|
|
|
|
|
|
|
|
// Download JSON from url
|
|
|
|
RetVal<Json::Value> GetJSON(const MString& url) const;
|
|
|
|
|
|
|
|
// List of products
|
|
|
|
RetVal<std::vector<MString>> ProductList() const;
|
|
|
|
|
|
|
|
// List of datasets in product
|
|
|
|
RetVal<std::vector<MString>> DatasetList(const MString& prod) const;
|
|
|
|
|
|
|
|
// URL of product
|
|
|
|
RetVal<MString> ProductURL(const MString& prod) const;
|
|
|
|
|
|
|
|
// URL of dataset
|
|
|
|
RetVal<MString> DatasetURL(const MString& prod, const MString& dataset) const;
|
|
|
|
|
|
|
|
// URL of native data (files) in dataset
|
|
|
|
RetVal<MString> DatasetNativeURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "native"); }
|
|
|
|
|
|
|
|
// URL of timechuncked data (files) in dataset
|
|
|
|
RetVal<MString> DatasetTimeURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "timeChunked"); }
|
|
|
|
|
|
|
|
// URL of geochuncked data (files) in dataset
|
|
|
|
RetVal<MString> DatasetGeoURL(const MString& prod, const MString& dataset) const { return AssetURL(prod, dataset, "geoChunked"); }
|
|
|
|
|
|
|
|
bool Valid() const { return catalog.isObject(); }
|
|
|
|
|
|
|
|
explicit operator bool() const { return Valid(); }
|
|
|
|
};
|