/*
* 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;
}
}