package org.ovirt.engine.ui.common.widget.profile; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType; import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstancesModel; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; public class ProfilesInstanceTypeEditor extends AddRemoveRowWidget<VnicInstancesModel, VnicInstanceType, ProfileInstanceTypeEditor> implements HasElementId { interface WidgetUiBinder extends UiBinder<Widget, ProfilesInstanceTypeEditor> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } public interface ProfileWidgetStyle extends WidgetStyle { String mainPanelPadding(); String fullWidth(); } private String elementId = DOM.createUniqueId(); private Collection<VnicProfileView> vnicProfiles; private final List<VmNetworkInterface> vnics; @UiField FlowPanel mainPanel; public ProfilesInstanceTypeEditor() { vnics = new ArrayList<>(); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); } @Override public void setElementId(String elementId) { this.elementId = elementId; } @Override protected void init(VnicInstancesModel model) { vnicProfiles = model.getVnicProfiles().getItems(); if (vnicProfiles == null) { vnicProfiles = new ArrayList<>(); } Iterable<VnicInstanceType> values = model.getItems(); vnics.clear(); if (values != null) { for (VnicInstanceType value : values) { vnics.add(value.getNetworkInterface()); } } super.init(model); } @Override public void setUsePatternFly(boolean use) { super.setUsePatternFly(use); if (use) { mainPanel.removeStyleName(((ProfileWidgetStyle)style).mainPanelPadding()); mainPanel.addStyleName(((ProfileWidgetStyle)style).fullWidth()); } } @Override protected void onRemove(VnicInstanceType value, ProfileInstanceTypeEditor widget) { super.onRemove(value, widget); vnics.remove(value.getNetworkInterface()); } @Ignore @Override protected ProfileInstanceTypeEditor createWidget(VnicInstanceType value) { VnicProfileView profile = value.getSelectedItem(); ProfileInstanceTypeEditor item = new ProfileInstanceTypeEditor(); item.edit(value); item.setElementId(elementId); // small workaround due to UiCommonEditorVisitor changing null selected value value.setSelectedItem(profile); return item; } @Override protected VnicInstanceType createGhostValue() { VmNetworkInterface vnic = new VmNetworkInterface(); vnic.setName(AsyncDataProvider.getInstance().getNewNicName(vnics)); vnics.add(vnic); VnicInstanceType vnicWithProfile = new VnicInstanceType(vnic); vnicWithProfile.setItems(vnicProfiles); return vnicWithProfile; } @Override protected boolean isGhost(VnicInstanceType value) { return value.getSelectedItem() == null; } @Override protected void toggleGhost(VnicInstanceType value, ProfileInstanceTypeEditor widget, boolean becomingGhost) { super.toggleGhost(value, widget, becomingGhost); widget.vnicLabel.setEnabled(!becomingGhost); } }