Here is the scenario:

From SOLR I'm getting results that are restyled with XSLT so that it is
compliant with Pivots Hashmap/Dictionary schemas. This gets bound with the serializer on every query (very fast, BTW).

In one part of the GUI, I have a treeview that shows facets based on the search results. On each leaf node I have an enhanced treenode (I called it UDTreeNode, for "UserDictionaryCapableTreeNode". As someone is selecting/unselecting values from the tree to filter results based on facet items, I'm capturing the node userdata into a UserDataDictionary on the Treeview object. So as someone is refining their search results, I'm adding/removing from that dictionary on Treeview based on node events and the userdata on each node. But when the person wants to start a NEW search without any facet filtering applied, I need a way to clear all selections from the TreeView dictionary.(This is the point where I'm looking for a more elegant method, like clear() to clear all element from a Map, etc). What if you had a method to set Treeview.UserDataDictionary to null or a "new/empty Component.UserDataDictionary"? Is there a problem with seting it to a new/empty dictionary? Something to do with events, etc.?

BTW, it would also be neat if you can have a basic "checked" or "selected" attribute on treenodes, so when I'm binding xml to the treeview, the appropriate nodes are checked and the "selectedpaths" on treeview would be updated. Otherwise, I think I'd have to save the last "selected paths" and reapply them after setting treedata with xml from SOLR. Only issue with this idea is that selected paths are position-based, not element-id based/wtkx-id-based, etc. So if the xml from SOLR is modified, right now it would be difficult to apply the last "selectedpaths" to the new treedata. I think i can hack something together for this. I need to look at the treeview.setdata() method and see if I can update the selected-paths based on treenode attributes or my new treenode userdatadictionary.


Kudos to you guys for making this framework. My manager at work is excited about this (which is actually a surprise, because the the IT-shop is primarily Microsoft shop). So SOLR (java) and Pivot (java) in that shop might change peoples' perceptions of Java. I was trying GWT/SmartGWT a few weeks ago but ran into roadblocks with their databinding conventions. Pivot lets me take a XML document, break it up and bind to individual treeview/tableview components in one HTTP GET.

One more thing, in the old Thinlet, you could always grab a handle to an object by it's ID (every element in their xml had an ID attribute) as long as you provided an ID attribute. It was something like "desktop.getByID(my_item_id)". With this you were able to provide the scope of the seach with another argument, just in case you were using duplicate IDs in across larger components.

With Pivot, you have to explicity set a variable when the serializer is running. Is there a big cost to storing a map of all IDs ? Just an idea.


I can send you screenshots of the prototype if you'd like (after the weekend).



Thanks again.
Bob


----- Original Message ----- From: "Greg Brown" <[email protected]>
To: <[email protected]>
Sent: Saturday, February 13, 2010 8:39 AM
Subject: Re: clearing all items from Component.UserDataDictionary


Just curious - what is the use case that is driving this? Our assumption when implementing UserDataDictionary was that bulk removes of user data would not be a common requirement, so it would help to understand the motivation. There may be another way to accomplish what you are trying to do...

On Feb 12, 2010, at 4:24 PM, Robert Piotrowski wrote:

I there a quick way to remove all items in Component.UserDataDictionary in one step?

If I iterate with the iterator and use remove(), I get a concurrency exception.

My workaround right now is by interating over the dictionary to get all keys into a vector and then looping thru the vector to remove elements by keyname back on the dictionary. But it's nasty.

Maybe it should implement the Map interface too/instead?

Or is there a way to set it to an empty dictionary? I can't see to get that to work.




Thanks,

Bob



Reply via email to