kahuna/app/lib/AnnouncementsConfig.scala (54 lines of code) (raw):

package lib import play.api.ConfigLoader import play.api.libs.json._ import scala.jdk.CollectionConverters._ import scala.util.{Try, Success, Failure} import java.time.{LocalDate, Period} case class Announcement( announceId: String, description: String, endDate: LocalDate, url: String, urlText: String, category: String, lifespan: String ) object Announcement { val announceCategory = Set("announcement", "information", "warning", "error", "success") val announceLifespan = Set("transient", "session", "persistent") implicit val writes: Writes[Announcement] = Json.writes[Announcement] implicit val configLoader: ConfigLoader[Seq[Announcement]] = { ConfigLoader(_.getConfigList).map( _.asScala.toSeq.map(config => { val endDate = if (config.hasPath("endDate")) { val dte = Try(LocalDate.parse(config.getString("endDate"))) dte match { case Success(value) => value case Failure(_) => LocalDate.now().plus(Period.ofYears(1)) } } else { LocalDate.now().plus(Period.ofYears(1)) } val announceUrl = if (config.hasPath("url")) { config.getString("url") } else "" val urlText = if (config.hasPath("urlText")) { config.getString("urlText") } else "" val category = if (announceCategory.contains(config.getString("category"))) { config.getString("category") } else "announcement" // the expected category applicationConf announcements val lifespan = if (announceLifespan.contains(config.getString("lifespan"))) { config.getString("lifespan") } else "persistent" // the expected lifespan for applicationConf announcements Announcement(config.getString("announceId"), config.getString("description"), endDate, announceUrl, urlText, category, lifespan ) })) } }