package org.ovirt.engine.ui.webadmin.widget.vnicProfile; import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.widget.Align; import org.ovirt.engine.ui.common.widget.PatternFlyCompatible; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.renderer.NameRenderer; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; 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.Widget; public class VnicProfileWidget extends AbstractModelBoundPopupWidget<VnicProfileModel> implements HasValueChangeHandlers<VnicProfileModel>, PatternFlyCompatible { interface Driver extends UiCommonEditorDriver<VnicProfileModel, VnicProfileWidget> { } interface WidgetUiBinder extends UiBinder<Widget, VnicProfileWidget> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<VnicProfileWidget> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } @UiField @Path("name.entity") @WithElementId("name") StringEntityModelTextBoxOnlyEditor nameEditor; @UiField(provided = true) @Path(value = "publicUse.entity") public EntityModelCheckBoxEditor publicUseEditor; @UiField(provided = true) public InfoIcon publicInfo; @UiField(provided = true) @Path(value = "networkQoS.selectedItem") @WithElementId("networkQoS") public ListModelListBoxEditor<NetworkQoS> networkQoSEditor; private final Driver driver = GWT.create(Driver.class); private static final ApplicationTemplates templates = AssetProvider.getTemplates(); private static final ApplicationConstants constants = AssetProvider.getConstants(); public VnicProfileWidget() { publicUseEditor = new EntityModelCheckBoxEditor(Align.RIGHT); publicInfo = new InfoIcon(templates.italicText(constants.profilePublicUseLabel())); networkQoSEditor = new ListModelListBoxEditor<>(new NameRenderer<NetworkQoS>()); networkQoSEditor.hideLabel(); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); ViewIdHandler.idHandler.generateAndSetIds(this); driver.initialize(this); } @Override public void edit(final VnicProfileModel model) { driver.edit(model); publicInfo.setVisible(model.getPublicUse().getIsAvailable()); nameEditor.fireValueChangeOnKeyDown(); model.getName().getEntityChangedEvent().addListener((ev, sender, args) -> ValueChangeEvent.fire(VnicProfileWidget.this, model)); } @Override public VnicProfileModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler<VnicProfileModel> handler) { return addHandler(handler, ValueChangeEvent.getType()); } @Override public void setUsePatternFly(boolean use) { publicUseEditor.setUsePatternFly(use); networkQoSEditor.setUsePatternFly(use); nameEditor.setUsePatternFly(use); } }