Last active
July 2, 2017 13:42
-
-
Save sitepodmatt/87d7c43b9c3a3e07576db3b4e85eb429 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tenniskata | |
enum class ConditionStatus { Unknown, True, False } | |
abstract class ResourceCondition( | |
val name: String, | |
val status: ConditionStatus = ConditionStatus.Unknown | |
) | |
sealed class SitepodCondition( | |
name: String, | |
status: ConditionStatus | |
) : ResourceCondition(name, status) { | |
class Provisioned(status: ConditionStatus = ConditionStatus.Unknown) | |
: SitepodCondition("provisioned", status) | |
class StableDiskReady(status: ConditionStatus = ConditionStatus.Unknown) | |
: SitepodCondition("stableDisk", status) | |
class Approved(status: ConditionStatus = ConditionStatus.Unknown) | |
: SitepodCondition("approved", status) | |
} | |
interface IntfResource { | |
val name: String | |
val conditions: List<ResourceCondition> | |
} | |
abstract class Resource( | |
override val name: String, | |
override val conditions: List<ResourceCondition> = listOf() | |
) : IntfResource | |
data class SitepodResource( | |
override val name: String, | |
override val conditions: List<SitepodCondition> = listOf() | |
) : Resource(name, conditions) | |
abstract class AltResource<out TCondition : ResourceCondition>( | |
override val name: String, | |
override val conditions: List<TCondition> = listOf() | |
) : IntfResource | |
data class AltSitepodResource( | |
override val name: String, | |
override val conditions: List<SitepodCondition> | |
) : AltResource<SitepodCondition>(name, conditions) | |
fun main(args: Array<String>) { | |
val sitepod1: IntfResource = SitepodResource( | |
"sitepod1", | |
listOf(SitepodCondition.Provisioned(ConditionStatus.False)) | |
) | |
val altSitepod1: IntfResource = AltSitepodResource( | |
"sitepod2", | |
listOf(SitepodCondition.Provisioned(ConditionStatus.False)) | |
) | |
println("${sitepod1.name} is ${sitepod1.conditions[0].status}") | |
println("${altSitepod1.name} is ${altSitepod1.conditions[0].status}") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
L30-38 Method 1
L40-48 Method 2