352 lines
9.7 KiB
C++
Executable File
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
|