[Lift] Re: Mapper subclasses

2009-09-08 Thread rstradling

I am trying to do what is mentioned below but am struggling with the
object side of things for my particular case.  This all relates back
to trying to auto-generate some classes that I posted back a while ago
on.  I would love to generate 1 file that has the trait and the object
in it that I then inherit from in my sub-class and object sub-class in
another file.

Autogenerated.scala
trait FC[MapperType <: FC[MapperType]] extends Mapper[MapperType] {
   self: MapperType =>
   object today extends MappedLong(this)
}

trait FCObj extends FC[MapperType] with LongKeyedMetaMapper[FC
[MapperType]] {
  override def fieldOrder = List(today)
}

In UserClass.scala
class FC_Wrapper extends LongKeyedMapper[FC_Wrapper] with IdPK with FC
[Wrapper] {
   def getSingleton = FCObj_Wrapper
   // define methods
}

object FCObj_Wrapper extends FCObj {
  // define auxiliary functionality

}

I know that the FCObj and FCObj_Wrapper is not correct syntax wise.
But the basic idea is that I want to have my autogeneration generate
the boilerplate code for me in a separate file.  This boilerplate
would ideally include the class and object related stuff.  Then in a
file that won't be stomped upon the next time I run the generator I
inherit from these objects.  I hope this makes sense.

I admit to not totally understanding the templated/generic programming
that is happening.




On Sep 3, 1:33 pm, glenn  wrote:
> Isn't this really a matter of type casting, and asInstanceOf is just
> Scala's
> way of doing this. It's always best if you don't have to downcast your
> objects, but sometimes its unavoidable.
>
> Glenn...
>
> On Sep 3, 10:29 am, glenn  wrote:
>
> > I'm not sure of what the exact problem is. I created an Address trait
> > that
> > I couple with a number of mapper classes.
>
> > trait Address[OwnerType <: KeyedMapper[Long, OwnerType]]{
>
> >   def owner = this.asInstanceOf[OwnerType]
>
> > 
>
> > Where exactly does this construct break down?
>
> > Glenn...
>
> > On Sep 3, 7:55 am, Giuseppe Fogliazza  wrote:
>
> > > jon suggested to me the way to avoid both explicit type parameter and
> > > asinstance of:
> > > trait Timestamp[MapperType <: TimeStamp[MapperType]] extends Mapper
> > > [MapperType] {
> > >self:MapperType =>
> > > object xdatetime extends MappedDateTime(this)
>
> > >   // all sorts of utility functions for dealing with timestamps
>
> > > }
>
> > > Thanks jon I have improved model in my application with this approach.
>
> > > Giuseppe
>
> > > On 3 Set, 16:16, Giuseppe Fogliazza  wrote:
>
> > > > As an alternative to asInstanceOf you could use explicit type
> > > > parameter in MappedField creation:
> > > >self:MapperType =>
> > > > object xdatetime extends MappedDateTime[MapperType](this)
>
> > > > On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
> > > > > Unfortunately you cannot escape from asInstanceOf . Forcing
> > > > >self:MapperType the type of "this" will be TimeStamp with MapperType
> > > > > violating the constraint for the type of the first parameter of
> > > > > MappedDateTime :T <: Mapper[T].
>
> > > > > Regards
> > > > > Giuseppe
>
> > > > > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > > > > So I guess you can't escape the asInstanceOf. Can you successfully 
> > > > > > give the trait aself-type of this: MapperType =>, or declare it to 
> > > > > > extend Mapper[MapperType], without running into problems elsewhere?
>
> > > > > > -
>
> > > > > > harryh wrote:
>
> > > > > > I've been handling this with traits, for example I have something 
> > > > > > like
> > > > > > so:
>
> > > > > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > > > > >   object xdatetime extends 
> > > > > > MappedDateTime[MapperType](this.asInstanceOf
> > > > > > [MapperType])
>
> > > > > >   // all sorts of utility functions for dealing with timestamps
>
> > > > > > }
>
> > > > > > Then I can do
>
> > > > > > class Foo extends LongKeyedMapper[Foo] with IdPK with 
> > > > > > Timestamp[Foo] {
> > > > > >   // additional fields that are Foo specific
>
> > > > > > }
>
> > > > > > I have quite a few traits similar to Timestamp at this point
> > > > > > corresponding to various fields that appear in lots of different
> > > > > > tables in my application.
>
> > > > > > -harryh

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread glenn

