import com.gridnine.xtrip.common.fx.assets.FxWorkspace
import com.gridnine.xtrip.common.fx.assets.FxWorkspaceItem
import com.gridnine.xtrip.common.model.BaseAsset
import com.gridnine.xtrip.common.model.asset.AssetsStorage
import com.gridnine.xtrip.common.search.SearchQuery
import groovy.xml.XmlUtil

import java.nio.charset.StandardCharsets

SearchQuery query = new SearchQuery()
query.preferredProperties.add(BaseAsset.Property.uid.name())
AssetsStorage.get().search(FxWorkspace.class, query).data.each { fxw ->
    fxw = AssetsStorage.get().load(FxWorkspace.class, fxw.uid)
    if (process(fxw.items)) {
        AssetsStorage.get().save(fxw)
        message("modified ${fxw.owner}")
    }
}
message('completed')

static boolean process(List<FxWorkspaceItem> items) {
    boolean modified = false
    items.each { fxwi ->
        boolean modifiedItem = false
        if (fxwi.toolId == 'index-list-nav-tool' && fxwi.parameters) {
            def toolData = new XmlSlurper().parse(new ByteArrayInputStream(fxwi.parameters))
            if (toolData.indexType.text() == 'com.gridnine.xtrip.common.model.profile.OrganizationIndex') {
                modifiedItem = toolData.columns.item.find { it.propertyId.text() == 'managers' } || toolData.filters.item.find { it.propertyId.text() == 'managers' }
                toolData.columns.item.findAll { it.propertyId.text() == 'managers' }.replaceNode {}
                toolData.filters.item.findAll { it.propertyId.text() == 'managers' }.replaceNode {}
            }
            if (modifiedItem) {
                fxwi.parameters = XmlUtil.serialize(toolData).getBytes(StandardCharsets.UTF_8)
            }
        }
        boolean modifiedSubItems = process(fxwi.subItems)
        modified = modified || modifiedItem || modifiedSubItems
    }
    return modified
}
