package fr.openwide.core.wicket.more.markup.html.basic; import java.util.Arrays; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.model.IModel; import com.google.common.collect.Lists; public class EnabledContainer extends WebMarkupContainer { private static final long serialVersionUID = 3955461375453681131L; private boolean enabledIfEmpty; private boolean toggleEnabled; private String enabledClassName; private String disabledClassName; private List<IModel<?>> models = Lists.newArrayList(); private List<IModel<? extends List<?>>> listModels = Lists.newArrayList(); private List<Component> components = Lists.newArrayList(); public EnabledContainer(String id, boolean enabledIfEmpty, boolean toggleEnabled, String enabledClassName, String disabledClassName) { super(id); this.enabledIfEmpty = enabledIfEmpty; this.toggleEnabled = toggleEnabled; this.enabledClassName = enabledClassName; this.disabledClassName = disabledClassName; } public EnabledContainer listModel(IModel<? extends List<?>> model) { listModels.add(model); return this; } public EnabledContainer model(IModel<?> model) { models.add(model); return this; } public EnabledContainer component(Component component) { components.add(component); return this; } public EnabledContainer components(Component... component) { components.addAll(Arrays.asList(component)); return this; } @Override protected void onConfigure() { super.onConfigure(); for (Component component : components) { component.configure(); if (component.isVisible()) { conditionnalySetEnabled(!enabledIfEmpty); return; } } for (IModel<? extends List<?>> listModel : listModels) { if (listModel != null && listModel.getObject() != null && listModel.getObject().size() > 0) { conditionnalySetEnabled(!enabledIfEmpty); return; } } for (IModel<?> model : models) { if (model != null && model.getObject() != null) { conditionnalySetEnabled(!enabledIfEmpty); return; } } conditionnalySetEnabled(enabledIfEmpty); } @Override public void onComponentTag(ComponentTag openTag) { super.onComponentTag(openTag); if (isEnabled()) { openTag.append("class", enabledClassName, " "); } else { openTag.append("class", disabledClassName, " "); } } protected void conditionnalySetEnabled(boolean enabled) { if (toggleEnabled) { setEnabled(enabled); } } @Override protected void onDetach() { super.onDetach(); for (IModel<?> listModel : listModels) { listModel.detach(); } for (IModel<?> model : models) { model.detach(); } } }