Great!
Thanks, Sven!

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Tue, Mar 15, 2016 at 11:52 AM, Sven Meier <[email protected]> wrote:

> Hi again,
>
> I added a factory for a read-only variant too.
>
> To recap all options:
>
>     IModel<String> personNameModel =
>
> // getter lambda
>           () -> person.getName();
> // getter instance function reference
>           person::getName;
> // getter and setter lambda
>           LambdaModel.of(() -> person.getName(), (name) ->
> person.setName(name));
> // getter and setter instance function references
>           LambdaModel.of(person::getName, person::setName);
> // target model with getter class function reference
>           LambdaModel.of(personModel, Person::getName);
> // target model with getter and setter class function references
>           LambdaModel.of(personModel, Person::getName, Person::setName);
>
> Regards
> Sven
>
>
>
> On 15.03.2016 11:03, Sven Meier wrote:
>
>> Hi Sebastien,
>>
>> for a read-only model you can just use this shortcut:
>>
>>     IModel<String> personNameModel = person::getName;
>>
>> Or do you mean a read-only for when 'person' is actually a model?
>>
>> Regards
>> Sven
>>
>>
>> On 15.03.2016 10:57, Sebastien wrote:
>>
>>> Could a read-only model just be like that?
>>> IModel<String> personNameModel = LambdaModel.of(person::getName);
>>>
>>> On Tue, Mar 15, 2016 at 10:43 AM, Sven Meier <[email protected]> wrote:
>>>
>>> Hi,
>>>>
>>>> I found a nice additional usage for LambdaModel. With static factory
>>>> methods you can use it in two ways now:
>>>>
>>>>          IModel<String> personNameModel =
>>>> LambdaModel.of(person::getName,
>>>> person::setName);
>>>>
>>>> ... or if you have a model ...
>>>>
>>>>          IModel<String> personNameModel = LambdaModel.of(personModel,
>>>> Person::getName, Person::setName);
>>>>
>>>> Let me know if you'd rather have a separate class for this.
>>>>
>>>> Have fun
>>>> Sven
>>>>
>>>>
>>>>
>>>> On 14.03.2016 22:53, Martin Grigorov wrote:
>>>>
>>>> I've checked all other IModel implementations but I didn't see more
>>>>> candidates for lambd-ification.
>>>>>
>>>>> Martin Grigorov
>>>>> Wicket Training and Consulting
>>>>> https://twitter.com/mtgrigorov
>>>>>
>>>>> On Mon, Mar 14, 2016 at 4:15 PM, Martin Grigorov <[email protected]
>>>>> >
>>>>> wrote:
>>>>>
>>>>> I've merged that branch.
>>>>>
>>>>>> Now the Lambdas class with the factory methods for components and
>>>>>> behaviors is also in master.
>>>>>> Any ideas for improvements are welcome!
>>>>>>
>>>>>> Martin Grigorov
>>>>>> Wicket Training and Consulting
>>>>>> https://twitter.com/mtgrigorov
>>>>>>
>>>>>> On Mon, Mar 14, 2016 at 4:01 PM, Sven Meier <[email protected]> wrote:
>>>>>>
>>>>>> I didn't want to put every idea directly in master.
>>>>>>
>>>>>>> Thanks to this procedure we've progressed a lot with lambdas :).
>>>>>>>
>>>>>>> Thanks
>>>>>>> Sven
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 14.03.2016 15:49, Martin Grigorov wrote:
>>>>>>>
>>>>>>> I didn't want to put every idea directly in master.
>>>>>>>
>>>>>>>> First wanted to here opinions.
>>>>>>>> But I see how this makes it hard to follow.
>>>>>>>> I'll merge this branch to master and then we can just rework
>>>>>>>> whatever
>>>>>>>> we
>>>>>>>> find not optimal directly there.
>>>>>>>>
>>>>>>>> Martin Grigorov
>>>>>>>> Wicket Training and Consulting
>>>>>>>> https://twitter.com/mtgrigorov
>>>>>>>>
>>>>>>>> On Mon, Mar 14, 2016 at 3:16 PM, Sven Meier <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hm, I starting to lose track of what is on which branch :/.
>>>>>>>>
>>>>>>>> Sven
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 14.03.2016 14:09, Martin Grigorov wrote:
>>>>>>>>>
>>>>>>>>> Hi Sven
>>>>>>>>>
>>>>>>>>> On Mon, Mar 14, 2016 at 1:23 PM, Sven Meier <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> Hi Martin,
>>>>>>>>>>
>>>>>>>>>> speaking of someting to nuke - insteaf of:
>>>>>>>>>>
>>>>>>>>>>> IModel<String> personNameModel = new
>>>>>>>>>>> SupplierCachingModel<>(person::getName);
>>>>>>>>>>>
>>>>>>>>>>> Why not simply?
>>>>>>>>>>>
>>>>>>>>>>>             IModel<String> personNameModel =
>>>>>>>>>>> Model.loadableDetachable(person::getName);
>>>>>>>>>>>
>>>>>>>>>>> I didn't like the name "Supplier*Caching*Model" anyway.
>>>>>>>>>>>
>>>>>>>>>>> It is there already
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> https://github.com/apache/wicket/blob/static-factories-for-lambdas/wicket-core/src/main/java/org/apache/wicket/model/Model.java#L208
>>>>>>>>>>
>>>>>>>>>> But I agree there is no need of SupplierCachingModel as a separate
>>>>>>>>>> class.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Regards
>>>>>>>>>>
>>>>>>>>>> Sven
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 14.03.2016 12:36, Martin Grigorov wrote:
>>>>>>>>>>>
>>>>>>>>>>> Yes!
>>>>>>>>>>>
>>>>>>>>>>> -               IModel<String> personNameModel = new
>>>>>>>>>>>
>>>>>>>>>>>> SupplierModel<>(person::getName);
>>>>>>>>>>>> +               IModel<String> personNameModel =
>>>>>>>>>>>> person::getName;
>>>>>>>>>>>>
>>>>>>>>>>>> Definitely makes sense to make it shorter!
>>>>>>>>>>>>
>>>>>>>>>>>> I'll nuke it now!
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Martin Grigorov
>>>>>>>>>>>> Wicket Training and Consulting
>>>>>>>>>>>> https://twitter.com/mtgrigorov
>>>>>>>>>>>>
>>>>>>>>>>>> On Mon, Mar 14, 2016 at 10:55 AM, Sven Meier <[email protected]>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> IModel being a functional interface now, what's the use of
>>>>>>>>>>>>
>>>>>>>>>>>> SupplierModel
>>>>>>>>>>>>> ?
>>>>>>>>>>>>> IMHO we can get rid of it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Regards
>>>>>>>>>>>>> Sven
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 12.03.2016 23:39, Tobias Soloschenko wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yep - I am very happy about it, too - cool features for wicket
>>>>>>>>>>>>> 8
>>>>>>>>>>>>> :-)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Great work all!
>>>>>>>>>>>>>
>>>>>>>>>>>>> kind regards
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Tobias
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Am 12.03.16 um 23:38 schrieb Sven Meier:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> As a bonus IModel is a @FunctionalInterface now and one can do
>>>>>>>>>>>>>> things
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> new Link<String>("", () -> "abc") {
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>        @Override
>>>>>>>>>>>>>>>>        public void onClick()
>>>>>>>>>>>>>>>>        {
>>>>>>>>>>>>>>>>           // ...
>>>>>>>>>>>>>>>>        }
>>>>>>>>>>>>>>>> };
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Seems we're getting a grip on Wicket+lambdas finally :)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Sven
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 12.03.2016 23:13, Martin Grigorov wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Sat, Mar 12, 2016 at 11:01 PM, Martin Grigorov <
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> [email protected]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Sat, Mar 12, 2016 at 7:48 PM, Sven Meier <
>>>>>>>>>>>>>>>> [email protected]>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 1)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> we've been twiddling with read-only models for some time
>>>>>>>>>>>>>>>>> now,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>> IIRC it
>>>>>>>>>>>>>>>>>> never quite worked out.
>>>>>>>>>>>>>>>>>> I don't see much benefit in IReadOnlyModel as it is
>>>>>>>>>>>>>>>>>> proposed
>>>>>>>>>>>>>>>>>> now -
>>>>>>>>>>>>>>>>>> perhaps I'm missing the point though.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> How about adding another default to IModel:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>           default void setObject(final T object) {
>>>>>>>>>>>>>>>>>>               throw new UnsupportedOperationException();
>>>>>>>>>>>>>>>>>>           }
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> This way we can get rid of AbstractReadOnlyModel too :P
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> A minor thing that bothers me here is that currently
>>>>>>>>>>>>>>>>>> AROM#setObject()
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> final, so subclasses are effectively read only too.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> By moving this method to IModel we cannot make any
>>>>>>>>>>>>>>>>> guarantees.
>>>>>>>>>>>>>>>>> But I guess it will always be used as an anonymous inner
>>>>>>>>>>>>>>>>> class,
>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>> AROM is
>>>>>>>>>>>>>>>>> used now. If someone wants to have children then (s)he will
>>>>>>>>>>>>>>>>> have to
>>>>>>>>>>>>>>>>> create
>>>>>>>>>>>>>>>>> a custom class and there (s)he can make it 'final'.
>>>>>>>>>>>>>>>>> Let's do it!
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> As a bonus IModel is a @FunctionalInterface now and one
>>>>>>>>>>>>>>>>> can do
>>>>>>>>>>>>>>>>> things
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> like:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> new Link<String>("", () -> "abc") {
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>          @Override
>>>>>>>>>>>>>>>>          public void onClick()
>>>>>>>>>>>>>>>>          {
>>>>>>>>>>>>>>>>             // ...
>>>>>>>>>>>>>>>>          }
>>>>>>>>>>>>>>>> };
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I don't see a need for this.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Have fun
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Sven
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> how about adding a
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On 11.03.2016 22:54, Martin Grigorov wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> At "lambdas" [1] branch there are two more features:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 1) IReadOnlyModel by Michael Mossman
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> At the moment there are AbstractReadOnlyModel and
>>>>>>>>>>>>>>>>>>> SupplierModel
>>>>>>>>>>>>>>>>>>> (extends
>>>>>>>>>>>>>>>>>>> from AROM).
>>>>>>>>>>>>>>>>>>> Initially while MM suggested IROM I thought it will be a
>>>>>>>>>>>>>>>>>>> parent
>>>>>>>>>>>>>>>>>>> interface
>>>>>>>>>>>>>>>>>>> of IModel but it is the opposite - IROM extends from
>>>>>>>>>>>>>>>>>>> IModel.
>>>>>>>>>>>>>>>>>>> I don't see need of IROM. The classes look enough to me.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 2) stream based iteration of container's children by
>>>>>>>>>>>>>>>>>>> Andrea
>>>>>>>>>>>>>>>>>>> Del
>>>>>>>>>>>>>>>>>>> Bene
>>>>>>>>>>>>>>>>>>> I have said my opinion before - the visitor approach is
>>>>>>>>>>>>>>>>>>> faster
>>>>>>>>>>>>>>>>>>> than
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> stream based one.
>>>>>>>>>>>>>>>>>>> In addition we have to remove the deprecated
>>>>>>>>>>>>>>>>>>> org.apache.wicket.util.iterator.AbstractHierarchyIterator
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> its
>>>>>>>>>>>>>>>>>>> related
>>>>>>>>>>>>>>>>>>> classes because it fails with StackoverflowError when
>>>>>>>>>>>>>>>>>>> used
>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>> page
>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>> bigger component tree.
>>>>>>>>>>>>>>>>>>> So I don't see a reason for this feature.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Your option on them ?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 1. https://github.com/apache/wicket/compare/lambdas
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Martin Grigorov
>>>>>>>>>>>>>>>>>>> Wicket Training and Consulting
>>>>>>>>>>>>>>>>>>> https://twitter.com/mtgrigorov
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>
>

Reply via email to