package org.ovirt.engine.ui.uicommonweb.models.datacenters;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.network.NetworkQoS;
import org.ovirt.engine.core.common.queries.ConfigurationValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.validation.AsciiNameValidation;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public abstract class NetworkQoSModel extends BaseNetworkQosModel {
public static final NetworkQoS EMPTY_QOS;
static {
EMPTY_QOS = new NetworkQoS();
EMPTY_QOS.setName(ConstantsManager.getInstance().getConstants().unlimitedQoSTitle());
EMPTY_QOS.setId(Guid.Empty);
}
private final Model sourceModel;
private ListModel<StoragePool> dataCenters;
private EntityModel<String> name;
public NetworkQoSModel(Model sourceModel, StoragePool dataCenter) {
this.sourceModel = sourceModel;
setName(new EntityModel<String>());
setDataCenters(new ListModel<StoragePool>());
getDataCenters().setSelectedItem(dataCenter);
getDataCenters().setIsChangeable(false);
getInbound().getAverage()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSInboundAverageDefaultValue));
getInbound().getPeak()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSInboundPeakDefaultValue));
getInbound().getBurst()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSInboundBurstDefaultValue));
getOutbound().getAverage()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSOutboundAverageDefaultValue));
getOutbound().getPeak()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSOutboundPeakDefaultValue));
getOutbound().getBurst()
.setEntity((Integer) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.QoSOutboundBurstDefaultValue));
addCommands();
}
@Override
public boolean validate() {
super.validate();
getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new AsciiNameValidation() });
setIsValid(getIsValid() && getName().getIsValid());
return getIsValid();
}
protected void addCommands() {
UICommand tempVar2 = UICommand.createDefaultOkUiCommand("OnSave", this); //$NON-NLS-1$
getCommands().add(tempVar2);
UICommand tempVar3 = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$
getCommands().add(tempVar3);
}
public StoragePool getSelectedDc() {
return getDataCenters().getSelectedItem();
}
@Override
public NetworkQoS flush() {
super.flush();
networkQoS.setName(getName().getEntity());
networkQoS.setStoragePoolId(getDataCenters().getSelectedItem().getId());
return networkQoS;
}
protected abstract void executeSave();
protected void cancel() {
sourceModel.setWindow(null);
sourceModel.setConfirmWindow(null);
}
public void onSave() {
if (!validate()) {
return;
}
// Save changes.
flush();
// Execute all the required commands (detach, attach, update) to save the updates
executeSave();
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if ("OnSave".equals(command.getName())) { //$NON-NLS-1$
onSave();
} else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
cancel();
}
}
protected void postSaveAction(boolean succeeded) {
if (succeeded) {
cancel();
}
stopProgress();
}
public ListModel<StoragePool> getDataCenters() {
return dataCenters;
}
public void setDataCenters(ListModel<StoragePool> dataCenters) {
this.dataCenters = dataCenters;
}
public EntityModel<String> getName() {
return name;
}
public void setName(EntityModel<String> name) {
this.name = name;
}
}