package org.ovirt.engine.ui.common.widget.profile; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.utils.ElementIdUtils; import org.ovirt.engine.ui.common.widget.label.LabelWithTextTruncation; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType; 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.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Widget; public class ProfileInstanceTypeEditor extends AbstractModelBoundPopupWidget<VnicInstanceType> implements HasValueChangeHandlers<VnicInstanceType>, HasElementId { interface Driver extends UiCommonEditorDriver<VnicInstanceType, ProfileInstanceTypeEditor> { } private final Driver driver = GWT.create(Driver.class); interface WidgetUiBinder extends UiBinder<Widget, ProfileInstanceTypeEditor> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } interface Style extends CssResource { String contentStyle(); String noDisplay(); } @UiField @Path(value = "networkInterface.name") LabelWithTextTruncation vnicLabel; @UiField @Path(value = "selectedItem") ProfileEditor profileEditor; @UiField Style style; private String elementId; public ProfileInstanceTypeEditor() { initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); driver.initialize(this); } @Override public void setElementId(String elementId) { this.elementId = elementId; } @Override public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<VnicInstanceType> handler) { return addHandler(handler, ValueChangeEvent.getType()); } @Override public void edit(final VnicInstanceType model) { driver.edit(model); profileEditor.hideLabel(); profileEditor.addContentWidgetContainerStyleName(style.contentStyle()); profileEditor.setElementId(ElementIdUtils.createElementId(elementId, model.getNetworkInterface().getName())); syncSelectedItemWithNetworkInterface(model); model.getSelectedItemChangedEvent().addListener((ev, sender, args) -> { syncSelectedItemWithNetworkInterface(model); ValueChangeEvent.fire(ProfileInstanceTypeEditor.this, model); }); } private void syncSelectedItemWithNetworkInterface(final VnicInstanceType model) { final VmNetworkInterface vnic = model.getNetworkInterface(); VnicProfileView profile = model.getSelectedItem(); vnic.setVnicProfileId(profile != null ? profile.getId() : null); vnic.setNetworkName(profile != null ? profile.getNetworkName() : null); } @Override public VnicInstanceType flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } }