package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.user.client.ui.Widget;
public class PopupWidgetConfigMap extends HashMap<Widget, PopupWidgetConfig> {
private static final long serialVersionUID = 7118052938701174692L;
public PopupWidgetConfigMap update(Widget widget, PopupWidgetConfig newConfig) {
remove(widget);
return putOne(widget, newConfig);
}
public PopupWidgetConfigMap putAll(List<Widget> widgets, PopupWidgetConfig config) {
for (Widget widget : widgets) {
// each needs it's own copy to be possible to edit the application level visibility
put(widget, config.copy());
}
return this;
}
public PopupWidgetConfigMap putOne(Widget widget, PopupWidgetConfig newConfig) {
put(widget, newConfig);
return this;
}
public PopupWidgetConfigMap getAll() {
return filter(config -> true);
}
// will be used as soon as the server supports this flag
public PopupWidgetConfigMap getVisibleForAdminOnly() {
return filter(config -> config.isAdminOnly());
}
public PopupWidgetConfigMap getVisibleInAdvanceMode() {
return filter(config -> config.isVisibleOnlyInAdvanced() && config.isApplicationLevelVisible());
}
public PopupWidgetConfigMap getAlwaysHidden() {
return filter(config -> config.isAlwaysHidden());
}
public PopupWidgetConfigMap getDetachables() {
return filter(config -> config.isDetachable());
}
private PopupWidgetConfigMap filter(Predicate predicate) {
PopupWidgetConfigMap res = new PopupWidgetConfigMap();
for (Map.Entry<Widget, PopupWidgetConfig> entry : this.entrySet()) {
if (predicate.apply(entry.getValue())) {
res.put(entry.getKey(), entry.getValue());
}
}
return res;
}
private interface Predicate {
boolean apply(PopupWidgetConfig config);
}
}