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 > > > > >