package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
import java.util.Set;
import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.VfsNicLabelModel;
import com.google.gwt.core.shared.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.user.client.ui.Widget;
public class VfsNicLabelWidget extends AddRemoveRowWidget<VfsNicLabelModel, ListModel<String>, NicLabelEditor> implements HasValueChangeHandlers<Set<String>> {
public interface WidgetUiBinder extends UiBinder<Widget, VfsNicLabelWidget> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
public VfsNicLabelWidget() {
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
}
@Override
protected ListModel<String> createGhostValue() {
ListModel<String> value = new ListModel<>();
value.setSelectedItem(""); //$NON-NLS-1$
return value;
}
@Override
protected boolean isGhost(ListModel<String> value) {
String text = value.getSelectedItem();
return text == null || text.isEmpty();
}
@Override
protected NicLabelEditor createWidget(ListModel<String> value) {
NicLabelEditor editor = new NicLabelEditor();
editor.setUsePatternFly(true);
editor.edit(value);
return editor;
}
@Override
protected void init(final VfsNicLabelModel model) {
super.init(model);
getModel().updateSuggestedLabels();
for (ListModel<String> labelModel : model.getItems()) {
labelModel.getSelectedItemChangedEvent().addListener((ev, sender, args) -> selectedLabelsChanged());
}
}
@Override
protected void onAdd(ListModel<String> value, NicLabelEditor widget) {
super.onAdd(value, widget);
getModel().updateSuggestedLabels();
value.getSelectedItemChangedEvent().addListener((ev, sender, args) -> selectedLabelsChanged());
}
@Override
protected void onRemove(ListModel<String> value, NicLabelEditor widget) {
super.onRemove(value, widget);
getModel().updateSuggestedLabels();
}
private void selectedLabelsChanged() {
ValueChangeEvent.fire(this, null);
getModel().updateSuggestedLabels();
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Set<String>> handler) {
return addHandler(handler, ValueChangeEvent.getType());
}
}