From 15d74838eb592c58bb0a912380f0ec1f537be333 Mon Sep 17 00:00:00 2001 From: Kseniya Tomskikh Date: Wed, 18 Oct 2017 13:51:47 +0700 Subject: TRIAL-54 Study designs as enum --- .../driver/pdsuidomain/entities/Intervention.scala | 15 ++++------ .../xyz/driver/pdsuidomain/entities/Trial.scala | 34 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 11 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain/entities') diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala index f02bedc..5e743b7 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala @@ -5,6 +5,9 @@ import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod._ +import scalaz.syntax.equal._ +import scalaz.Scalaz.stringInstance + sealed trait InterventionType { val id: LongId[InterventionType] val name: String @@ -78,16 +81,8 @@ object InterventionType { ) } - def typeFromString: PartialFunction[String, InterventionType] = { - case "Radiation therapy" => RadiationTherapy - case "Chemotherapy" => Chemotherapy - case "Targeted therapy" => TargetedTherapy - case "Immunotherapy" => Immunotherapy - case "Surgery" => Surgery - case "Hormone therapy" => HormoneTherapy - case "Other" => Other - case "Radiation" => Radiation - case "Surgery/Procedure" => SurgeryProcedure + def typeFromString(txt: String): Option[InterventionType] = { + All.values.find(_.name === txt) } sealed trait DeliveryMethod diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala index ac5feef..e734779 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala @@ -7,9 +7,41 @@ import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuicommon.utils.Utils import xyz.driver.pdsuidomain.entities.Trial.Status -final case class StudyDesign(id: LongId[StudyDesign], name: String) +import scalaz.syntax.equal._ +import scalaz.Scalaz.stringInstance + +sealed trait StudyDesign { + val id: LongId[StudyDesign] + val name: String +} object StudyDesign { + + final case object Randomized extends StudyDesign { + val id: LongId[StudyDesign] = LongId[StudyDesign](1) + val name: String = "Randomized" + } + + final case object NonRandomized extends StudyDesign { + val id: LongId[StudyDesign] = LongId[StudyDesign](2) + val name: String = "Non-randomized" + } + + final case object SingleGroupAssignment extends StudyDesign { + val id: LongId[StudyDesign] = LongId[StudyDesign](3) + val name: String = "Single-group assignment" + } + + val All = Seq[StudyDesign]( + Randomized, + NonRandomized, + SingleGroupAssignment + ) + + def fromString(txt: String): Option[StudyDesign] = { + All.find(_.name === txt) + } + implicit def toPhiString(x: StudyDesign): PhiString = { import x._ phi"StudyDesign(id=$id, category=${Unsafe(name)})" -- cgit v1.2.3