src/main/scala/fis/cl/model/CodeList.scala
author Tomas Zeman <tzeman@volny.cz>
Tue, 03 Apr 2012 11:47:03 +0200
changeset 31 0b74e7bbe6ff
permissions -rw-r--r--
Code lists refactoring

/*
 * Copyright 2012 Tomas Zeman <tzeman@volny.cz>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package fis.cl.model

import net.liftweb.common._
import net.liftweb.squerylrecord.RecordTypeMode._

/**
 * Code list API.
 */
trait CodeListLike[T] {
  def items: Iterable[T]
  def dflt: Box[T]
  def apply(id: Long): Option[T]
}

case class CodeList(codeList: Symbol) extends CodeListLike[CodeListItem] with
  CodeListCrud {

  lazy val codeListStr = codeList.name

  def apply(id: Long) = CodeListSchema.cli.lookup(id)

  def items = from(table)(
    i => where(i.codeList === codeListStr and i.deleted === false)
    select(i)
    orderBy(i.rank asc)
  )

  def dflt = from(table)(
    i => where(i.codeList === codeListStr and i.dflt === true)
    select(i)
  ).page(0, 1) headOption

}