example/src/sqwl/cms/Content.scala
author Tomas Zeman <tzeman@volny.cz>
Tue, 15 Jan 2019 12:25:19 +0100
changeset 27 8529ce302f7c
parent 21 1fa630ed9b8a
child 33 fa0f19a74283
permissions -rw-r--r--
Article.rank: sort articles by category/tag w.r.t. rank


package sqwl.cms

import java.nio.file.{Path, Paths}

import enumeratum.EnumEntry.Hyphencase
import enumeratum._

import scala.collection.immutable

sealed abstract class Category(val name: String) extends EnumEntry with
  iCategory with Hyphencase {
  override def pathSegment: String = entryName
}

object Category extends Enum[Category] {
  val values: immutable.IndexedSeq[Category] = findValues
  case object Cat1 extends Category("Category 1")
  case object Cat2 extends Category("Category 2")
  case object Cat3 extends Category("Category 3")
  case object Cat4 extends Category("Category 4")
  case object Cat5 extends Category("Category 5")
  case object Cat6 extends Category("Category 6")
}

sealed abstract class Tag(val name: String) extends EnumEntry with iTag
  with Hyphencase {
  override def pathSegment: String = entryName
}

object Tag extends Enum[Tag] {
  val values: immutable.IndexedSeq[Tag] = findValues
  case object Tag1 extends Tag("Tag 1")
  case object Tag2 extends Tag("Tag 2")
  case object Tag3 extends Tag("Tag 3")
  case object Tag4 extends Tag("Tag 4")
  case object Tag5 extends Tag("Tag 5")
  case object Tag6 extends Tag("Tag 6")
}

object Content extends iContent {
  InitializeContent()

  def appTitle: String = "Content management system example"

  def appTitleShort: String = "CMS"

  def icon: (String, Path) =
    ("icon.png", Paths.get("example/content/public/images/icon.png"))

  def publicAssets: Path = Paths.get("example/content/public")

  def styleSheet: (String, Path) =
    ("site.css", Paths.get("example/content/public/css/site.css"))

  def articlesByTag(t: iTag): Seq[iArticle] =
    Articles.values filter(_.tags contains t) sortBy(_.rank)

  def articlesByCategory(c: iCategory): Seq[iArticle] =
    Articles.values filter(_.category contains c) sortBy(_.rank)

  def tags: Seq[iTag] = Tag.values

  def categories: Seq[iCategory] = Category.values

  def articleByPath(path: String): Option[iArticle] =
    Articles.values.find(_.pathSegment == path)

  def categoryByPath(path: String): Option[iCategory] =
    Category.withNameOption(path)

  def tagByPath(path: String): Option[iTag] = Tag.withNameOption(path)
}