src/main/scala/fis/base/model/Entity.scala
author Tomas Zeman <tzeman@volny.cz>
Fri, 10 Feb 2012 09:53:05 +0100
changeset 8 828565e7f571
parent 3 ce369fc04c27
child 10 fc7b6a99deb4
permissions -rw-r--r--
ff8d393251d4dae6 Contact model

/*
 * Copyright 2011 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.base.model

import net.liftweb.record.{MetaRecord, Record}
import net.liftweb.record.field._
import net.liftweb.squerylrecord.KeyedRecord
import org.squeryl.annotations.Column

/**
 * Base data/model entity trait, common for all FIS entities.
 */
trait Entity[OwnerType <: Record[OwnerType]] extends KeyedRecord[Long] {
  @Column(name="id")
  val idField = new LongField(this.asInstanceOf[OwnerType])
  val name = new StringField(this.asInstanceOf[OwnerType], "")
  val note = new OptionalTextareaField(this.asInstanceOf[OwnerType], 10240)

  /** Display representation of this entity. */
  def linkName = name.get
}

import net.liftweb.common.Box
import net.liftweb.squerylrecord.RecordTypeMode._
import org.squeryl.Table

/**
 * Base meta entity definitions.
 */
trait MetaEntity[T <: Entity[_]] {

  def getTable: Table[T]

  def findByKey(id: Long): Box[T] = getTable.lookup(id)
}

/**
 * Generic FIS entity holder.
 */
trait EntityHolder[T <: Entity[_]] {
  def entity: T
}

class EntityUnion private() extends Record[EntityUnion] with
  Entity[EntityUnion] {
  def meta = EntityUnion
  //val entityType = new LongField(this)
}

object EntityUnion extends EntityUnion with MetaRecord[EntityUnion] with
  MetaEntity[EntityUnion] {

  def getTable = BaseSchema.entities
}

/**
 * Converter interface mixin.
 */
trait Converter0[T] {
  def cvt: T
}

/**
 * Generic converter interface.
 */
trait Converter1[F,T] {
  def cvt(f: F): T
}

// vim: set ts=2 sw=2 et: