package org.ovirt.engine.ui.common.widget.form.key_value;
import java.util.LinkedList;
import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget;
import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.BaseKeyModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueLineModel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Widget;
public class KeyValueWidget<T extends BaseKeyModel> extends AddRemoveRowWidget<T, KeyValueLineModel, KeyValueLineWidget> {
interface WidgetUiBinder extends UiBinder<Widget, KeyValueWidget> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
private T model;
private final LinkedList<KeyValueLineWidget> widgets = new LinkedList<>();
KeyValueWidget() {
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
}
@Override
protected void init(T model) {
this.model = model;
widgets.clear();
super.init(model);
}
@Override
public T flush() {
super.flush();
for (KeyValueLineWidget lineWidget : widgets) {
lineWidget.flush();
}
return model;
}
@Override
public void setUsePatternFly(boolean use) {
super.setUsePatternFly(use);
if (use) {
contentPanel.removeStyleName(contentPanel.getStyleName());
}
}
@Override
protected KeyValueLineWidget createWidget(KeyValueLineModel value) {
KeyValueLineWidget keyValueLineWidget = new KeyValueLineWidget();
keyValueLineWidget.edit(value);
keyValueLineWidget.setUsePatternFly(usePatternFly);
widgets.add(keyValueLineWidget);
return keyValueLineWidget;
}
@Override
protected KeyValueLineModel createGhostValue() {
return model.createNewLineModel();
}
@Override
protected boolean isGhost(KeyValueLineModel value) {
return !model.isKeyValid(value.getKeys().getSelectedItem());
}
@Override
protected void toggleGhost(KeyValueLineModel value, KeyValueLineWidget widget, boolean becomingGhost) {
if (!widget.isEnabled()) {
return;
}
super.toggleGhost(value, widget, becomingGhost);
widget.valueField.setEnabled(!becomingGhost);
widget.valuesField.setEnabled(!becomingGhost);
}
@Override
protected void onRemove(KeyValueLineModel value, KeyValueLineWidget widget) {
super.onRemove(value, widget);
model.updateKeys();
widgets.remove(widget);
}
}