terriajs
Version:
Geospatial data visualization platform.
191 lines • 8.28 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import i18next from "i18next";
import { action, computed, runInAction, makeObservable } from "mobx";
import URI from "urijs";
import filterOutUndefined from "../../../Core/filterOutUndefined";
import isDefined from "../../../Core/isDefined";
import loadJson from "../../../Core/loadJson";
import replaceUnderscores from "../../../Core/replaceUnderscores";
import runLater from "../../../Core/runLater";
import { networkRequestError } from "../../../Core/TerriaError";
import CatalogMemberMixin from "../../../ModelMixins/CatalogMemberMixin";
import GroupMixin from "../../../ModelMixins/GroupMixin";
import UrlMixin from "../../../ModelMixins/UrlMixin";
import ArcGisFeatureServerCatalogGroupTraits from "../../../Traits/TraitsClasses/ArcGisFeatureServerCatalogGroupTraits";
import { InfoSectionTraits } from "../../../Traits/TraitsClasses/CatalogMemberTraits";
import ArcGisFeatureServerCatalogItem from "./ArcGisFeatureServerCatalogItem";
import CommonStrata from "../../Definition/CommonStrata";
import CreateModel from "../../Definition/CreateModel";
import createStratumInstance from "../../Definition/createStratumInstance";
import LoadableStratum from "../../Definition/LoadableStratum";
import proxyCatalogItemUrl from "../proxyCatalogItemUrl";
import StratumOrder from "../../Definition/StratumOrder";
export class FeatureServerStratum extends LoadableStratum(ArcGisFeatureServerCatalogGroupTraits) {
_catalogGroup;
_featureServer;
static stratumName = "featureServer";
constructor(_catalogGroup, _featureServer) {
super();
this._catalogGroup = _catalogGroup;
this._featureServer = _featureServer;
makeObservable(this);
}
duplicateLoadableStratum(model) {
return new FeatureServerStratum(model, this._featureServer);
}
get featureServerData() {
return this._featureServer;
}
get name() {
if (this._featureServer.documentInfo &&
this._featureServer.documentInfo.Title &&
this._featureServer.documentInfo.Title.length > 0) {
return replaceUnderscores(this._featureServer.documentInfo.Title);
}
}
get info() {
return [
createStratumInstance(InfoSectionTraits, {
name: i18next.t("models.arcGisFeatureServerCatalogGroup.serviceDescription"),
content: this._featureServer.serviceDescription
}),
createStratumInstance(InfoSectionTraits, {
name: i18next.t("models.arcGisFeatureServerCatalogGroup.dataDescription"),
content: this._featureServer.description
}),
createStratumInstance(InfoSectionTraits, {
name: i18next.t("models.arcGisFeatureServerCatalogGroup.copyrightText"),
content: this._featureServer.copyrightText
})
];
}
get cacheDuration() {
if (isDefined(super.cacheDuration)) {
return super.cacheDuration;
}
return "1d";
}
get dataCustodian() {
if (this._featureServer.documentInfo &&
this._featureServer.documentInfo.Author &&
this._featureServer.documentInfo.Author.length > 0) {
return this._featureServer.documentInfo.Author;
}
}
static async load(catalogGroup) {
const uri = new URI(catalogGroup.url).addQuery("f", "json");
if (catalogGroup.token) {
uri.addQuery("token", catalogGroup.token);
}
return loadJson(proxyCatalogItemUrl(catalogGroup, uri.toString()))
.then((featureServer) => {
// Is this really a FeatureServer REST response?
if (!featureServer || !featureServer.layers) {
throw networkRequestError({
title: i18next.t("models.arcGisFeatureServerCatalogGroup.invalidServiceTitle"),
message: i18next.t("models.arcGisFeatureServerCatalogGroup.invalidServiceMessage")
});
}
const stratum = new FeatureServerStratum(catalogGroup, featureServer);
return stratum;
})
.catch(() => {
throw networkRequestError({
sender: catalogGroup,
title: i18next.t("models.arcGisFeatureServerCatalogGroup.groupNotAvailableTitle"),
message: i18next.t("models.arcGisFeatureServerCatalogGroup.groupNotAvailableMessage")
});
});
}
get members() {
return filterOutUndefined(this.layers.map((layer) => {
if (!isDefined(layer.id)) {
return undefined;
}
return this._catalogGroup.uniqueId + "/" + layer.id;
}));
}
get layers() {
return this._featureServer.layers;
}
createMembersFromLayers() {
this.layers.forEach((layer) => this.createMemberFromLayer(layer));
}
createMemberFromLayer(layer) {
if (!isDefined(layer.id)) {
return;
}
const id = this._catalogGroup.uniqueId;
const layerId = id + "/" + layer.id;
const existingModel = this._catalogGroup.terria.getModelById(ArcGisFeatureServerCatalogItem, layerId);
let model;
if (existingModel === undefined) {
model = new ArcGisFeatureServerCatalogItem(layerId, this._catalogGroup.terria);
this._catalogGroup.terria.addModel(model);
}
else {
model = existingModel;
}
// Replace the stratum inherited from the parent group.
model.strata.delete(CommonStrata.definition);
model.setTrait(CommonStrata.definition, "name", replaceUnderscores(layer.name));
const uri = new URI(this._catalogGroup.url).segment(layer.id + ""); // Convert layer id to string as segment(0) means sthg different.
model.setTrait(CommonStrata.definition, "url", uri.toString());
if (this._catalogGroup.token) {
model.setTrait(CommonStrata.definition, "token", this._catalogGroup.token);
}
}
}
__decorate([
computed
], FeatureServerStratum.prototype, "name", null);
__decorate([
computed
], FeatureServerStratum.prototype, "info", null);
__decorate([
computed
], FeatureServerStratum.prototype, "cacheDuration", null);
__decorate([
computed
], FeatureServerStratum.prototype, "dataCustodian", null);
__decorate([
computed
], FeatureServerStratum.prototype, "members", null);
__decorate([
computed
], FeatureServerStratum.prototype, "layers", null);
__decorate([
action
], FeatureServerStratum.prototype, "createMembersFromLayers", null);
__decorate([
action
], FeatureServerStratum.prototype, "createMemberFromLayer", null);
StratumOrder.addLoadStratum(FeatureServerStratum.stratumName);
export default class ArcGisFeatureServerCatalogGroup extends UrlMixin(GroupMixin(CatalogMemberMixin(CreateModel(ArcGisFeatureServerCatalogGroupTraits)))) {
static type = "esri-featureServer-group";
get type() {
return ArcGisFeatureServerCatalogGroup.type;
}
get typeName() {
return i18next.t("models.arcGisFeatureServerCatalogGroup.name");
}
forceLoadMetadata() {
return FeatureServerStratum.load(this).then((stratum) => {
runInAction(() => {
this.strata.set(FeatureServerStratum.stratumName, stratum);
});
});
}
async forceLoadMembers() {
const featureServerStratum = this.strata.get(FeatureServerStratum.stratumName);
if (featureServerStratum) {
await runLater(() => featureServerStratum.createMembersFromLayers());
}
}
}
//# sourceMappingURL=ArcGisFeatureServerCatalogGroup.js.map