package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.models.vms.ProfileBehavior; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType; public abstract class VmInstanceTypeManager extends InstanceTypeManager { public VmInstanceTypeManager(UnitVmModel model) { super(model); } @Override protected void doUpdateManagedFieldsFrom(VmBase vmBase) { super.doUpdateManagedFieldsFrom(vmBase); if (vmBase == null) { return; } updateNetworkInterfacesByTemplate(vmBase); } public void updateNetworkInterfacesByTemplate(VmBase vmBase) { VdcQueryType queryType = (vmBase instanceof VmTemplate) ? VdcQueryType.GetTemplateInterfacesByTemplateId : VdcQueryType.GetVmInterfacesByVmId; AsyncQuery<VdcQueryReturnValue> query = new AsyncQuery<>(returnValue -> { if (returnValue == null) { return; } List<VmNetworkInterface> nics = returnValue.getReturnValue(); updateNetworkInterfaces(getNetworkProfileBehavior(), nics); }); Frontend.getInstance().runQuery(queryType, new IdQueryParameters(vmBase.getId()), query); } private void updateNetworkInterfaces(final ProfileBehavior behavior, final List<VmNetworkInterface> argNics) { AsyncQuery<List<VnicProfileView>> query = new AsyncQuery<>(profiles -> { List<VnicInstanceType> vnicInstanceTypes = new ArrayList<>(); List<VmNetworkInterface> nics = (argNics == null) ? new ArrayList<VmNetworkInterface>() : argNics; for (VmNetworkInterface nic : nics) { final VnicInstanceType vnicInstanceType = new VnicInstanceType(nic); vnicInstanceType.setItems(profiles); behavior.initSelectedProfile(vnicInstanceType, vnicInstanceType.getNetworkInterface()); vnicInstanceTypes.add(vnicInstanceType); } getModel().getNicsWithLogicalNetworks().getVnicProfiles().setItems(profiles); getModel().getNicsWithLogicalNetworks().setItems(vnicInstanceTypes); getModel().getNicsWithLogicalNetworks().setSelectedItem(Linq.firstOrNull(vnicInstanceTypes)); }); behavior.initProfiles(getModel().getSelectedCluster().getId(), getModel().getSelectedDataCenter().getId(), query); } protected abstract ProfileBehavior getNetworkProfileBehavior(); }