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