This is an excellent piece of code.

What I had was similar, but in a trait as a method:

def ldm( loadF() => T ): IModel[T] = {
   ...
}

I guess breaking the DSL will make it easier to maintain. :-) And your
approach is much better


*Bruno Borges*
www.brunoborges.com.br
+55 21 76727099



On Fri, Jul 29, 2011 at 9:22 PM, Ben Tilford <b...@tilford.info> wrote:

> For LDM
>
> class Ldm[T](provider:()=> T) extends LoadableDetachable... {
>  def load():T {
>    provider()
>  }
> }
>
> object Ldm {
>  def apply(provider:()=>T) = new Ldm[T](provider)
> }
>
> could be used as
>
> ...
> val id = 1
> val model = Ldm(()=>{dao.get(id)})
>
> or
>
> val id = 1
> def provider = dao.get(id)
> val model = Ldm(provider)
>
>
> On Fri, Jul 29, 2011 at 6:44 AM, Martin Grigorov <mgrigo...@apache.org
> >wrote:
>
> > Bruno,
> >
> > Yet another idea for the dsl:
> >
> > def ldm[R, ID](id: ID = null, f: (ID) => R) = {new
> > LoadableDetachableModel(id) { override def load() : R = { f(id); } } }
> >
> > P.S. Not tested.
> >
> > On Thu, Jul 28, 2011 at 9:07 AM, Bruno Borges <bruno.bor...@gmail.com>
> > wrote:
> > > Just wanted to share my experience playing a little more with Scala and
> > > Wicket> A few minutes ago I got this excelent code:
> > >
> > > I know it is too simple, and it can be accomplished as well in Java
> with
> > > static imports. But still, for my project it's being great (and cool)
> to
> > do
> > > such things.
> > >
> > >     object btnEditar extends Button("btnEditar") {
> > >       override def onSubmit() = {
> > > -        /* show fields */
> > > -        camposForm.setVisibilityAllowed(true)
> > > -        btnSalvar.setVisibilityAllowed(true)
> > > -        cancelar.setVisibilityAllowed(true)
> > > -
> > > -        /* hide them */
> > > -        camposTela.setVisibilityAllowed(false)
> > > -        btnEditar.setVisibilityAllowed(false)
> > > +        show(camposForm, btnSalvar, cancelar)
> > > +        hide(camposTela, btnEditar)
> > >       }
> > >     }
> > >     add(btnEditar)
> > >
> > > Methods show/hide are imported as "import code.DSLWicket._"
> > >
> > >
> > >
> > > *Bruno Borges*
> > > www.brunoborges.com.br
> > > +55 21 76727099
> > >
> > >
> > >
> > > On Wed, Jul 27, 2011 at 4:53 PM, Bruno Borges <bruno.bor...@gmail.com
> > >wrote:
> > >
> > >> Thanks Martin,
> > >>
> > >> There was only a small little problem in your code. The correct syntax
> > is:
> > >>
> > >> def label[T](id: String, model: IModel[T] = null): Label = { val label
> > >> = new Label(id, model); add(label); label }
> > >>
> > >> The suggestions were updated on Gist.
> > >>
> > >> *Bruno Borges*
> > >> www.brunoborges.com.br
> > >> +55 21 76727099
> > >>
> > >>
> > >>
> > >> On Wed, Jul 27, 2011 at 3:55 PM, Martin Grigorov <
> mgrigo...@apache.org
> > >wrote:
> > >>
> > >>> Idea for simplification: use named parameters.
> > >>> For example
> > >>> def label[T](id: String, model: IModel[T]): Label = { val label = new
> > >>> Label(id, model); add(label); label }
> > >>> would become
> > >>> def label[T](id: String, model = _ : IModel[T]): Label = { val label
> =
> > >>> new Label(id, model); add(label); label }
> > >>>
> > >>> this way you'll have just one declaration of label function which
> will
> > >>> handle the current three
> > >>>
> > >>> additionally you may add a pimp:
> > >>> implicit def ser2model[S :< Serializable](ser: S): IModel[S] =
> > >>> Model.of(ser)
> > >>>
> > >>> now even when you pass String as second param to label() it will be
> > >>> converted to IModel
> > >>>
> > >>> On Wed, Jul 27, 2011 at 9:11 PM, Martin Grigorov <
> mgrigo...@apache.org
> > >
> > >>> wrote:
> > >>> > Take a look at scala.swing.* sources.
> > >>> >
> > >>> > On Wed, Jul 27, 2011 at 8:34 PM, Bruno Borges <
> > bruno.bor...@gmail.com>
> > >>> wrote:
> > >>> >> Can some Scala expert help me to make this DSL available as PML
> > (pimp
> > >>> my
> > >>> >> library)?
> > >>> >>
> > >>> >> I've tried to code it that way but things didn't quite worked out
> > the
> > >>> way
> > >>> >> they should.
> > >>> >>
> > >>> >> The reason is that for every Wicket object I create, I must extend
> > the
> > >>> trait
> > >>> >> DSLWicket
> > >>> >>
> > >>> >>
> > >>> >>
> > >>> >> *Bruno Borges*
> > >>> >> www.brunoborges.com.br
> > >>> >> +55 21 76727099
> > >>> >>
> > >>> >>
> > >>> >>
> > >>> >> On Wed, Jul 27, 2011 at 2:30 PM, Bruno Borges <
> > bruno.bor...@gmail.com
> > >>> >wrote:
> > >>> >>
> > >>> >>> Not really.
> > >>> >>>
> > >>> >>> The method onSubmit() of button is void, as well onClick(), so
> > there's
> > >>> no
> > >>> >>> need for the function be passed as () => Unit or anything else.
> > >>> >>>
> > >>> >>> I made a few changes to it and updated on Gist.
> > >>> >>>
> > >>> >>> I've also uploaded a page that uses this DSL at
> > >>> >>> https://gist.github.com/1109919
> > >>> >>>
> > >>> >>> Take a look
> > >>> >>>
> > >>> >>> *Bruno Borges*
> > >>> >>> www.brunoborges.com.br
> > >>> >>> +55 21 76727099
> > >>> >>>
> > >>> >>>
> > >>> >>>
> > >>> >>> On Wed, Jul 27, 2011 at 2:22 PM, Scott Swank <
> > scott.sw...@gmail.com
> > >>> >wrote:
> > >>> >>>
> > >>> >>>> I think you do want Unit, which as I understand it is closest
> > >>> >>>> equivalent to "void" in Scala.
> > >>> >>>>
> > >>> >>>> http://www.scala-lang.org/api/current/scala/Unit.html
> > >>> >>>>
> > >>> >>>> Scott
> > >>> >>>>
> > >>> >>>> On Wed, Jul 27, 2011 at 10:14 AM, Bruno Borges <
> > >>> bruno.bor...@gmail.com>
> > >>> >>>> wrote:
> > >>> >>>> > No, the function must return void, not another function
> (unit).
> > >>> >>>> >
> > >>> >>>> > But there's also the option of () => Nothing. Which one should
> I
> > >>> use for
> > >>> >>>> > this case?
> > >>> >>>> >
> > >>> >>>> > *Bruno Borges*
> > >>> >>>> > www.brunoborges.com.br
> > >>> >>>> > +55 21 76727099
> > >>> >>>> >
> > >>> >>>> >
> > >>> >>>> >
> > >>> >>>> > On Wed, Jul 27, 2011 at 12:54 PM, Martin Grigorov <
> > >>> mgrigo...@apache.org
> > >>> >>>> >wrote:
> > >>> >>>> >
> > >>> >>>> >>  def button(id: String, submit: () => Void): Button = {
> > >>> >>>> >>
> > >>> >>>> >> it should be () => Unit, no ?
> > >>> >>>> >>
> > >>> >>>> >> On Wed, Jul 27, 2011 at 6:51 PM, Martin Grigorov <
> > >>> mgrigo...@apache.org
> > >>> >>>> >
> > >>> >>>> >> wrote:
> > >>> >>>> >> > Adding some usage examples at the bottom will help us
> > evaluate
> > >>> it.
> > >>> >>>> >> >
> > >>> >>>> >> > Why not add type to
> > >>> >>>> >> > def textField(id: String): TextField[_] = { val field = new
> > >>> >>>> >> > TextField(id); add(field); field }
> > >>> >>>> >> > to become
> > >>> >>>> >> > def textField[T](id: String): TextField[T] = { val field =
> > new
> > >>> >>>> >> > TextField[T](id); add(field); field }
> > >>> >>>> >> >
> > >>> >>>> >> > usage: textField[Int](someId)
> > >>> >>>> >> >
> > >>> >>>> >> > with using implicit Manifest for T you can also can
> > >>> automatically set
> > >>> >>>> >> > the type: field.setType(m.erasure)
> > >>> >>>> >> >
> > >>> >>>> >> > On Wed, Jul 27, 2011 at 6:26 PM, Bruno Borges <
> > >>> >>>> bruno.bor...@gmail.com>
> > >>> >>>> >> wrote:
> > >>> >>>> >> >> I've been playing with Wicket and Scala and I thought this
> > >>> could be
> > >>> >>>> >> added to
> > >>> >>>> >> >> the wicket-scala project at WicketStuff.
> > >>> >>>> >> >>
> > >>> >>>> >> >> What do you guys think?
> > >>> >>>> >> >>
> > >>> >>>> >> >> https://gist.github.com/1109603
> > >>> >>>> >> >>
> > >>> >>>> >> >>
> > >>> >>>> >> >> *Bruno Borges*
> > >>> >>>> >> >> www.brunoborges.com.br
> > >>> >>>> >> >> +55 21 76727099
> > >>> >>>> >> >>
> > >>> >>>> >> >
> > >>> >>>> >> >
> > >>> >>>> >> >
> > >>> >>>> >> > --
> > >>> >>>> >> > Martin Grigorov
> > >>> >>>> >> > jWeekend
> > >>> >>>> >> > Training, Consulting, Development
> > >>> >>>> >> > http://jWeekend.com
> > >>> >>>> >> >
> > >>> >>>> >>
> > >>> >>>> >>
> > >>> >>>> >>
> > >>> >>>> >> --
> > >>> >>>> >> Martin Grigorov
> > >>> >>>> >> jWeekend
> > >>> >>>> >> Training, Consulting, Development
> > >>> >>>> >> http://jWeekend.com
> > >>> >>>> >>
> > >>> >>>> >>
> > >>> ---------------------------------------------------------------------
> > >>> >>>> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > >>> >>>> >> For additional commands, e-mail:
> users-h...@wicket.apache.org
> > >>> >>>> >>
> > >>> >>>> >>
> > >>> >>>> >
> > >>> >>>>
> > >>> >>>>
> > ---------------------------------------------------------------------
> > >>> >>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > >>> >>>> For additional commands, e-mail: users-h...@wicket.apache.org
> > >>> >>>>
> > >>> >>>>
> > >>> >>>
> > >>> >>
> > >>> >
> > >>> >
> > >>> >
> > >>> > --
> > >>> > Martin Grigorov
> > >>> > jWeekend
> > >>> > Training, Consulting, Development
> > >>> > http://jWeekend.com
> > >>> >
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Martin Grigorov
> > >>> jWeekend
> > >>> Training, Consulting, Development
> > >>> http://jWeekend.com
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > >>> For additional commands, e-mail: users-h...@wicket.apache.org
> > >>>
> > >>>
> > >>
> > >
> >
> >
> >
> > --
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > For additional commands, e-mail: users-h...@wicket.apache.org
> >
> >
>

Reply via email to