trait Stamped[A <: LongKeyedMapper[A]] extends SkipLogging with KeyedMetaMapper[Long, A] {
self: A with MetaMapper[A] with KeyedMapper[Long, A] => override def afterCreate = (crudLog(_: A, "create")) :: super.afterCreate override def afterUpdate = (crudLog(_: A, "update")) :: super.afterUpdate override def afterDelete = (crudLog(_: A, "delete")) :: super.afterDelete private def crudLog(obj: A, action: String): Unit = { if (!self.skipLogging) { val log = new ActionLog log.action(action).klass(obj.getClass.getName).record (obj.primaryKey).save // Stamped.scala:54: error: value primaryKey is not a member of A } } } On 19 Jan., 21:22, David Pollak <feeder.of.the.be...@gmail.com> wrote: > You don't need to use structural typing. > > Any KeyedMapper has a primaryKey method that returns a Mapped field of the > type of the key. To get the primary key field of a given KeyedMapper > instance, just call primaryKey. > > > > On Tue, Jan 19, 2010 at 11:55 AM, Ross Mellgren <dri...@gmail.com> wrote: > > How about structural typing? > > > trait Stamped[A <: LongKeyedMapper[A] with { val id: MappedLongIndex[A] }] > > ... > > > I haven't tried it, but maybe it will work. > > > -Ross > > > On Jan 19, 2010, at 2:47 PM, Franz Bettag wrote: > > > > On 19 Jan., 19:32, David Pollak <feeder.of.the.be...@gmail.com> wrote: > > >>> i am trying to extend my logging trait. The Problem is, i can't say > > >>> something like A <: LongKeyedMapper[A] in my trait since ProtoUser > > >>> doesn't use IdPK but uses it's own declarations (which look the same > > >>> to me). > > > >> Why do you need ProtoUser extended with IdPK? Why can't your trait work > > >> with LongKeyedMapper? > > > > The code relies on having a .id method on the passed object. The Three > > > Traits are below. It works fine with anything having IdPK. At the > > > moment i have this code copied into my User singleton which is exactly > > > what i want to avoid. > > > > I don't know how i would dynamify the use of the .id method. In > > > ActionLog and the Stamped trait. > > > > trait Stamped[A <: LongKeyedMapper[A] with IdPK] > > > extends SkipLogging with KeyedMetaMapper[Long, A] { > > > > self: A with MetaMapper[A] with KeyedMapper[Long, A] => > > > > override def afterCreate = (crudLog(_: A, "create")) :: > > > super.afterCreate > > > > override def afterUpdate = (crudLog(_: A, "update")) :: > > > super.afterUpdate > > > > override def afterDelete = (crudLog(_: A, "delete")) :: > > > super.afterDelete > > > > private def crudLog(obj: A, action: String): Unit = { > > > if (!self.skipLogging) { > > > val log = new ActionLog > > > log.action(action).klass(obj.getClass.getName).record(obj.id).save > > > } > > > } > > > > } > > > > trait SkipLogging { > > > > var skipLogging = false > > > } > > > > trait ActionLogs[A <: Mapper[A] with IdPK] { > > > > this: A => > > > > def logs: List[ActionLog] = ActionLog.findAll( > > > By(ActionLog.klass, this.getClass.getName), > > > By(ActionLog.record, this.id) > > > ) > > > > } > > > > -- > > > You received this message because you are subscribed to the Google Groups > > "Lift" group. > > > To post to this group, send email to lift...@googlegroups.com. > > > To unsubscribe from this group, send email to > > liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com> > > . > > > For more options, visit this group at > >http://groups.google.com/group/liftweb?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Lift" group. > > To post to this group, send email to lift...@googlegroups.com. > > To unsubscribe from this group, send email to > > liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/liftweb?hl=en. > > -- > Lift, the simply functional web frameworkhttp://liftweb.net > Beginning Scalahttp://www.apress.com/book/view/1430219890 > Follow me:http://twitter.com/dpp > Surf the harmonics
-- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.