package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
import org.ovirt.engine.core.common.action.AddVmInterfaceParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.IModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public abstract class BaseEditVmInterfaceModel extends VmInterfaceModel {
private final VmNetworkInterface nic;
protected BaseEditVmInterfaceModel(VmBase vm,
VMStatus vmStatus,
Guid dcId,
Version clusterCompatibilityVersion,
ArrayList<VmNetworkInterface> vmNicList,
VmNetworkInterface nic,
IModel sourceModel) {
super(vm,
vmStatus,
dcId,
clusterCompatibilityVersion,
vmNicList,
sourceModel,
new EditProfileBehavior());
this.nic = nic;
setTitle(ConstantsManager.getInstance().getConstants().editNetworkInterfaceTitle());
setHelpTag(HelpTag.edit_network_interface_vms);
setHashName("edit_network_interface_vms"); //$NON-NLS-1$
}
protected VmNetworkInterface getNic() {
return nic;
}
@Override
protected void init() {
AsyncDataProvider.getInstance().getNicTypeList(getVm().getOsId(), getClusterCompatibilityVersion(), new AsyncQuery<>(
returnValue -> {
setSupportedVnicTypes(returnValue);
postNicInit();
}));
}
private void postNicInit() {
getName().setEntity(getNic().getName());
initMAC();
initLinked();
initProfiles();
// Plug should be the last one updated, cause it controls the changeability of the other editor
getPlugged().setEntity(getNic().isPlugged());
if (!allowPlug()) {
getPlugged().setChangeProhibitionReason(ConstantsManager.getInstance()
.getMessages()
.nicHotPlugNotSupported(getClusterCompatibilityVersion().toString()));
}
getPlugged().setIsChangeable(allowPlug());
initCommands();
}
@Override
protected VmNetworkInterface createBaseNic() {
return new VmNetworkInterface(getNic());
}
@Override
protected VdcActionType getVdcActionType() {
return VdcActionType.UpdateVmInterface;
}
@Override
protected String getDefaultMacAddress() {
return getNic().getMacAddress();
}
@Override
protected void initSelectedType() {
VmInterfaceType selectedNicType = VmInterfaceType.forValue(getNic().getType());
if (selectedNicType == null || !getSupportedVnicTypes().contains(selectedNicType)) {
selectedNicType = getDefaultNicTypeByProfile();
}
if (getNicType().getItems() == null) {
getNicType().setItems(getSupportedVnicTypes(), selectedNicType);
} else {
getNicType().setSelectedItem(selectedNicType);
}
}
@Override
protected void initMAC() {
getMAC().setIsChangeable(false);
getMAC().setEntity(getNic().getMacAddress());
}
@Override
protected void initLinked() {
getLinked().setEntity(getNic().isLinked());
}
@Override
protected VdcActionParametersBase createVdcActionParameters(VmNetworkInterface nicToSave) {
return new AddVmInterfaceParameters(getVm().getId(), nicToSave);
}
}