Isn't this really a matter of type casting, and asInstanceOf is just
Scala's
way of doing this. It's always best if you don't have to downcast your
objects, but sometimes its unavoidable.

Glenn...

On Sep 3, 10:29 am, glenn  wrote:
> I'm not sure of what the exact problem is. I created an Address trait
> that
> I couple with a number of mapper classes.
>
> trait Address[OwnerType <: KeyedMapper[Long, OwnerType]]{
>
>   def owner = this.asInstanceOf[OwnerType]
>
> 
>
> Where exactly does this construct break down?
>
> Glenn...
>
> On Sep 3, 7:55 am, Giuseppe Fogliazza  wrote:
>
> > jon suggested to me the way to avoid both explicit type parameter and
> > asinstance of:
> > trait Timestamp[MapperType <: TimeStamp[MapperType]] extends Mapper
> > [MapperType] {
> > self:MapperType =>
> > object xdatetime extends MappedDateTime(this)
>
> >   // all sorts of utility functions for dealing with timestamps
>
> > }
>
> > Thanks jon I have improved model in my application with this approach.
>
> > Giuseppe
>
> > On 3 Set, 16:16, Giuseppe Fogliazza  wrote:
>
> > > As an alternative to asInstanceOf you could use explicit type
> > > parameter in MappedField creation:
> > > self:MapperType =>
> > > object xdatetime extends MappedDateTime[MapperType](this)
>
> > > On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
> > > > Unfortunately you cannot escape from asInstanceOf . Forcing
> > > > self:MapperType the type of "this" will be TimeStamp with MapperType
> > > > violating the constraint for the type of the first parameter of
> > > > MappedDateTime :T <: Mapper[T].
>
> > > > Regards
> > > > Giuseppe
>
> > > > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > > > So I guess you can't escape the asInstanceOf. Can you successfully 
> > > > > give the trait a self-type of this: MapperType =>, or declare it to 
> > > > > extend Mapper[MapperType], without running into problems elsewhere?
>
> > > > > -
>
> > > > > harryh wrote:
>
> > > > > I've been handling this with traits, for example I have something like
> > > > > so:
>
> > > > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > > > >   object xdatetime extends 
> > > > > MappedDateTime[MapperType](this.asInstanceOf
> > > > > [MapperType])
>
> > > > >   // all sorts of utility functions for dealing with timestamps
>
> > > > > }
>
> > > > > Then I can do
>
> > > > > class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
> > > > >   // additional fields that are Foo specific
>
> > > > > }
>
> > > > > I have quite a few traits similar to Timestamp at this point
> > > > > corresponding to various fields that appear in lots of different
> > > > > tables in my application.
>
> > > > > -harryh
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread glenn

I'm not sure of what the exact problem is. I created an Address trait
that
I couple with a number of mapper classes.

trait Address[OwnerType <: KeyedMapper[Long, OwnerType]]{

