functions/process-map.ps1

function import-map {
    [cmdletbinding()]
    param([Parameter(Mandatory=$true)] $maps)
    
    if ($maps -is [System.Collections.IDictionary] ) {
        return import-mapobject $maps
    }    
    else {
        return import-mapfile $maps
    }
}

function import-mapfile {
    [cmdletbinding()]
    param([Parameter(Mandatory=$true)] $maps)
  # Measure-function "$($MyInvocation.MyCommand.Name)" {

        write-verbose "processing publishmap..."

        if ($null -ne $maps) {
            $maps = @($maps)
        }
        
        $publishmap = @{}

        foreach($m in $maps) {
            $publishmap += import-singlemapfile $m
        }

        write-verbose "processing publishmap... DONE"

        return $publishmap
  # }
}


function import-mapobject { 
    [cmdletbinding()]
    param([Parameter(Mandatory=$true)] $map) 
    $pmap = @{}
    
    $pmap = import-genericgroup $map ""   
  # Measure-function "add-metaproperties" {
        $pmap = add-metaproperties $pmap ""
 # }
    return $pmap
}

function import-singlemapfile($file) {
    $fullname = $file
    if ($null -ne $fullname.FullName) {
        $Fullname =$Fullname.FullName 
    }
    $map = & "$FullName"
    
    #$publishmap_obj = ConvertTo-Object $publishmap
    $pmap = import-mapobject $map

    return $pmap
}

# this is imported from native .dll
# function import-genericgroup($group,
# $fullpath,
# $settings = $null,
# $settingskey = "settings",
# $specialkeys = @("settings", "global_profiles")
# ) {
# # Measure-function "$($MyInvocation.MyCommand.Name)" {

# Write-Verbose "processing map path $fullpath"
   
# $result = {}

# # only direct children inherit settings
# $onelevelsettingsinheritance = $true

# $childsettings = $null
# #get settings for children
# if ($null -ne $group.$settingskey) {
# $childsettings = $group.$settingskey
# } else {
# if (!$onelevelsettingsinheritance) {
# $childsettings = $settings
# }
# }
    
# <#
# if ($null -ne $settings) {
# inherit-globalsettings $group $settings
# }
# #>

# $keys = get-propertynames $group
# foreach($projk in $keys) {
# #do not process special global settings
# if ($projk -in $specialkeys) {
# continue
# }
# $subgroup = $group.$projk
# if (!($subgroup -is [System.Collections.IDictionary])) {
# continue
# }
# $path = "$fullpath.$projk"


# inherit-properties -from $group -to $subgroup -valuesonly
# # this should be run only once per group, right?
# # why is this needed here?
# if ($null -ne $settings) {
# inherit-globalsettings $group $settings
# }
# $r = import-genericgroup $subgroup $path -settings $childsettings -settingskey $settingskey -specialkeys $specialkeys
# }
        


# if ($null -ne $settings) {
# inherit-globalsettings $group $settings
        
# <# $keys = get-propertynames $group
# foreach($projk in $keys) {
# $subgroup = $group.$projk
# if ($projk -in $specialkeys) {
# continue
# }
# if (!($subgroup -is [System.Collections.IDictionary])) {
# continue
# }
# inherit-properties -from $group -to $subgroup -valuesonly
# }
# #>
# }
    
    

# return $map
# # }
# }

function add-metaproperties
{
    param($group, $fullpath, $specialkeys = @("settings", "global_prof1iles"))

    if ($group -isnot [System.Collections.IDictionary]) {
        return
    }
    write-verbose "adding meta properties to '$fullpath'"        
    $splits = $fullpath.split('.')
    $level = $splits.length - 1
    
    $null = $group | add-property -name _level -value $level
    $null = $group | add-property -name _fullpath -value $fullpath.trim('.')
    if ($splits.length -gt 0) {
        $null = $group | add-property -name _name -value $splits[$splits.length - 1]
    }
        
    #$keys = @{}
    $keys = get-propertynames $group
        
    foreach($projk in $keys) {
        #do not process special global settings
        if ($projk -in $specialkeys) {
            continue
        }
        if ($group.$projk -is [System.Collections.IDictionary]) {
            $path = "$fullpath.$projk"            
            $null = add-metaproperties $group.$projk $path -specialkeys $specialkeys
        }
    }
  
    return $group
    
}

<#
function import-mapgroup(
    $publishmapgroup, $groupk,
    $settings = $null,
    $stripsettingswrapper = $false
) {
    Write-Verbose "processing map $groupk"
   
    $keys = get-propertynames $publishmapgroup
    
    $null = add-property $publishmapgroup "level" 1
    $null = add-property $publishmapgroup -name fullpath -value "$groupk"
    
    $group = $publishmapgroup
    $result = {}
    foreach($projk in $keys) {
            #do not process special global settings
            if ($projk -in "settings","global_profiles") {
                continue
            }
            $proj = $group.$projk
            $r = import-mapproject $proj $projk $level
            
            $null = add-property $proj "level" 2
            $null = add-property $proj -name fullpath -value "$groupk.$projk"
                       
        }

    return $publishmapgroup
}

#>

<#

#>