The WicketStuff Scala project is the best way to put all this.

The project is more Scala-based components driven, like Fodel/SLabel and
SForm, but I think Scala can offer even more advantages like the one you
propose here.

DSL is the way to go IMO for this Scala-Wicket integration


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



On Mon, Aug 1, 2011 at 2:45 AM, Gary Thomas <7za...@gmail.com> wrote:

>
> I've written some Scala utilities as well, but instead of a DSL I'm using
> implicit conversions via traits, which I've found to be a really nice fit
> with Wicket.
>
> An example:
>
> import org.apache.wicket.model.IModel
> import org.apache.wicket.model.**LoadableDetachableModel
> import org.apache.wicket.model.**PropertyModel
>
> trait WicketConversions {
>   // transparent PropertyModel conversion
>    implicit def tuple2model[T](tuple: (AnyRef, String)): PropertyModel[T] =
> {
>        new PropertyModel[T](tuple._1, tuple._2)
>    }
>
>    // transparent function/closure to LoadableDetachableModel conversion
>    implicit def function2model[T](f: => T): IModel[T] = {
>        new LoadableDetachableModel[T] {
>            def load: T = f
>        }
>    }
> }
>
> Usage:
>
> class MyPanel extends Panel("id") with WicketConversions {
>
>    // transparent PropertyModel conversion using article.rating):
>    add(new RatingPanel("rating", article -> "rating") // so pretty
>
>    // transparent LoadableDetachableModel conversion (expects
> IModel[Boolean]):
>    add(new AjaxCheckBox("selected", { dao.get(id).isAdmin }) {
>        def onUpdate(target: AjaxRequestTarget) { ... }
>    })
> }
>
>
> I have more code as well for Spring integration, etc.
> If anyone is interested, I could add mine to this or to a new GitHub
> project.
>
>
> Thanks,
> Gary
>
>
>
> On 7/29/11 5:22 PM, Ben Tilford 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<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<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<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-unsubscribe@wicket.**apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  ------------------------------**------------------------------**
>>> ---------
>>>
>>>> To unsubscribe, e-mail: 
>>>> users-unsubscribe@wicket.**apache.org<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-unsubscribe@wicket.**apache.org<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-unsubscribe@wicket.**apache.org<users-unsubscr...@wicket.apache.org>
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>>
>>
>

Reply via email to