Private/class-OceanstorRemoteLun.ps1

class OceanstorRemoteLun {
    hidden [pscustomobject]$Session
    hidden [pscustomobject]$WebSession
    hidden [object]$Raw

    [string]$Id
    [string]$Name
    [string]${Remote Lun Id}
    [string]${Remote Lun WWN}
    [string]${Remote Device Id}
    [string]${Remote Device Name}
    [string]${Remote Device SN}
    [string]${Health Status}
    [string]${Health Status Code}
    [string]$Capacity
    [string]${Capacity Bytes}
    [string]${Array Type}
    [string]${Array Type Code}
    [string]$Used
    [string]$Vendor
    [string]$Model

    OceanstorRemoteLun([object]$Source, [pscustomobject]$WebSession) {
        $this.Session = $WebSession
        $this.WebSession = $WebSession
        $this.Raw = $Source
        $this.Id = [OceanstorRemoteLun]::GetString($Source, @('ID', 'id'))
        $this.Name = [OceanstorRemoteLun]::GetString($Source, @('NAME', 'name'))
        $this.{Remote Lun Id} = [OceanstorRemoteLun]::GetString($Source, @('LUNID'))
        $this.{Remote Lun WWN} = [OceanstorRemoteLun]::GetString($Source, @('LUNWWN'))
        $this.{Remote Device Id} = [OceanstorRemoteLun]::GetString($Source, @('DEVICEID', 'rmtDeviceId'))
        $this.{Remote Device Name} = [OceanstorRemoteLun]::GetString($Source, @('DEVICENAME'))
        $this.{Remote Device SN} = [OceanstorRemoteLun]::GetString($Source, @('DEVICESN'))
        $this.{Health Status Code} = [OceanstorRemoteLun]::GetString($Source, @('HEALTHSTATUS'))
        $this.{Health Status} = [OceanstorRemoteLun]::ConvertHealthStatus($this.{Health Status Code})
        $this.Capacity = [OceanstorRemoteLun]::GetString($Source, @('CAPACITY', 'capacity'))
        $this.{Capacity Bytes} = [OceanstorRemoteLun]::GetString($Source, @('CAPACITYBYTE'))
        $this.{Array Type Code} = [OceanstorRemoteLun]::GetString($Source, @('ARRAYTYPE'))
        $this.{Array Type} = [OceanstorRemoteLun]::ConvertArrayType($this.{Array Type Code})
        $this.Used = [OceanstorRemoteLun]::GetString($Source, @('USED'))
        $this.Vendor = [OceanstorRemoteLun]::GetString($Source, @('VENDOR'))
        $this.Model = [OceanstorRemoteLun]::GetString($Source, @('MODEL'))
    }

    static [object] GetValue([object]$Source, [string[]]$Names) {
        if ($null -eq $Source) { return $null }
        foreach ($name in $Names) {
            $property = $Source.PSObject.Properties[$name]
            if ($null -ne $property) { return $property.Value }
        }
        return $null
    }

    static [string] GetString([object]$Source, [string[]]$Names) {
        $value = [OceanstorRemoteLun]::GetValue($Source, $Names)
        if ($null -eq $value) { return $null }
        return [string]$value
    }

    static [string] ConvertHealthStatus([string]$Code) {
        switch ($Code) {
            '1' { return 'Normal' }
            '2' { return 'Faulty' }
            '15' { return 'Write Protected' }
            default { return $Code }
        }
        return $Code
    }

    static [string] ConvertArrayType([string]$Code) {
        switch ($Code) {
            '1' { return 'Replication Device' }
            '2' { return 'Heterogeneous Device' }
            '3' { return 'Unknown Device' }
            '4' { return 'Cloud Replication Device' }
            default { return $Code }
        }
        return $Code
    }
}