UNPKG

terriajs

Version:

Geospatial data visualization platform.

175 lines 7.39 kB
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, override } from "mobx"; import threddsCrawler from "thredds-catalog-crawler/src/entryBrowser"; import isDefined from "../../../Core/isDefined"; import CatalogMemberMixin from "../../../ModelMixins/CatalogMemberMixin"; import GroupMixin from "../../../ModelMixins/GroupMixin"; import UrlMixin from "../../../ModelMixins/UrlMixin"; import ThreddsCatalogGroupTraits from "../../../Traits/TraitsClasses/ThreddsCatalogGroupTraits"; import CatalogGroup from "../CatalogGroup"; import CommonStrata from "../../Definition/CommonStrata"; import CreateModel from "../../Definition/CreateModel"; import LoadableStratum from "../../Definition/LoadableStratum"; import { proxyCatalogItemBaseUrl } from "../proxyCatalogItemUrl"; import StratumOrder from "../../Definition/StratumOrder"; import ThreddsItemReference from "../CatalogReferences/ThreddsItemReference"; export class ThreddsStratum extends LoadableStratum(ThreddsCatalogGroupTraits) { _catalogGroup; static stratumName = "thredds"; threddsCatalog = undefined; constructor(_catalogGroup) { super(); this._catalogGroup = _catalogGroup; makeObservable(this); } duplicateLoadableStratum(model) { return new ThreddsStratum(model); } static async load(catalogGroup) { return new ThreddsStratum(catalogGroup); } get members() { if (this.threddsCatalog === undefined) return []; const memberIds = []; this.threddsCatalog.catalogs.forEach((catalog) => { memberIds.push(`${this._catalogGroup.uniqueId}/${catalog.id}`); }); this.threddsCatalog.datasets.forEach((dataset) => { dataset.catalogs.forEach((c) => { memberIds.push(`${this._catalogGroup.uniqueId}/${c.id}`); }); memberIds.push(`${this._catalogGroup.uniqueId}/${dataset.id}`); }); return memberIds; } createThreddsCatalog(catalog) { const id = `${this._catalogGroup.uniqueId}/${catalog.id}`; let model = this._catalogGroup.terria.getModelById(ThreddsCatalogGroup, id); if (!isDefined(model)) { model = new ThreddsCatalogGroup(id, this._catalogGroup.terria); this._catalogGroup.terria.addModel(model); } model.setTrait(CommonStrata.definition, "name", catalog.title); model.setTrait(CommonStrata.definition, "url", catalog.url); } async createMembers() { if (!isDefined(this._catalogGroup.url)) return; const proxy = proxyCatalogItemBaseUrl(this._catalogGroup, this._catalogGroup.url); this.threddsCatalog = await threddsCrawler(this._catalogGroup.url, proxy ? { proxy } : undefined); if (this.threddsCatalog === undefined) return; // Create sub-groups for any nested catalogs for (let i = 0; i < this.threddsCatalog.catalogs.length; i++) { this.createThreddsCatalog(this.threddsCatalog.catalogs[i]); } // Create members for individual datasets for (let i = 0; i < this.threddsCatalog.datasets.length; i++) { const ds = this.threddsCatalog.datasets[i]; await ds.loadAllNestedCatalogs(); for (let ii = 0; ii < ds.catalogs.length; ii++) { this.createThreddsCatalog(ds.catalogs[ii]); } if (ds.isParentDataset) { let parent = this._catalogGroup; if (this.threddsCatalog.datasets.length > 1) { const id = `${this._catalogGroup.uniqueId}/${ds.id}`; let model = this._catalogGroup.terria.getModelById(CatalogGroup, id); if (!isDefined(model)) { model = new CatalogGroup(id, this._catalogGroup.terria); this._catalogGroup.terria.addModel(model); } model.setTrait(CommonStrata.definition, "name", ds.name); parent = model; } ds.datasets.forEach((dataset) => { const item = this.createMemberFromDataset(dataset); if (item !== undefined) parent.add(CommonStrata.definition, item); }); } else if (ds.supportsWms) { this.createMemberFromDataset(ds); } } } createMemberFromDataset(threddsDataset) { if (!isDefined(threddsDataset.id)) { return undefined; } const itemId = this._catalogGroup.uniqueId + "/" + threddsDataset.id; let item = this._catalogGroup.terria.getModelById(ThreddsItemReference, itemId); if (item === undefined) { item = new ThreddsItemReference(itemId, this._catalogGroup.terria); item.setTrait(CommonStrata.definition, "isGroup", true); item.setDataset(threddsDataset); item.setThreddsStrata(item); item.terria.addModel(item); } return item; } } __decorate([ computed ], ThreddsStratum.prototype, "members", null); __decorate([ action ], ThreddsStratum.prototype, "createThreddsCatalog", null); __decorate([ action ], ThreddsStratum.prototype, "createMembers", null); __decorate([ action ], ThreddsStratum.prototype, "createMemberFromDataset", null); StratumOrder.addLoadStratum(ThreddsStratum.stratumName); export default class ThreddsCatalogGroup extends UrlMixin(GroupMixin(CatalogMemberMixin(CreateModel(ThreddsCatalogGroupTraits)))) { static type = "thredds-group"; constructor(...args) { super(...args); makeObservable(this); } get type() { return ThreddsCatalogGroup.type; } get typeName() { return i18next.t("models.thredds.nameGroup"); } get cacheDuration() { if (isDefined(super.cacheDuration)) { return super.cacheDuration; } return "1d"; } async forceLoadMetadata() { if (!this.strata.get(ThreddsStratum.stratumName)) { const stratum = await ThreddsStratum.load(this); if (stratum === undefined) return; await stratum.createMembers(); runInAction(() => { this.strata.set(ThreddsStratum.stratumName, stratum); }); } } async forceLoadMembers() { const stratum = this.strata.get(ThreddsStratum.stratumName); if (stratum) { await stratum.createMembers(); } } } __decorate([ override ], ThreddsCatalogGroup.prototype, "cacheDuration", null); //# sourceMappingURL=ThreddsCatalogGroup.js.map