src/layerSelector/layerConfigConverter.js
import { Debug } from '../Debug'
function parseLayerEntry (layerEntry, menu, layers, baseLayer = false) {
if (layerEntry.type === 'Category') {
const groupEntry = {
type: 'group',
title: layerEntry.title,
buttons: []
}
if (layerEntry.activateChildren) {
groupEntry.groupButton = 'activate'
delete layerEntry.activateChildren
}
for (const childLayerEntry of layerEntry.layers) {
parseLayerEntry(childLayerEntry, groupEntry.buttons, layers, baseLayer)
}
menu.push(groupEntry)
} else if (layerEntry.type === 'WMS' || layerEntry.type === 'TileWMS') {
// TODO: parse featureInfo.checkable
layers.push(layerEntry)
if (layerEntry.buttons) {
const groupEntry = {
type: 'group',
buttons: layerEntry.buttons.map(b => {
b.type = 'WMS'
b.refId = layerEntry.id
return b
})
}
delete layerEntry.buttons
if (!layerEntry.source.categoryButton) {
groupEntry.groupButton = 'noButton'
} else {
delete layerEntry.source.categoryButton
groupEntry.title = layerEntry.title
}
menu.push(groupEntry)
} else {
menu.push({
type: 'layer',
refId: layerEntry.id
})
}
} else {
layers.push(layerEntry)
const menuEntry = {
type: 'layer',
refId: layerEntry.id
}
if (layerEntry.type === 'SilentGroup') {
layerEntry.type = 'Group'
}
menu.push(menuEntry)
}
}
export function layerConfigConverter (layerConfig) {
if (!layerConfig.layers) {
const newLayerConfig = {
menus: {
baseLayers: [
{
type: 'group',
items: 'exclusive',
groupButton: 'noButton',
buttons: []
}
],
featureLayers: []
},
queryLayers: [], // TODO: parse query layers, fixedFeatureLayers
layers: []
}
for (const layerEntry of layerConfig.baseLayers) {
layerEntry.overview = true
parseLayerEntry(layerEntry, newLayerConfig.menus.baseLayers[0].buttons, newLayerConfig.layers)
}
for (const layerEntry of layerConfig.featureLayers) {
parseLayerEntry(layerEntry, newLayerConfig.menus.featureLayers, newLayerConfig.layers)
}
Debug.warn('You are using an old style layer configuration. You might consider updating it. ' +
'Below is the transformed file content.')
Debug.info(JSON.stringify(newLayerConfig, null, 2))
return newLayerConfig
} else {
return layerConfig
}
}