terriajs
Version:
Geospatial data visualization platform.
123 lines • 4.42 kB
JavaScript
import i18next from "i18next";
import filterOutUndefined from "../../../Core/filterOutUndefined";
import { isJsonObject, isJsonString } from "../../../Core/Json";
import loadXML from "../../../Core/loadXML";
import { networkRequestError } from "../../../Core/TerriaError";
import xml2json from "../../../ThirdParty/xml2json";
import { parseOnlineResource, parseOwsKeywordList } from "./OwsInterfaces";
export default class WebProcessingServiceCapabilities {
capabilitiesXml;
capabilities;
constructor(capabilitiesXml, capabilities) {
this.capabilitiesXml = capabilitiesXml;
this.capabilities = capabilities;
}
static fromUrl(url) {
return Promise.resolve(loadXML(url)).then(function (capabilitiesXml) {
const capabilities = parseCapabilities(xml2json(capabilitiesXml));
if (capabilitiesXml === undefined || capabilities === undefined) {
throw networkRequestError({
title: i18next.t("models.webProcessingServiceCatalogGroup.invalidCapabilitiesTitle"),
message: i18next.t("models.webProcessingServiceCatalogGroup.invalidCapabilitiesMessage", {
url: url
})
});
}
return new WebProcessingServiceCapabilities(capabilitiesXml, capabilities);
});
}
get ServiceIdentification() {
return this.capabilities.ServiceIdentification;
}
get ServiceProvider() {
return this.capabilities.ServiceProvider;
}
get ProcessOfferings() {
return this.capabilities.ProcessOfferings;
}
}
function parseCapabilities(json) {
if (!isJsonObject(json))
return;
const ServiceIdentification = parseServiceIdentification(json.ServiceIdentification);
if (ServiceIdentification === undefined)
return;
const ServiceProvider = parseServiceProvider(json.ServiceProvider);
const ProcessOfferings = parseProcessOfferings(json.ProcessOfferings) ?? [];
return {
ServiceIdentification,
ServiceProvider,
ProcessOfferings
};
}
function parseServiceIdentification(json) {
if (!isJsonObject(json))
return;
const ServiceType = isJsonString(json.ServiceType)
? json.ServiceType
: undefined;
const ServiceTypeVersion = isJsonString(json.ServiceTypeVersion)
? [json.ServiceTypeVersion]
: Array.isArray(json.ServiceTypeVersion)
? filterOutUndefined(json.ServiceTypeVersion.map((s) => (isJsonString(s) ? s : undefined)))
: undefined;
if (ServiceType === undefined ||
ServiceTypeVersion === undefined ||
ServiceTypeVersion.length === 0) {
return;
}
const Title = isJsonString(json.Title) ? json.Title : undefined;
const Abstract = isJsonString(json.Abstract) ? json.Abstract : undefined;
const Fees = isJsonString(json.Fees) ? json.Fees : undefined;
const AccessConstraints = isJsonString(json.AccessConstraints)
? json.AccessConstraints
: undefined;
const Keywords = parseOwsKeywordList(json);
return {
ServiceType,
ServiceTypeVersion,
Title,
Abstract,
Fees,
AccessConstraints,
Keywords
};
}
function parseServiceProvider(json) {
if (!isJsonObject(json))
return;
const ProviderName = isJsonString(json.ProviderName)
? json.ProviderName
: undefined;
const ProviderSite = parseOnlineResource(json.OnlineResource);
return {
ProviderName,
ProviderSite
};
}
function parseProcessOfferings(json) {
if (!isJsonObject(json))
return undefined;
const processes = Array.isArray(json.Process)
? json.Process
: isJsonObject(json.Process)
? [json.Process]
: [];
const ProcessOfferings = filterOutUndefined(processes.map(parseProcess));
return ProcessOfferings;
}
function parseProcess(json) {
if (!isJsonObject(json))
return;
if (!isJsonString(json.Identifier))
return;
const Identifier = json.Identifier;
const Title = isJsonString(json.Title) ? json.Title : undefined;
const Abstract = isJsonString(json.Abstract) ? json.Abstract : undefined;
return {
Identifier,
Title,
Abstract
};
}
//# sourceMappingURL=WebProcessingServiceCapabilities.js.map