I think most components only need a read-only model. Note that read-only does 
not prevent you from changing properties on the object, just not setObject. 
PropertyModels will still work. Therefore, it seems best to use IModel -- the 
shortest to write and already used by all components -- as the read-only 
version. Introducing IReadableModel would force us and all our users to try to 
replace all IModel instances with IReadableModel to see if it fits.

Simply dropping IModel.setObject and Component.setDefaultModelObject only gave 
74 errors in wicket. Almost all of these are in IModel implementations and 
FormComponents. This seems to support that calling setObject is quite a rare 
case. Fixing most of these errors is very easy.

Best regards,
Emond

On Wednesday 20 August 2014 14:13:56 Martin Grigorov wrote:
> How about: IReadableModel, IWriteableModel and IModel extending the former ?
> Then go all over the place and change IModel to whatever feels more
> appropriate.
> 
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
> 
> 
> On Wed, Aug 20, 2014 at 2:07 PM, Martijn Dashorst <
> 
> [email protected]> wrote:
> > I'd like to revisit this thread in the wake of Wicket 7 and beyond.
> > 
> > We were toying with having RepeatingView's Item be typed as Item<?
> > extends T> instead of Item<T>. This would make the extensibility of
> > repeaters much better. This broke the hell out of the API (fixable for
> > the whole of Wicket in about 20 minutes), but break all applications.
> > 
> > We are not sure whether making IModel a single method interface will
> > improve this particular use case, but it will make using Java 8's
> > lambda's much, much easier and cleaner.
> > 
> > So I propose to revisit this discussion and see if we can find common
> > ground on splitting IModel into two classes: IModel<T> and
> > IWriteableModel<T>, and I guess there's a need for a
> > IReadWriteModel<T> as well for FormComponent:
> > 
> > public interface IModel<T> extends IDetachable
> > {
> > 
> >     public T getObject();
> > 
> > }
> > 
> > public interface IWriteableModel<T> extends Detachable
> > {
> > 
> >     public void setObject(T);
> > 
> > }
> > 
> > public interface IReadWriteModel<T> extends IModel<T>, IWriteableModel<T>
> > {
> > }
> > 
> > For example, the IWriteableModel could be useful for FileUploadField,
> > except that FormComponent depends on read/write capabilities (or is
> > it?).
> > 
> > Martijn
> > 
> > 
> > On Sun, Dec 16, 2012 at 8:30 PM, michaelmosmann <[email protected]>
> > 
> > wrote:
> > > GitHub user michaelmosmann opened a pull request:
> > >     https://github.com/apache/wicket/pull/27
> > >     
> > >     change IModel to readonly by default
> > >     
> > >     I have removed setObject() from IModel and moved it to
> > 
> > IWriteableModel. This time i tried to make as less impact as possible. All
> > test are green (you hat to disable the clirr plugin because of api changes
> > to 6.0.0).
> > 
> > >     Why?
> > >     
> > >     You can not say if a model is read only by its type. You can not
> > 
> > force a component not to change your model value (based on the type of the
> > model).
> > 
> > >     I would like to change this. This is a first step to show, that it
> > 
> > is possible.
> > 
> > > You can merge this pull request into a Git repository by running:
> > >     $ git pull https://github.com/michaelmosmann/wicket
> > 
> > Refactor-WriteableModel
> > 
> > > Alternatively you can review and apply these changes as the patch at:
> > >     https://github.com/apache/wicket/pull/27.patch
> > > 
> > > ----
> > > commit 5521138c412036551bdf96fcbfbe2286a7e1fd9b
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-09-26T20:17:26Z
> > > 
> > >     ignore idea project files
> > > 
> > > commit 9a2f8c8665c48abe29611cc5d5f0cc72e53c961c
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-09-30T22:58:04Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit 698bfb771128fd157a4e5a47af5e61ff40a06d68
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-01T17:17:46Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit b4645c4608517877aba49bac8d3aec695d8922fc
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-01T18:40:27Z
> > > 
> > >     git ignore
> > > 
> > > commit 9323d9593931f82ac9dbe6908b49aeeda359bd31
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-02T14:34:40Z
> > > 
> > >     introduce writeable model
> > > 
> > > commit 5408fab49e20105c15cb9a989cf3de0845edf448
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-09T19:32:09Z
> > > 
> > >     added annotation
> > > 
> > > commit 2965b1b698f1c08eb07a15a60336a6e7ecce4135
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-09T19:34:17Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit d088d97094885faa579279d2b847d6137ebfa55e
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-09T19:35:15Z
> > > 
> > >     Merge branch 'trunk' into Refactor-WriteableModel
> > > 
> > > commit 2a60388d3513c2f44c507347b6da16d31f618860
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-10-10T18:48:04Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit 5ffb19d8bf8522d19506240da8b38ff69a4707eb
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-06T21:06:17Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit 9900066c219b67b536e98fcb606e07c31076482f
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-06T21:08:38Z
> > > 
> > >     Merge branch 'trunk' into Refactor-WriteableModel
> > > 
> > > commit 5e2c00f1f3c1988ed250793ca55768c8fcf1bbac
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T18:05:24Z
> > > 
> > >     Merge remote-tracking branch 'upstream/master' into trunk
> > > 
> > > commit 575d73af0c57611e17cd5e68fff61a3a5cd3c50d
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T18:07:53Z
> > > 
> > >     Merge remote-tracking branch 'origin/trunk' into
> > 
> > Refactor-WriteableModel
> > 
> > > commit 74dccf0c42af29dfbc49d31c1d7330a43ebba6c6
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T18:30:46Z
> > > 
> > >     prepare component model replacement
> > > 
> > > commit 49dc93c8b81c913a37dfe92fedbe0cf81e720413
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T19:01:01Z
> > > 
> > >     compiles
> > > 
> > > commit 23f85a8dd42a5b9838774195f88e3b3f74785a40
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T19:19:11Z
> > > 
> > >     clean up
> > > 
> > > commit 8b93bc61bf83b1dc681c6d71f1ea8b8d43c7c1ab
> > > Author: Michael Mosmann <[email protected]>
> > > Date:   2012-12-16T19:19:19Z
> > > 
> > >     clean up
> > > 
> > > ----
> > 
> > --
> > Become a Wicket expert, learn from the best: http://wicketinaction.com

Reply via email to