Web Content Manager
IndexedDB-backed ContentManager for the JS target. Implements every method of the ContentManager contract — image / vector / coverage tile stores, feature stores (bulk + tile-addressed), and web-service metadata.
Schema (one IDB database per WebContentManager, named pathName):
image_tiles,vector_tiles,coverage_tiles— tile blob stores keyed by[contentKey, z, x, y]. One store per data type covers every layer; no per-content-key store proliferation.features— feature rows with auto-increment id; indexesbyTile[contentKey, z, x, y](tile-addressed reads) andbyContentcontentKey(bulk reads + per-content cleanup).metadata—WebServiceInforecords keyed by content key. Walked by listEntries.
The cached-layer dispatcher (see OpenCachedLayer.kt in commonMain — reified openLayer / openElevationCoverage plus CachedLayerRegistry). The WFS arm currently depends on mil.nga.sf). JS callers can still inspect listEntries / findEntry and construct their own layers per service type.
Functions
Register a tiled image layer (WMS / WMTS / WebMercator).
Register a vector layer. Dispatches by concrete subtype to record the right service-identity row:
Register a tiled elevation coverage.
Truncate one content entry's tile / feature payload while keeping its registration intact — the WebServiceInfo row, the persisted level-set / tile-matrix-set, the display name, the isFloat choice, and any other per-content metadata stay so the caller can re-download tiles without re-configuring the layer.
Wrap one contentKey inside this ContentManager as a ContentEntry. Mirrors findEntry(key) for read-only inspection plus clearEntry / deleteEntry for lifecycle, behind one uniform surface.
Total on-disk size of the cache database.
Build an ElevationSourceFactory backed by this content manager's elevation cache. The factory owns the source-format → storage-format transcoding for every tile — callers just supply the network source (or null for offline replay) and the desired storage layout via isFloat.
Delete one content entry — drops the table(s), the web-service row, and the contents-table row. Use clearEntry instead when the caller wants to keep the layer registered for a re-download.
Most-recent registerWebService timestamp across all content keys. Per-content timestamps live on the WebServiceInfo records and are surfaced via listEntries / findEntry.
Enumerate every cached content entry. Lightweight — does not construct layers or read row data, only metadata.
Bulk-open every cached entry whose CacheEntry.dataType matches category. Return type follows the category's phantom witness:
IndexedDB-backed BlobStore for 3D Tiles payloads. Shares the BLOB_STORE_OGC3D object store across every dataset; records are namespaced by contentKey via the composite key [contentKey, uri].
Open contentKey as an elevation coverage narrowed to T. Returns null when the key is absent, registered as a layer (use openLayer), or the materialized type doesn't match T. Bound is the broad ElevationCoverage interface for symmetry with openLayer's Layer bound; today only TiledElevationCoverage subtypes are reachable from cache, so non-tiled-typed callers always get null.
Open (or create) a FeatureStore for vector-feature data — backed by data_type='features' in the GPKG schema. Used by WFS, Shapefile (bulk rows) and OsmBuildings (tile-addressed rows) in the same store shape.
Open (or create) a TileStore for image-tile data — backed by data_type='tiles' in the GPKG schema. Used by WMS/WMTS/WebMercator and any other raster layer that fetches PNG/JPEG/WebP bytes. Re-opening the same contentKey returns a store compatible with the previously persisted LevelSet (validates compatibility).
Open contentKey as a layer narrowed to T. Returns null when the key is absent, unregistered, backed by an elevation coverage (use openElevationCoverage), or the materialized type doesn't match T.
Reopen an Ogc3dTilesLayer from a ContentManager entry registered by an earlier openBlobStore(...) + registerWebService(...) pair. Reads the persisted earth.worldwind.layer.cache.WebServiceInfo (root URI in .address, auth-provider class name in .layerName, credentials JSON in .metadata) and rebuilds the layer end-to-end so the caller only has to do engine.layers.addLayer(layer).
Open (or create) a TileStore for vector-tile data — backed by data_type='vector-tiles' (im_vector_tiles_mapbox extension). Used by MVT layers that store raw protobuf bytes per tile.
Persist web-service metadata for contentKey in the GPKG gpkg_web_service extension table. Capabilities XML/JSON in WebServiceInfo.metadata survives across launches so the layer can be reconstructed without an online capabilities request.
Overwrite the user-visible display name for contentKey. No-op when the content key doesn't exist or the manager is read-only.
Per-content size by data type: walks the right IDB object store via the same impls the public stores expose, so the result matches what the per-store TileStore.sizeBytes / FeatureStore.sizeBytes would report.
Open a cached layer/coverage for a CacheEntry that has no registered web service — i.e. the content was imported directly into the cache (e.g. a standalone .gpkg file with no gpkg_web_service row). Returns null when the backend can't construct a layer in this mode.
Recover the pyramid LevelSet for an image / vector-tile cache, or null when the backend can't reconstruct one (e.g. JS / iOS where the schema doesn't persist the level-set descriptors). Used by the cross-platform reopen dispatcher to rebuild a layer's level-set after restart; callers fall back to a sensible default (slippy-map 0..21) when this returns null.
Recover the TileMatrixSet for a coverage cache, or null when the backend can't reconstruct one. Mirrors tryRecoverLevelSet for elevation coverages.