Skip to content

Instantly share code, notes, and snippets.

@sitepodmatt
Last active July 2, 2017 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sitepodmatt/87d7c43b9c3a3e07576db3b4e85eb429 to your computer and use it in GitHub Desktop.
Save sitepodmatt/87d7c43b9c3a3e07576db3b4e85eb429 to your computer and use it in GitHub Desktop.
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}")
}
@sitepodmatt
Copy link
Author

sitepodmatt commented Jul 2, 2017

L30-38 Method 1
L40-48 Method 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment