package de.flower.common.ui.util;
import de.flower.common.util.Check;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import java.util.List;
/**
* Helper class for dealing with wicket components.
*/
public final class ComponentUtils {
private ComponentUtils() {
}
/**
* Checks if a behavior is attached to any component in the current page.
*
* @param component the component
* @param behaviorClass the behavior class
* @return true, if behavior is found in page
*/
public static boolean isBehaviorInPage(final Component component, final Class<? extends Behavior> behaviorClass) {
return getBehaviorInPage(component, behaviorClass) != null;
}
public static Behavior getBehaviorInPage(final Component component, final Class<? extends Behavior> behaviorClass) {
final Page page = component.getPage();
List<? extends Behavior> behaviors = page.getBehaviors(behaviorClass);
if (behaviors.size() > 0) {
Check.isTrue(behaviors.size() == 1);
return behaviors.get(0);
}
final Behavior behavior = page.visitChildren(new IVisitor<Component, Behavior>() {
@Override
public void component(final Component component, final IVisit<Behavior> visit) {
final List<? extends Behavior> behaviors = component.getBehaviors(behaviorClass);
if (behaviors.size() > 0) {
Check.isTrue(behaviors.size() == 1);
visit.stop(behaviors.get(0));
}
}
});
return behavior;
}
/**
* Gets the behavior.
*
* @param <T> the generic type
* @param component the component
* @param behaviorClass the behavior class
* @return the first behavior or null if none is found.
*/
public static <T extends Behavior> T getBehavior(final Component component, final Class<T> behaviorClass) {
final List<T> list = component.getBehaviors(behaviorClass);
if (list.isEmpty()) {
return null;
} else {
return list.get(0);
}
}
}