/*
* 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: