/** * @RDE_HEADER@ * Portal * $Id$ * $HeadURL$ * $Author$ * Created by Norbert Thoden, NLSE, 2018-10-08 */ // Own #include "portal.h" //#include // Esri #include #include #include // 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::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; isize(); ++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; isize(); ++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; isize(); ++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; isize(); ++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; isize(); ++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; isize(); ++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; isize(); ++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