Skip to main content



      Home
Home » Eclipse Projects » NatTable » Is it possible to use RowSelectionModel in combination with GroupByLayer ?(There seem to be problems when Group-By is active with casts from GroupByObject to "MyRowBean")
Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1770286] Wed, 09 August 2017 12:05 Go to next message
Eclipse UserFriend
What I basically want to achieve is, that the user can select only rows, not single cells - so I wanted to use the RowSelectionModel.

However I also need the group-by feature.

As long as I do no grouping everything works fine. Once I drag a column to the "group by header area" I get ClassCastExceptions because GroupByObject cannot be cast to "MyRowBean".

The problem sounds obvious to me - RowSelectionModel likely expects just beans of a given type, and GroupByLayer suddenly introduces completely different beans for the GroupBy tree.

Did anyone ever mix these two features successfully ?

[Updated on: Wed, 09 August 2017 12:07] by Moderator

Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1770746 is a reply to message #1770286] Wed, 16 August 2017 13:12 Go to previous messageGo to next message
Eclipse UserFriend
Hi Chris

we wrote some code based on this nattable example : "example _6051_GroupByExample"

and we added the following code to select rows rather that cells

SelectionLayer selectionLayer = bodyLayerStack.getSelectionLayer();
		
		selectionLayer.setSelectionModel(new RowSelectionModel<Object>(selectionLayer, 
				(IRowDataProvider) bodyLayerStack.getBodyDataLayer().getDataProvider(), 
        		new IRowIdAccessor<Object>() {
		        	public Serializable getRowId(Object rowObject)  {
		        		return rowObject.hashCode();
		        	}
				}, 
        		false
			));





that works well in our case
best regards

Didier
Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1771004 is a reply to message #1770746] Mon, 21 August 2017 01:50 Go to previous messageGo to next message
Eclipse UserFriend
The question is "where do you get ClassCastExceptions"? In NatTable code or in your own code? Typically there should only be a CCE when you are trying to cast in your IRowIdAccessor, and that should be solvable by your own.
Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1771374 is a reply to message #1771004] Thu, 24 August 2017 08:28 Go to previous messageGo to next message
Eclipse UserFriend
Uhm, well .....

IRowIdAccessor is a teplated class, with my "row data bean" as template argument.
I do not get the CCE - it happens before getRowId is invoked. I also cannot use e.g. Object as template argument, as then I cannot instantiate the RowSelectionModel, which itself is templated.

But ..... both you and Didier are of course correct. What I can do is
* not to use template arguments for both the IRowIdAccessor and the RowSelectionModel
* check the type of the passed class in getRowId
* return the proper id in case it is "MyDataBean" and hashcode otherwise. (basically I want to avoid hashCode as it is not necessarily unique).

Imho still a little bit hackish ;-) - but it seems to work ....

[Updated on: Thu, 24 August 2017 09:22] by Moderator

Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1771425 is a reply to message #1771374] Fri, 25 August 2017 01:05 Go to previous messageGo to next message
Eclipse UserFriend
Well, I'm not sure what you mean with "templated class", but it sounds like you are using some custom framework on top of NatTable. And therefore it is not a NatTable issue.
Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1771431 is a reply to message #1771425] Fri, 25 August 2017 01:50 Go to previous messageGo to next message
Eclipse UserFriend
package org.eclipse.nebula.widgets.nattable.data;

import java.io.Serializable;

public interface IRowIdAccessor<R> {

    public Serializable getRowId(R rowObject);

}



isn't R a template argument? Shouldn't this be the same as in the RowSelectionModel and shouldn't the "RowDataBean" class be used there?
... well maybe there is my misunderstanding - but if it is used like this, then you get the CCE I described (when activating grouping) .... so no, there is no other framework, this is native NatTable

Either way - if I use Object instead, and do the downcast in getRowId, then I'm able to handle the exception. Possibly it's not exactly as intended, but it works quite well.

[Updated on: Fri, 25 August 2017 01:51] by Moderator

Re: Is it possible to use RowSelectionModel in combination with GroupByLayer ? [message #1771435 is a reply to message #1771431] Fri, 25 August 2017 01:59 Go to previous message
Eclipse UserFriend
It is not a template, it is a generic. And yes if you use the GroupBy feature, than the objects in the list are not all of the same type and you need to use Object as generic type and perform the cast.

If you want to use the GroupBy feature, this is the way to go because we need to introduce objects of other types to the list to make it work. I don't know another way to make the grouping work with GlazedLists.
Previous Topic:How to use static filters
Next Topic:Best Practice about uncommon table layout
Goto Forum:
  


Current Time: Wed Jul 23 14:49:13 EDT 2025

Powered by FUDForum. Page generated in 0.05118 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top