On Sat, 3 Dec 2005 13:21:15 -0800, Igor Vaynberg <[EMAIL PROTECTED]> wrote:

the problem im having is that something somewhere has to version this
information. if i put it back into the dataprovider then we are back to
square one.

I hope that it does not cause any problems when a DataView holds the DataProvider in a non versioned field and the a DataProvider holds itself a reference to a component (ie an ISortStateLocator), because this is no different than holding directly in a component a nonversioned reference to another component, which I always do in my Pages and is also done in the examples.

the problem is compounded by the fact that i want to add
toolbars (like a filter toolbar). this means that the dataprovider has to be
aware of different toolbars attached to the datatable. and it would be
really nice if the toolbars did not keep their models so that you can add
two navigation toolbars and they are sharing a model stored elsewhere.

Assuming that Component.addStateChange() or Page.addStateChange() were public (which I think it should be), I'd say have different Models for each feature Ie:

SortStateLocator implements ISortState{
 final Componente _comp;
 List _sorted;
 SortStateLocator(Component comp){
   _comp = comp;
 }
 addSort(String sort){
  ...
  _comp.addStateChange(...sorted...);
  ....
 }
 getSortList(){..}
 getSortState(String prop){..};
}

and similar things for other toolbars:

Than use it:

MyPage(){

  final SortStateLocator sortLoc = new SortStateLocator(this);
  IDataProvider prov = new IDataProvider(){
    ..
    iterator(int from,int lenght){
      List sortOrder = sortLoc.getSortList();
      //use the sortOrder
      ....
    }
  }

  //the sortHeader which could be a prebuild comp.
  add(new ListView("sortHeader",sortLoc.getSortList()){
    populateItem(Item item){
item.add(new SortLink("link",sortLoc).add(new Label("name",item.getModelObjectAsString()));
  });

  //the data
  add(new DataView("dv",prov));

}



I think this way you don't need a change to IDataProvider.

Christian



my original thought was to let users implement a "compound" model object for
the datatable. that way all the information that needs to be versioned is
neatly in one place and all toolbars+idataprovider link to the same place.
so a compound model object for the datatable might be something like this

public class DataTableModel implements ISortStateLocator,
IFilterStateProvider {
   private MySortState state=new MySortState(); // implements ISortState
   private MyFilterState filterState=new MyFilterState();

   public ISortState getSortState() { return state; }
   public Object getFilterState() { return filterState; }
}

then the dataprovider can be changed to
IDataProvider {
   iterator iterator(int first, int count, Object datatableModelObject);
   int size(Object datatableModelObject);
}

so that in your implementation you can do something like:
iterator iterator(int first, int count, Object dtmo) {
   ISortState sort=((ISortStateLocator)dtmo).getSortState();
   FilterState filter=((IFilterStateLocator)dtmo).getFIlterState();
}

and maybe we can provide an uber-compound object that will have all toolbar
models that we ship in it. it will waste a little bit of space but its
easier on the user. you can always optimize later :)

I dont know how good that approach is, its where im headed right now though.
If anyone has any suggestions they are welcome.

-Igor


On 12/3/05, Christian Essl <[EMAIL PROTECTED]> wrote:

I dont think that you'll need to change IDataProvider. If a concrete
DataProvider class would support sorting than it should just take ie in
the constructor an ISortOrderProvider. Maybe you could even keep the
ISortableDataProvider. It just implements IDataProvider and
ISortOderProvider and a default implementation delgates to a component
which implements ISortOderProvider (and which does the actual version
keeping).

However you know best what and how so I am happy to wait for your
solution.

Christian

On Sat, 3 Dec 2005 11:31:59 -0800, Igor Vaynberg <[EMAIL PROTECTED]>
wrote:

> already on it. havent figured it all out yet. the problem is i think i
> will
> have to change IDataProvider to take extra parameters. this will break
> all
> the clients, but i dont see another way around it yet. im also
> modularizing
> datatable so that navigation/headers are toolbars that can be added or
> not.
> also working on a filter toolbar. should be sweet when its done, but
> there
> will be a lot of api breaks.
>
> -Igor
>
>
> On 12/3/05, Christian Essl <[EMAIL PROTECTED]> wrote:
>>
>>
>> > The data provider is kept as the model because that is where the
>> sorting
>> > state lives and that needs to be versioned. I need to refactor that
>> out
>> > of
>> > the dataprovider looks like.
>> >
>>
>> I see.
>>
>> Maybe an interface ISortOrderProvider which is exactly like
>> ISortableDataProvider but does not extend IDataProvider. The interface
>> could than be implemented by special Components directly (ie
>> SortableHeader). And a DataProvider which supports sorting uses an
>> instance of this interface to sort its data. I thing this would also
>> decouple the sorting from DataView etc.
>>
>> Christian
>>
>> > -Igor
>> >
>> > On 12/3/05, Christian Essl <[EMAIL PROTECTED]> wrote:
>> >>
>> >> On Fri, 2 Dec 2005 22:51:05 +0100, Johan Compagner
>> >> <[EMAIL PROTECTED]>
>> >> wrote:
>> >>
>> >> > Maybe we should build something that it is easier for models to
>> >> version
>> >> > themselfs. Like an interface IVersionable with a method
>> Serializeable
>> >> > getVersionData()
>> >> > Which a model can implement. And then we don't store the complete
>> >> model
>> >> > but
>> >> > only that data.
>> >>
>> >> If I understand right than a IModel which does not implement
>> >> IVersionable
>> >> does not get stored in the version history? I think this would be
>> good,
>> >> because the current situation is confusing.
>> >>
>> >> Concerning DataView I'd say that when a the IDataProvider is given
>> >> directly in the constructor. It should not be stored as the model of
>> >> DataView but kept in an instancefield, because in nearly all cases
it
>> >> will
>> >> be a pull-model. If you need versioning than you can always wrap it
>> in
>> a
>> >> model.
>> >>
>> >> Christian
>> >>
>> >> >
>> >> > johan
>> >> >
>> >> >
>> >> > On 12/2/05, Nathan Hamblen <[EMAIL PROTECTED]> wrote:
>> >> >>
>> >> >> This came up before when I was trying to track down why reversing
>> the
>> >> >> sort order of a DataView was bringing down my test application.
>> >> >> (http://thread.gmane.org/gmane.comp.java.wicket.user/4309) It
>> turned
>> >> out
>> >> >> that the page versioning code was serializing the entire view
>> >> hierarchy,
>> >> >> recursively, because of anonymous model classes that contained
>> >> pointers
>> >> >> back into the view.
>> >> >>
>> >> >> The consensus was that you would have to turn off page versioning
>> if
>> >> you
>> >> >> wanted an anonymous IModel. Is this still the case? I'm just now
>> >> >> noticing anonymous IModels becoming sort of recommended. Does
that
>> >> mean
>> >> >> than page versioning is not recommended anymore?
>> >> >>
>> >> >> I'll admit don't even understand how versioning is supposed to
>> work.
>> >> >> DataView sorting seems to be one of the few things that triggers
>> it.
>> >> >> I've got forms updating models all over the place and nary a
>> version
>> >> to
>> >> >> be seen. So, I just turn it OFF then, and anonymously subclass
>> IModel
>> >> to
>> >> >> my heart's content?
>> >> >>
>> >> >> Nathan
>> >> >>
>> >> >> Christian Essl wrote:
>> >> >> > On Thu, 1 Dec 2005 14:24:20 -0500, Andrew Berman
>> >> <[EMAIL PROTECTED]>
>> >> >> > wrote:
>> >> >> >
>> >> >> >> Honestly, I don't think there ever was a Spring Integration
>> >> >> problem.  I
>> >> >> >> think people were just looking for a cookie-cutter approach to
>> >> using
>> >> >> >> Spring
>> >> >> >> within Wicket.  It's actually quite easy to do without using
>> any
>> >> of
>> >> >> the
>> >> >> >> Spring stuff that Igor and others wrote, but it's always a
good
>> >> thing
>> >> >> to
>> >> >> >> have a common approach that everyone can follow.
>> >> >> >
>> >> >> > Honestly, I think Igor did a good job: It is just easier and
>> more
>> >> >> > natural to write over and over again:
>> >> >> >
>> >> >> > new HibernateModel(obj,_dao);
>> >> >> >
>> >> >> > than
>> >> >> >
>> >> >> > new HibernateModel(obj, new Model(){
>> >> >> >    getObject(Component comp){
>> >> >> >       return ((MyApplication)Appliation.get()).getDAO();
>> >> >> >    }
>> >> >> > });
>> >> >> >
>> >> >> > and this is not restricted to HibernateDAOs but to any bean you
>> do
>> >> not
>> >> >> > want to get serialized whtih your components.
>> >> >> >
>> >> >> > Christian
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > ___________________________________________________________
>> >> Gesendet
>> >> >> von
>> >> >> > Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier anmelden:
>> >> >> > http://mail.yahoo.de
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > -------------------------------------------------------
>> >> >> > This SF.net email is sponsored by: Splunk Inc. Do you grep
>> through
>> >> log
>> >> >> > files
>> >> >> > for problems? Stop! Download the new AJAX search engine that
>> >> makes
>> >> >> > searching your log files as easy as surfing the web. DOWNLOAD
>> >> >> SPLUNK!
>> >> >> > http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
>> >> >>
>> >> >>
>> >> >>
>> >> >> -------------------------------------------------------
>> >> >> This SF.net email is sponsored by: Splunk Inc. Do you grep
through
>> >> log
>> >> >> files
>> >> >> for problems?  Stop!  Download the new AJAX search engine that
>> makes
>> >> >> searching your log files as easy as surfing the  web.  DOWNLOAD
>> >> SPLUNK!
>> >> >> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
>> >> >> _______________________________________________
>> >> >> Wicket-user mailing list
>> >> >> Wicket-user@lists.sourceforge.net
>> >> >> https://lists.sourceforge.net/lists/listinfo/wicket-user
>> >> >>
>> >>
>> >>
>> >>
>> >> --
>> >> Christian Essl
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> ___________________________________________________________
>> >> Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier
>> >> anmelden: http://mail.yahoo.de
>> >>
>> >>
>> >>
>> >> -------------------------------------------------------
>> >> This SF.net email is sponsored by: Splunk Inc. Do you grep through
>> log
>> >> files
>> >> for problems? Stop! Download the new AJAX search engine that makes
>> >> searching your log files as easy as surfing the  web.  DOWNLOAD
>> SPLUNK!
>> >> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
>> >> _______________________________________________
>> >> Wicket-user mailing list
>> >> Wicket-user@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/wicket-user
>> >>
>>
>>
>>
>> --
>> Christian Essl
>>
>>
>>
>>
>>
>> ___________________________________________________________
>> Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier
>> anmelden: http://mail.yahoo.de
>>
>>
>>
>> -------------------------------------------------------
>> This SF.net email is sponsored by: Splunk Inc. Do you grep through log
>> files
>> for problems?  Stop!  Download the new AJAX search engine that makes
>> searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
>> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
>> _______________________________________________
>> Wicket-user mailing list
>> Wicket-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/wicket-user
>>



--
Christian Essl





___________________________________________________________
Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier
anmelden: http://mail.yahoo.de



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log
files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user




--
Christian Essl
        

        
                
___________________________________________________________ Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier anmelden: http://mail.yahoo.de



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to