Private/class_CdfConfig.ps1


class CdfBaseInputPlatformConfig {
    [hashtable]$Env
    [hashtable]$Config
    [hashtable]$Features
    [hashtable]$NetworkConfig
    [hashtable]$AccessControl

    CdfBaseOutputConfig() {
        $this.Init(@{})
    }
}

class CdfTemplateConfig {
    [bool]$IsDeployed
    [hashtable]$Env
    [hashtable]$Tags
    [hashtable]$Config
    [hashtable]$Features
    [hashtable]$ResourceNames
    [hashtable]$NetworkConfig
    [hashtable]$AccessControl

    # Default constructor
    CdfTemplateConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfTemplateConfig([hashtable]$Properties) { $this.Init($Properties) }
    # Shared initializer method
    [void] Init([hashtable]$Properties) {
        Write-Host "Initializing CdfTemplateConfig"
        foreach ($Property in $Properties.Keys) {
            Write-Host "Setting $($Properties.$Property)"
            $this.$Property = $Properties.$Property
        }
    }

}

class CdfServiceConfig : CdfTemplateConfig {

    # Default constructor
    CdfServiceConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfServiceConfig([hashtable]$Properties) { $this.Init($Properties) }

    [string] ToString() {
        return "$($this.Config.serviceGroup)|$($this.Config.serviceName) ($($this.Config.templateName)/$($this.Config.templateVersion)/$($this.Env.definitionId))"
    }
}
class CdfDomainConfig : CdfTemplateConfig {

    # Default constructor
    CdfDomainConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfDomainConfig([hashtable]$Properties) { $this.Init($Properties) }

    [string] ToString() {
        return "$($this.Config.domainName) ($($this.Config.templateName)/$($this.Config.templateVersion)/$($this.Env.definitionId))"
    }
}

class CdfApplicationConfig : CdfTemplateConfig {

    # Default constructor
    CdfApplicationConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfApplicationConfig([hashtable]$Properties) { $this.Init($Properties) }

    [string] ToString() {
        return "$($this.Config.templateName)$($this.Config.applicationInstanceId)$($this.Env.nameId) ($($this.Config.templateName)/$($this.Config.templateVersion)/$($this.Env.definitionId))"
    }
}

class CdfPlatformConfig : CdfTemplateConfig {

    # Default constructor
    CdfPlatformConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfPlatformConfig([hashtable]$Properties) { $this.Init($Properties) }

    [string] ToString() {
        return "$($this.Config.platformId)$($this.Config.platformInstanceId)$($this.Env.nameId) ($($this.Config.templateName)/$($this.Config.templateVersion)/$($this.Env.definitionId))"
    }
}

class CdfConfig {
    [CdfPlatformConfig]$Platform
    [CdfApplicationConfig]$Application
    [CdfDomainConfig]$Domain
    [CdfServiceConfig]$Service

    # Default constructor
    CdfConfig() { $this.Init(@{}) }
    # Convenience constructor from hashtable
    CdfConfig([hashtable]$Properties) { $this.Init($Properties) }
    # Shared initializer method
    [void] Init([hashtable]$Properties) {
        Write-Host "Initializing CdfConfig"
        $this.Platform = [CdfPlatformConfig]::new($Properties.Platform)
        $this.Application = [CdfApplicationConfig]::new($Properties.Application)
        $this.Domain = [CdfDomainConfig]::new($Properties.Domain)
        $this.Service = [CdfServiceConfig]::new($Properties.Service)
    }
}