package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos; import org.ovirt.engine.core.common.action.QosParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; 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.AsciiOrNoneValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; public abstract class QosModel<T extends QosBase, P extends QosParametersModel<T>> extends Model { private T qos; private P qosParametersModel; private final Model sourceModel; private ListModel<StoragePool> dataCenters; private EntityModel<String> name; private EntityModel<String> description; protected QosModel(T qos, P qosParametersModel, Model sourceModel, StoragePool dataCenter) { this.sourceModel = sourceModel; setName(new EntityModel<String>()); setDescription(new EntityModel<String>()); setDataCenters(new ListModel<StoragePool>()); getDataCenters().setSelectedItem(dataCenter); getDataCenters().setIsChangeable(false); setTitle(getTitle()); setHelpTag(getHelpTag()); setHashName(getHashName()); addCommands(); init(qos, qosParametersModel); } private void init(T qos, P qosParametersModel) { setQos(qos); getName().setEntity(qos.getName()); getDescription().setEntity(qos.getDescription()); setQosParametersModel(qosParametersModel); getQosParametersModel().init(qos); } public boolean validate() { getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new AsciiNameValidation() }); getDescription().validateEntity(new IValidation[] { new AsciiOrNoneValidation() }); getQosParametersModel().validate(); setIsValid(getName().getIsValid() && getDescription().getIsValid() && getQosParametersModel().getIsValid()); return getIsValid(); } protected void addCommands() { getCommands().add(UICommand.createDefaultOkUiCommand("OnSave", this)); //$NON-NLS-1$ getCommands().add(UICommand.createCancelUiCommand("Cancel", this)); //$NON-NLS-1$ } public StoragePool getSelectedDc() { return getDataCenters().getSelectedItem(); } public T flush() { getQos().setName(getName().getEntity()); getQos().setDescription(getDescription().getEntity()); getQos().setStoragePoolId(getDataCenters().getSelectedItem().getId()); getQosParametersModel().flush(getQos()); return getQos(); } protected void executeSave() { final QosParametersBase<T> parameters = getParameters(); parameters.setQos(getQos()); Frontend.getInstance().runAction(getVdcAction(), parameters, result -> { VdcReturnValueBase retVal = result.getReturnValue(); boolean succeeded = false; if (retVal != null && retVal.getSucceeded()) { succeeded = true; getQos().setId((Guid) retVal.getActionReturnValue()); } postSaveAction(succeeded); }); } protected abstract VdcActionType getVdcAction(); protected abstract QosParametersBase<T> getParameters(); @Override public abstract String getTitle(); public abstract HelpTag getHelpTag(); @Override public abstract String getHashName(); 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 T getQos() { return qos; } public void setQos(T qos) { this.qos = qos; } 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; } public EntityModel<String> getDescription() { return description; } public void setDescription(EntityModel<String> description) { this.description = description; } public P getQosParametersModel() { return qosParametersModel; } public void setQosParametersModel(P qosParametersModel) { this.qosParametersModel = qosParametersModel; } }