package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
import org.ovirt.engine.ui.uicommonweb.models.IModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.Event;
import org.ovirt.engine.ui.uicompat.EventArgs;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
public class EditVmInterfaceModel extends BaseEditVmInterfaceModel {
private static final String ON_APPROVE_COMMAND = "ON_APPROVE"; //$NON-NLS-1$
private static final String ABORT_COMMAMD = "ABORT"; //$NON-NLS-1$
private final VM vm;
public static EditVmInterfaceModel createInstance(VmBase vmStatic, VM vm,
Version clusterCompatibilityVersion,
ArrayList<VmNetworkInterface> vmNicList,
VmNetworkInterface nic,
IModel sourceModel) {
EditVmInterfaceModel instance =
new EditVmInterfaceModel(vmStatic, vm, clusterCompatibilityVersion, vmNicList, nic, sourceModel);
instance.init();
return instance;
}
protected EditVmInterfaceModel(VmBase vmStatic, VM vm,
Version clusterCompatibilityVersion,
ArrayList<VmNetworkInterface> vmNicList,
VmNetworkInterface nic,
IModel sourceModel) {
super(vmStatic,
vm.getStatus(),
vm.getStoragePoolId(),
clusterCompatibilityVersion,
vmNicList,
nic,
sourceModel);
this.vm = vm;
}
protected void onPlugChange() {
if (!isVmUp()) {
return;
}
Boolean plug = isPluggedBeforeAndAfterEdit();
if (plug) {
getNicType().setChangeProhibitionReason(ConstantsManager.getInstance()
.getConstants()
.hotTypeUpdateNotPossible());
getEnableMac().setChangeProhibitionReason(ConstantsManager.getInstance()
.getConstants()
.hotMacUpdateNotPossible());
initSelectedType();
getEnableMac().setEntity(false);
initMAC();
}
getNicType().setIsChangeable(!plug);
getEnableMac().setIsChangeable(!plug);
getMAC().setIsChangeable(getEnableMac().getEntity() && !plug);
updateProfileChangability();
updateLinkChangability();
}
@Override
protected void updateLinkChangability() {
super.updateLinkChangability();
if (!getLinked().getIsChangable()) {
return;
}
boolean isPlugged = isPluggedBeforeAndAfterEdit();
if (isVmUp() && isPlugged && selectedNetworkExternal()) {
getLinked().setChangeProhibitionReason(ConstantsManager.getInstance()
.getConstants()
.hotLinkStateUpdateNotSupportedExternalNetworks());
getLinked().setIsChangeable(false);
initLinked();
}
}
@Override
protected void updateProfileChangability() {
super.updateProfileChangability();
if (!getProfile().getIsChangable()) {
return;
}
boolean isPlugged = isPluggedBeforeAndAfterEdit();
if (isVmUp() && isPlugged) {
if (selectedNetworkExternal()) {
getProfile().setChangeProhibitionReason(ConstantsManager.getInstance()
.getConstants()
.hotNetworkUpdateNotSupportedExternalNetworks());
} else {
return;
}
getProfile().setIsChangeable(false);
getProfileBehavior().initSelectedProfile(getProfile(), getNic());
}
}
boolean isVmUp() {
return VMStatus.Up.equals(vm.getStatus());
}
@Override
public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) {
super.eventRaised(ev, sender, args);
if (sender == getPlugged()) {
PropertyChangedEventArgs propArgs = (PropertyChangedEventArgs) args;
if (propArgs.propertyName.equals("Entity")) { //$NON-NLS-1$
onPlugChange();
}
}
}
private boolean isPluggedBeforeAndAfterEdit() {
return getNic().isPlugged() && getPlugged().getEntity();
}
private void confirmSave() {
// Check if the nic was unplugged
if (getNic().isPlugged() && !getPlugged().getEntity()) {
ConfirmationModel model = new ConfirmationModel();
model.setTitle(ConstantsManager.getInstance().getConstants().unplugVnicTitle());
model.setMessage(ConstantsManager.getInstance().getConstants().areYouSureYouWantUnplugVnicMsg());
model.setHashName("unplug_vnic"); //$NON-NLS-1$
getSourceModel().setConfirmWindow(model);
UICommand approveCommand = UICommand.createDefaultOkUiCommand(ON_APPROVE_COMMAND, this);
model.getCommands().add(approveCommand);
UICommand cancel = UICommand.createCancelUiCommand(ABORT_COMMAMD, this); //$NON-NLS-1$
model.getCommands().add(cancel);
} else {
onSave();
}
}
private void abort() {
getSourceModel().setConfirmWindow(null);
}
@Override
public void executeCommand(UICommand command) {
if (ON_SAVE_COMMAND.equals(command.getName())) {
confirmSave();
} else if (ON_APPROVE_COMMAND.equals(command.getName())) {
abort();
onSave();
} else if (ABORT_COMMAMD.equals(command.getName())) {
abort();
} else {
super.executeCommand(command);
}
}
}