package org.ovirt.engine.ui.common.widget.form.key_value;
import org.gwtbootstrap3.client.ui.Row;
import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver;
import org.ovirt.engine.ui.common.widget.HasEditorDriver;
import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueLineModel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Widget;
public class KeyValueLineWidget extends Composite implements HasValueChangeHandlers<KeyValueLineModel>, HasEditorDriver<KeyValueLineModel>, HasEnabled {
interface WidgetUiBinder extends UiBinder<Widget, KeyValueLineWidget> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
interface Driver extends UiCommonEditorDriver<KeyValueLineModel, KeyValueLineWidget> {
}
private boolean enabled = true;
@UiField
@Ignore
Row panel;
@UiField
@Path(value = "keys.selectedItem")
ListModelListBoxEditor<String> keyField;
@UiField
@Path(value = "value.entity")
StringEntityModelTextBoxEditor valueField;
@UiField
@Path(value = "values.selectedItem")
ListModelListBoxEditor<String> valuesField;
private final Driver driver = GWT.create(Driver.class);
KeyValueLineWidget() {
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
driver.initialize(this);
hideLabels();
}
private void hideLabels() {
keyField.hideLabel();
valueField.hideLabel();
valuesField.hideLabel();
}
public void setUsePatternFly(boolean use) {
keyField.setUsePatternFly(use);
valueField.setUsePatternFly(use);
valuesField.setUsePatternFly(use);
}
@Override
public void edit(final KeyValueLineModel object) {
updateKeyTitle(object);
object.getKeys().getSelectedItemChangedEvent().addListener((ev, sender, args) -> {
ValueChangeEvent.fire(KeyValueLineWidget.this, object);
updateKeyTitle(object);
});
driver.edit(object);
}
/**
* set dropdown with selected key tooltip.
*/
private void updateKeyTitle(KeyValueLineModel object) {
String selectedKey = object.getKeys().getSelectedItem();
if (selectedKey != null) {
keyField.setWidgetTooltip(selectedKey);
}
}
@Override
public KeyValueLineModel flush() {
return driver.flush();
}
@Override
public void cleanup() {
driver.cleanup();
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean enabled) {
keyField.setEnabled(enabled);
valueField.setEnabled(enabled);
valuesField.setEnabled(enabled);
this.enabled = enabled;
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<KeyValueLineModel> handler) {
return addHandler(handler, ValueChangeEvent.getType());
}
}