Migration/vSphere/RiverMeadow.VSphereVMTag/RiverMeadow.VSphereVMTag.psm1

class RMVSphereTagCategory {
    [string] $CategoryName
    [string] $Identifier
    $Tags = @()

    RMVSphereTagCategory () {
        $this.CategoryName = $null
        $this.Identifier = $null
    }

    RMVSphereTagCategory ([string] $CategoryName) {
        $this.CategoryName = $CategoryName
        $this.Identifier = $null
    }

    RMVSphereTagCategory ([string] $Name, [string] $Identifier) {
        $this.CategoryName = $Name
        $this.Identifier = $Identifier
        $this.Tags = @()
    }

    [RMVSphereTag] AddTag([string] $TagName, [string] $TagIdentifier) {
        $Tag = [RMVSphereTag]::new($TagName)
        $Tag.SetTagIdentifier($TagIdentifier)
        $this.Tags += $Tag
        return $Tag
    }

    [string] GetCategoryName() {
        return $this.CategoryName
    }
}

class RMVSphereTag {
    [string] $Name
    [string] $Identifier
    [RMVSphereTagCategory] $RMVSphereTagCategory

    RMVSphereTag() {
        $this.Name = $null
        $this.Identifier = $null
        $this.RMVSphereTagCategory = $null
    }

    RMVSphereTag ([string] $Name) {
        $this.Name = $Name
        $this.Identifier = $null
        $this.RMVSphereTagCategory = $null
    }

    RMVSphereTag ([string] $Name, [string] $CategoryName) {
        $this.Name = $Name
        $this.RMVSphereTagCategory = [RMVSphereTagCategory]::new($CategoryName)
        $this.Identifier = $null
    }

    [void] SetTagName([string] $Name) {
        $this.Name = $Name
    }

    [void] SetTagIdentifier([string] $Identifier) {
        $this.Identifier = $Identifier
    }

    [string] GetTagName() {
        return $this.Name
    }

    [string] GetTagIdentifier() {
        return $this.Identifier
    }
}