JTree aggregation

I have a dynamic JTree that has numerous root nodes that appear as duplicates (via name), yet the children may be different.  I'm interested in allowing the user to aggregate the tree so the root nodes only appear once, yet all the tree nodes appear under them -- without having to make additional calls to the backend to get the data again.

So for instance, if the tree looks like this
- User
    + Josh
    + Frank
    + Susan
- Admin
    + Tom
    + Dick
    + Harry
- User
    + Johnny
    + Rick
    + Dave
- Admin
   + Tommy
   
I'd like it to appear as follows:
- User
   - User
       + Josh
       + Frank
       + Susan
   - User
       + Johnny
       + Rick
       + Dave
- Admin
    - Admin
       + Tom
       + Dick
       + Harry
    - Admin
       + Tommy
sapientconceptionsAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mick BarryJava DeveloperCommented:
Either add the option in your table model to do the aggregate, or write a new table model that wraps your current model and performs the aggregation.
The second approach should be cleaner.
0
sapientconceptionsAuthor Commented:
can you provide an example?
0
Mick BarryJava DeveloperCommented:
Not specifically, the skeleton would be something like:

public AggregateTableModel extends AbstracTableModel
   implements TableModelListener
{
   private TableModel Wrapped;

  public AggregateTableModel(TableModel model)
  {
     Wrapped = model;
     // listen for changes to wrapped model
     Wrapped.addTasbleModelListener(this);
  }

  // you then need to implement TableModel methods
  // to return aggregated table details

  ...

   // and TableModelListener methods
   // to fire appropriate events when wrapped model changes
   
   ...
}
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Amazon Web Services

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

sapientconceptionsAuthor Commented:
Thanks for you help. But this didn't help me at all.  I'm hoping someone can provide me the methods for re-arranging the children from one parent to another.

Thanks.
0
Mick BarryJava DeveloperCommented:
do u actually need both views?
0
sapientconceptionsAuthor Commented:
yes...
0
Mick BarryJava DeveloperCommented:
is the data dynamic or static?
0
sapientconceptionsAuthor Commented:
Data is dynamic.  But only two levels are initially populated with the original tree ("User/Admin" and their children).  So I'd like to iterate through the tree check a list to see if the node's value exists (i.e. User) if not, add node to new tree and map (record position in new tree), then add current node & children from original tree as child of newly added node to new tree.

Repeat, however if node exists in list, then find position of node in new tree and add node and kids to that parent node in tree.

hope that makes sense.
0
Mick BarryJava DeveloperCommented:
you could do that ie maintain two seperate tree models externally, or use the approach I suggested above to have the alternate view wrap your existing model and handle the mapping.
Either way it's fairly involved, but am happy to help when you have problems.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.