  def owner = this.asInstanceOf[OwnerType]



Where exactly does this construct break down?

Glenn...

On Sep 3, 7:55 am, Giuseppe Fogliazza  wrote:
> jon suggested to me the way to avoid both explicit type parameter and
> asinstance of:
> trait Timestamp[MapperType <: TimeStamp[MapperType]] extends Mapper
> [MapperType] {
> self:MapperType =>
> object xdatetime extends MappedDateTime(this)
>
>   // all sorts of utility functions for dealing with timestamps
>
> }
>
> Thanks jon I have improved model in my application with this approach.
>
> Giuseppe
>
> On 3 Set, 16:16, Giuseppe Fogliazza  wrote:
>
> > As an alternative to asInstanceOf you could use explicit type
> > parameter in MappedField creation:
> > self:MapperType =>
> > object xdatetime extends MappedDateTime[MapperType](this)
>
> > On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
> > > Unfortunately you cannot escape from asInstanceOf . Forcing
> > > self:MapperType the type of "this" will be TimeStamp with MapperType
> > > violating the constraint for the type of the first parameter of
> > > MappedDateTime :T <: Mapper[T].
>
> > > Regards
> > > Giuseppe
>
> > > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > > So I guess you can't escape the asInstanceOf. Can you successfully give 
> > > > the trait a self-type of this: MapperType =>, or declare it to extend 
> > > > Mapper[MapperType], without running into problems elsewhere?
>
> > > > -
>
> > > > harryh wrote:
>
> > > > I've been handling this with traits, for example I have something like
> > > > so:
>
> > > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > > >   object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
> > > > [MapperType])
>
> > > >   // all sorts of utility functions for dealing with timestamps
>
> > > > }
>
> > > > Then I can do
>
> > > > class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
> > > >   // additional fields that are Foo specific
>
> > > > }
>
> > > > I have quite a few traits similar to Timestamp at this point
> > > > corresponding to various fields that appear in lots of different
> > > > tables in my application.
>
> > > > -harryh
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread Giuseppe Fogliazza

jon suggested to me the way to avoid both explicit type parameter and
asinstance of:
trait Timestamp[MapperType <: TimeStamp[MapperType]] extends Mapper
[MapperType] {
self:MapperType =>
object xdatetime extends MappedDateTime(this)

  // all sorts of utility functions for dealing with timestamps

}
Thanks jon I have improved model in my application with this approach.

Giuseppe

On 3 Set, 16:16, Giuseppe Fogliazza  wrote:
> As an alternative to asInstanceOf you could use explicit type
> parameter in MappedField creation:
> self:MapperType =>
> object xdatetime extends MappedDateTime[MapperType](this)
>
> On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
> > Unfortunately you cannot escape from asInstanceOf . Forcing
> > self:MapperType the type of "this" will be TimeStamp with MapperType
> > violating the constraint for the type of the first parameter of
> > MappedDateTime :T <: Mapper[T].
>
> > Regards
> > Giuseppe
>
> > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > So I guess you can't escape the asInstanceOf. Can you successfully give 
> > > the trait a self-type of this: MapperType =>, or declare it to extend 
> > > Mapper[MapperType], without running into problems elsewhere?
>
> > > -
>
> > > harryh wrote:
>
> > > I've been handling this with traits, for example I have something like
> > > so:
>
> > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > >   object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
> > > [MapperType])
>
> > >   // all sorts of utility functions for dealing with timestamps
>
> > > }
>
> > > Then I can do
>
> > > class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
> > >   // additional fields that are Foo specific
>
> > > }
>
> > > I have quite a few traits similar to Timestamp at this point
> > > corresponding to various fields that appear in lots of different
> > > tables in my application.
>
> > > -harryh

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread jon

You could also do this:

trait HasCreated [T <: HasCreated[T]] extends KeyedMapper[Long, T] {
  self: T =>
  object created_at extends MappedDateTime(this)
}

//mix into your meta object:
trait HasCreatedMetaMapper[T <: HasCreated[T]] {
self: T with LongKeyedMetaMapper[T] =>
import java.util.Date
def findByCreated(startDate:Date, endDate:Date) = findAll(By_>
(created_at, startDate), By_<(created_at, endDate))
}



On Sep 3, 10:16 am, Giuseppe Fogliazza  wrote:
> As an alternative to asInstanceOf you could use explicit type
> parameter in MappedField creation:
> self:MapperType =>
> object xdatetime extends MappedDateTime[MapperType](this)
>
> On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
>
>
> > Unfortunately you cannot escape from asInstanceOf . Forcing
> > self:MapperType the type of "this" will be TimeStamp with MapperType
> > violating the constraint for the type of the first parameter of
> > MappedDateTime :T <: Mapper[T].
>
> > Regards
> > Giuseppe
>
> > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > So I guess you can't escape the asInstanceOf. Can you successfully give 
> > > the trait a self-type of this: MapperType =>, or declare it to extend 
> > > Mapper[MapperType], without running into problems elsewhere?
>
> > > -
>
> > > harryh wrote:
>
> > > I've been handling this with traits, for example I have something like
> > > so:
>
> > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > >   object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
> > > [MapperType])
>
> > >   // all sorts of utility functions for dealing with timestamps
>
> > > }
>
> > > Then I can do
>
> > > class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
> > >   // additional fields that are Foo specific
>
> > > }
>
> > > I have quite a few traits similar to Timestamp at this point
> > > corresponding to various fields that appear in lots of different
> > > tables in my application.
>
> > > -harryh
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread Giuseppe Fogliazza

