/* * ViewUtils.java * * Created on 6.7.2008 * */ package netukar.utils.view; import java.awt.Component; import java.awt.Container; import java.util.LinkedList; import java.util.List; import java.util.Queue; import javax.swing.JMenu; /** * * @author Radovan Netuka */ public class ViewUtils { private ViewUtils() {} /** * * @param component * component to be tested, cannot be null * * @param name * name to be tested, or null * * @param componentClass * class to be tested, or null * * @return true if given component matches given criteria * * @throws IllegalArgumentException when both match criteria are * null */ private static boolean matches(Component component, String name, Class componentClass) { if ((name == null) && (componentClass == null)) { throw new IllegalArgumentException("Both match criterie cannot be null"); } if (name == null) { return componentClass.isInstance(component); } if (componentClass == null) { return name.equals(component.getName()); } return (componentClass.isInstance(component) && name.equals(component.getName())); } public static Component getComponent(Component root, String name, Class componentClass) { if (root == null) { return null; } else if (matches(root, name, componentClass)) { return root; } else if (root instanceof Container) { Component[] children = (root instanceof JMenu) ? ((JMenu) root).getMenuComponents() : ((Container) root).getComponents(); for (Component child : children) { Component comp = getComponent(child, name, componentClass); if (comp != null) { return comp; } } } return null; } public static Component getComponent(Component root, String name) { return getComponent(root, name, null); } public static Component getComponent(Component root, Class componentClass) { return getComponent(root, null, componentClass); } public static Component[] getAllComponents(Component root, Class componentClass) { if (root == null) { return null; } List result = new LinkedList(); Queue queue = new LinkedList(); queue.add(root); Component current; while((current = queue.poll()) != null) { if (componentClass.isInstance(current)) { result.add(current); } if (current instanceof Container) { Component[] children = (current instanceof JMenu) ? ((JMenu) current).getMenuComponents() : ((Container) current).getComponents(); for (Component child : children) { queue.add(child); } } } return result.toArray(new Component[0]); } public static Component getTopLevelParent(Component component) { Component current = component; while (current.getParent() != null) { current = current.getParent(); } return current; } public static Component getParent(Component component, Class parentClass) { Component current = component; while (current != null) { if (parentClass.isInstance(current)) { return current; } current = current.getParent(); } return null; } }