package org.ovirt.engine.ui.uicommonweb.models.datacenters;
import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class EditNetworkModel extends NetworkModel {
private final boolean originallyVmNetwork;
private boolean management;
public EditNetworkModel(Network network, ListModel sourceListModel) {
super(network, sourceListModel);
originallyVmNetwork = network.isVmNetwork();
getDataCenters().setIsChangeable(false);
init();
initManagement();
}
private void init() {
setTitle(ConstantsManager.getInstance().getConstants().editLogicalNetworkTitle());
setHelpTag(HelpTag.edit_logical_network);
setHashName("edit_logical_network"); //$NON-NLS-1$
getName().setEntity(getNetwork().getName());
getDescription().setEntity(getNetwork().getDescription());
getComment().setEntity(getNetwork().getComment());
getIsStpEnabled().setEntity(getNetwork().getStp());
getHasVLanTag().setEntity(getNetwork().getVlanId() != null);
getVLanTag().setEntity(getNetwork().getVlanId());
initMtu();
initIsVm();
getExport().setEntity(getNetwork().isExternal());
getExport().setIsChangeable(false);
getExternalProviders().setIsChangeable(false);
if (getNetwork().isExternal()) {
getNeutronPhysicalNetwork().setEntity(getNetwork().getLabel());
} else {
getNetworkLabel().setSelectedItem(getNetwork().getLabel());
}
toggleProfilesAvailability();
}
private void initManagement() {
AsyncDataProvider.getInstance().isManagementNetwork(new AsyncQuery<>(returnValue -> management = returnValue), getNetwork().getId());
}
@Override
protected void initIsVm() {
getIsVmNetwork().setEntity(getNetwork().isVmNetwork());
}
@Override
protected void initMtu() {
boolean isCustomMtu = getNetwork().getMtu() != 0;
getMtuSelector().setSelectedItem(isCustomMtu ? MtuSelector.customMtu : MtuSelector.defaultMtu);
getMtu().setEntity(isCustomMtu() ? getNetwork().getMtu() : null);
}
@Override
protected void selectExternalProvider() {
final Network network = getNetwork();
getExternalProviders().setSelectedItem(Linq.firstOrNull(getExternalProviders().getItems(),
new Linq.NetworkSameProviderPredicate(network)));
}
@Override
protected void onExportChanged() {
super.onExportChanged();
if (getExport().getEntity()) {
getHasVLanTag().setIsChangeable(false);
getVLanTag().setIsChangeable(false);
getIsVmNetwork().setIsChangeable(false);
getNetworkLabel().setIsChangeable(false);
getNeutronPhysicalNetwork().setIsChangeable(false);
}
}
@Override
public void executeSave() {
Frontend.getInstance().runAction(VdcActionType.UpdateNetwork,
new AddNetworkStoragePoolParameters(getSelectedDc().getId(), getNetwork()),
result -> {
VdcReturnValueBase retVal = result.getReturnValue();
postSaveAction(null,
retVal != null && retVal.getSucceeded());
},
null);
}
@Override
protected void toggleProfilesAvailability() {
getProfiles().setIsAvailable(getIsVmNetwork().getEntity() && !originallyVmNetwork);
}
@Override
protected boolean isManagement() {
return management;
}
}