package com.revolsys.swing.tree.node; import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.List; import javax.swing.Icon; import com.revolsys.collection.Parent; import com.revolsys.logging.Logs; import com.revolsys.swing.tree.BaseTreeNode; import com.revolsys.util.Property; public class ParentTreeNode extends LazyLoadTreeNode { public ParentTreeNode(final Parent<?> userData) { super(userData); Property.addListenerRunnable(userData, "children", this::refresh); } public ParentTreeNode(final Parent<?> userData, final Icon icon) { this(userData); setIcon(icon); } @Override public boolean getAllowsChildren() { final Parent<?> parent = getUserData(); if (parent != null) { return parent.isAllowsChildren(); } return true; } @Override protected List<BaseTreeNode> loadChildrenDo() { final List<BaseTreeNode> children = new ArrayList<>(); final Parent<?> parent = getUserData(); if (parent != null) { parent.refresh(); for (final Object child : parent.getChildren()) { final BaseTreeNode childNode = BaseTreeNode.newTreeNode(child); if (childNode != null) { children.add(childNode); } } } return children; } @Override public void propertyChangeDo(final PropertyChangeEvent event) { final Object source = event.getSource(); if (source == getUserObject()) { final String propertyName = event.getPropertyName(); if (propertyName.equals("registries")) { refresh(); } } } @Override protected synchronized void refreshDo() { try { final Parent<?> parent = getUserData(); if (parent != null) { parent.refresh(); super.refreshDo(); } } catch (final Exception e) { Logs.error(this, "Error refreshing: " + this, e); } } }