package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
import org.ovirt.engine.core.common.businessentities.qos.QosBase;
import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver;
import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosParametersModel;
import org.ovirt.engine.ui.uicompat.IEventListener;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.FlowPanel;
public abstract class QosWidget<T extends QosBase, P extends QosParametersModel<T>> extends AbstractModelBoundPopupWidget<P> {
@UiField
FlowPanel mainContainer;
protected UiCommonEditorDriver<P, QosWidget<T, P>> driver;
private QosParametersModel<? extends QosBase> model;
private final IEventListener<PropertyChangedEventArgs> propertyChangeListener;
public QosWidget() {
propertyChangeListener = (ev, sender, args) -> {
if ("IsAvailable".equals(args.propertyName)) { //$NON-NLS-1$
toggleVisibility();
} else if ("IsChangable".equals(args.propertyName)) { //$NON-NLS-1$
updateChangeability(model.getIsChangable());
}
};
}
private void toggleVisibility() {
mainContainer.setVisible(model.getIsAvailable());
}
protected void updateChangeability(boolean enabled) {
// Do nothing
}
@Override
public void edit(P model) {
driver.edit(model);
if (this.model != null) {
this.model.getPropertyChangedEvent().removeListener(propertyChangeListener);
}
this.model = model;
model.getPropertyChangedEvent().addListener(propertyChangeListener);
toggleVisibility();
updateChangeability(model.getIsChangable());
}
@Override
public P flush() {
return driver.flush();
}
@Override
public void cleanup() {
driver.cleanup();
}
}