Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/Portal/portal.cpp
T
2026-08-13 18:33:10 +02:00

352 lines
9.7 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Portal
* $Id$
* $HeadURL$
* $Author$
* Created by Norbert Thoden, NLSE, 2018-10-08
*/
// Own
#include "portal.h"
//#include <Map/situation_map_utils.h>
// Esri
#include <arcgis/Portal.h>
#include <arcgis/PortalItem.h>
#include <arcgis/Error.h>
// Qt
namespace Esri
{
namespace ArcGISRuntime
{
QString toString(const Error &value)
{
std::ostringstream stream;
stream << "Esri::ArcGISRuntime::Error: "
<< " code=" << value.code()
<< ", domain=" << (int)value.domain()
<< ", extendedErrorType=" << (int)value.extendedErrorType()
<< ", message='" << value.message() << "'"
<< ", additionalMessage='" << value.additionalMessage() << "'";
return QString::fromStdString(stream.str());
}
std::ostream &operator<< (std::ostream &stream,
const Esri::ArcGISRuntime::Error &value)
{
stream << toString(value);
return stream;
}
}
}
namespace SituationMap
{
class Portal::Private
{
public:
Private() = default;
~Private() = default;
Esri::ArcGISRuntime::Portal *m_portal = nullptr;
// QTimer *m_suppressTimer = nullptr;
}; // class Portal::Private
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Portal::Portal(QObject *parent)
: BaseClass(parent)
, d(new Private)
, m_logger(getLogger("Portal"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
Portal::~Portal()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete d;
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
bool Portal::init()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete d->m_portal;
QUrl portalUrl(QStringLiteral("http://excgeo20.sl.defence-elec.de/arcgis")); // http://excgeo20.sl.defence-elec.de/arcgis/
Esri::ArcGISRuntime::Credential credential(QStringLiteral("portaladmin"), QStringLiteral("mout11de"));
d->m_portal = new Esri::ArcGISRuntime::Portal(portalUrl, false);
// d->m_portal = new Esri::ArcGISRuntime::Portal(portalUrl, &credential);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::errorOccurred, this, &Portal::onPortalErrorOccurred);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::doneLoading, this, &Portal::onPortalDoneLoading);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::basemapsChanged, this, &Portal::onBasemapsChanged);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::featuredGroupsChanged, this, &Portal::onFeaturedGroupsChanged);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::featuredItemsChanged, this, &Portal::onFeaturedItemsChanged);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::homepageFeaturedContentChanged, this, &Portal::onHomepageFeatureContentChanged);
d->m_portal->load();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
return true;
}
bool Portal::fetchData()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
if (!d->m_portal || d->m_portal->loadStatus() != Esri::ArcGISRuntime::LoadStatus::Loaded)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " not loaded yet";
return false;
}
d->m_portal->fetchBasemaps();
d->m_portal->fetchFeaturedGroups();
d->m_portal->fetchFeaturedItems();
d->m_portal->fetchHomepageFeaturedContent();
// findItems :
Esri::ArcGISRuntime::PortalQueryParametersForItems query;
query.setSearchString(QLatin1String("1==1"));
// query.setTypes(QList<PortalItemType>() << PortalItemType::WebMap);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::findItemsCompleted, this, &Portal::onFindItemsCompleted);
d->m_portal->findItems(query);
// findGroups
QString groupsQuery(QLatin1String("1==1"));
Esri::ArcGISRuntime::PortalQueryParametersForGroups findGroupsQueryParameters(groupsQuery);
connect(d->m_portal, &Esri::ArcGISRuntime::Portal::findGroupsCompleted, this, &Portal::onFindGroupsCompleted);
d->m_portal->findGroups(findGroupsQueryParameters);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
return true;
}
void Portal::onPortalErrorOccurred(const Esri::ArcGISRuntime::Error &error)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " Portal -> EsriError occured: " << error;
}
void Portal::onPortalDoneLoading(const Esri::ArcGISRuntime::Error &loadError)
{
if (loadError.isEmpty())
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " Portal loaded";
fetchData();
} else {
ERROR_LOG(m_logger) << LOGFUNCTION << " Portal -> EsriError occured: " << loadError;
}
}
void Portal::onBasemapsChanged()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::BasemapListModel *model = d->m_portal->basemaps();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::Basemap *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " name = '" << item->name() << "'"
<< " url = '" << item->url().toString() << "'";
Esri::ArcGISRuntime::LayerListModel *llm = item->baseLayers();
if (!llm)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " llm is empty";
continue;
}
for (int j=0; i<llm->size(); ++j)
{
Esri::ArcGISRuntime::Layer *layer = llm->at(j);
if (!layer)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " layer is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " j=" << j
<< " layer = '" << layer->name() << "'"
<< " layerType = '" << (int)layer->layerType();
} // for
} // for
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void Portal::onFeaturedGroupsChanged()
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::PortalGroupListModel *model = d->m_portal->featuredGroups();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::PortalGroup *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " title = '" << item->title() << "'"
// << " url = '" << item->url().toString() << "'"
;
} // for
}
void Portal::onFeaturedItemsChanged()
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::PortalItemListModel *model = d->m_portal->featuredItems();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::PortalItem *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " name = '" << item->name() << "'"
<< " serviceUrl = '" << item->serviceUrl().toString() << "'";
} // for
}
void Portal::onHomepageFeatureContentChanged()
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::PortalItemListModel *model = d->m_portal->homepageFeaturedContent();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::PortalItem *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " name = '" << item->name() << "'"
<< " serviceUrl = '" << item->serviceUrl().toString() << "'";
} // for
}
void Portal::onFindItemsCompleted(Esri::ArcGISRuntime::PortalQueryResultSetForItems *result)
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::PortalItemListModel *model = result->itemResults();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::PortalItem *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " name = '" << item->name() << "'"
<< " serviceUrl = '" << item->serviceUrl().toString() << "'";
} // for
}
void Portal::onFindGroupsCompleted(Esri::ArcGISRuntime::PortalQueryResultSetForGroups *result)
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " ***** fired";
Esri::ArcGISRuntime::PortalGroupListModel *model = result->groupResults();
if (!model)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " model does not exits";
return;
}
for (int i=0; i<model->size(); ++i)
{
Esri::ArcGISRuntime::PortalGroup *item = model->at(i);
if (!item)
{
WARNING_LOG(m_logger) << LOGFUNCTION << " item is empty";
continue;
}
NOTICE_LOG(m_logger) << LOGFUNCTION
<< " i=" << i
<< " title = '" << item->title() << "'"
// << " toJson() = '" << item->toJson() << "'"
;
} // for
}
} // namespace SituationMap