package org.ovirt.engine.ui.uicommonweb.models.profiles; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.action.ProfileParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.BusinessEntity; import org.ovirt.engine.core.common.businessentities.profiles.ProfileBase; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.QosType; import org.ovirt.engine.core.common.queries.QosQueryParameterBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; 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.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.IModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.validation.AsciiOrNoneValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicommonweb.validation.SpecialAsciiI18NOrNoneValidation; public abstract class ProfileBaseModel<P extends ProfileBase, Q extends QosBase, R extends BusinessEntity<Guid>> extends Model { private EntityModel<String> name; private EntityModel<String> description; private final IModel sourceModel; private ListModel<R> parentListModel; private ListModel<Q> qos; private P profile; private final Guid defaultQosId; private final VdcActionType vdcActionType; 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 ListModel<R> getParentListModel() { return parentListModel; } public void setParentListModel(ListModel<R> parentListModel) { this.parentListModel = parentListModel; } public ListModel<Q> getQos() { return qos; } public void setQos(ListModel<Q> qos) { this.qos = qos; } public P getProfile() { return profile; } public void setProfile(P profile) { this.profile = profile; } public IModel getSourceModel() { return sourceModel; } public Guid getDefaultQosId() { return defaultQosId; } public ProfileBaseModel(IModel sourceModel, Guid dcId, Guid defaultQosId, VdcActionType vdcActionType) { this.sourceModel = sourceModel; this.defaultQosId = defaultQosId; this.vdcActionType = vdcActionType; setName(new EntityModel<String>()); setDescription(new EntityModel<String>()); setParentListModel(new ListModel<R>()); setQos(new ListModel<Q>()); initQosList(dcId); initCommands(); } protected void initCommands() { UICommand okCommand = UICommand.createDefaultOkUiCommand("OnSave", this); //$NON-NLS-1$ getCommands().add(okCommand); UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$ getCommands().add(cancelCommand); } private void onSave() { if (getProgress() != null) { return; } if (!validate()) { return; } // Save changes. flush(); startProgress(); Frontend.getInstance().runAction(vdcActionType, getParameters(), result -> { stopProgress(); cancel(); }, this); } protected abstract ProfileParametersBase<P> getParameters(); public abstract void flush(); private void cancel() { sourceModel.setWindow(null); } @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(); } } private void initQosList(Guid dataCenterId) { if (dataCenterId == null) { return; } Frontend.getInstance().runQuery(VdcQueryType.GetAllQosByStoragePoolIdAndType, new QosQueryParameterBase(dataCenterId, getQosType()), new AsyncQuery<VdcQueryReturnValue>(returnValue -> postInitQosList(returnValue == null ? new ArrayList<Q>() : (List<Q>) returnValue.getReturnValue()))); } protected abstract QosType getQosType(); protected abstract void postInitQosList(List<Q> list); public boolean validate() { getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new SpecialAsciiI18NOrNoneValidation() }); getDescription().validateEntity(new IValidation[] { new AsciiOrNoneValidation() }); return getName().getIsValid(); } }