As an alternative to asInstanceOf you could use explicit type
parameter in MappedField creation:
self:MapperType =>
object xdatetime extends MappedDateTime[MapperType](this)


On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
> Unfortunately you cannot escape from asInstanceOf . Forcing
> self:MapperType the type of "this" will be TimeStamp with MapperType
> violating the constraint for the type of the first parameter of
> MappedDateTime :T <: Mapper[T].
>
> Regards
> Giuseppe
>
> On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > So I guess you can't escape the asInstanceOf. Can you successfully give the 
> > trait a self-type of this: MapperType =>, or declare it to extend 
> > Mapper[MapperType], without running into problems elsewhere?
>
> > -
>
> > harryh wrote:
>
> > I've been handling this with traits, for example I have something like
> > so:
>
> > trait Timestamp[MapperType <: Mapper[MapperType]] {
> >   object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
> > [MapperType])
>
> >   // all sorts of utility functions for dealing with timestamps
>
> > }
>
> > Then I can do
>
> > class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
> >   // additional fields that are Foo specific
>
> > }
>
> > I have quite a few traits similar to Timestamp at this point
> > corresponding to various fields that appear in lots of different
> > tables in my application.
>
> > -harryh

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-03 Thread Giuseppe Fogliazza

Unfortunately you cannot escape from asInstanceOf . Forcing
self:MapperType the type of "this" will be TimeStamp with MapperType
violating the constraint for the type of the first parameter of
MappedDateTime :T <: Mapper[T].

Regards
Giuseppe

On 3 Set, 07:08, Naftoli Gugenheim  wrote:
> So I guess you can't escape the asInstanceOf. Can you successfully give the 
> trait a self-type of this: MapperType =>, or declare it to extend 
> Mapper[MapperType], without running into problems elsewhere?
>
> -
>
> harryh wrote:
>
> I've been handling this with traits, for example I have something like
> so:
>
> trait Timestamp[MapperType <: Mapper[MapperType]] {
>   object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
> [MapperType])
>
>   // all sorts of utility functions for dealing with timestamps
>
> }
>
> Then I can do
>
> class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
>   // additional fields that are Foo specific
>
> }
>
> I have quite a few traits similar to Timestamp at this point
> corresponding to various fields that appear in lots of different
> tables in my application.
>
> -harryh

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-02 Thread Naftoli Gugenheim

So I guess you can't escape the asInstanceOf. Can you successfully give the 
trait a self-type of this: MapperType =>, or declare it to extend 
Mapper[MapperType], without running into problems elsewhere?



-
harryh wrote:


I've been handling this with traits, for example I have something like
so:

trait Timestamp[MapperType <: Mapper[MapperType]] {
  object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
[MapperType])

  // all sorts of utility functions for dealing with timestamps
}

Then I can do

class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
  // additional fields that are Foo specific
}

I have quite a few traits similar to Timestamp at this point
corresponding to various fields that appear in lots of different
tables in my application.

-harryh


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-02 Thread harryh

I've been handling this with traits, for example I have something like
so:

trait Timestamp[MapperType <: Mapper[MapperType]] {
  object xdatetime extends MappedDateTime[MapperType](this.asInstanceOf
[MapperType])

  // all sorts of utility functions for dealing with timestamps
}

Then I can do

class Foo extends LongKeyedMapper[Foo] with IdPK with Timestamp[Foo] {
  // additional fields that are Foo specific
}

I have quite a few traits similar to Timestamp at this point
corresponding to various fields that appear in lots of different
tables in my application.

-harryh
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---