package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.Collections; import org.ovirt.engine.core.common.action.LibvirtSecretParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.businessentities.storage.LibvirtSecret; import org.ovirt.engine.core.common.businessentities.storage.LibvirtSecretUsageType; import org.ovirt.engine.core.common.utils.ValidationUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.Linq; 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.validation.GuidValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicommonweb.validation.RegexValidation; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.external.StringUtils; public class LibvirtSecretModel extends EntityModel<LibvirtSecret> { private EntityModel<String> uuid; private EntityModel<String> value; private ListModel<LibvirtSecretUsageType> usageType; private EntityModel<String> description; private EntityModel<String> providerId; public LibvirtSecretModel() { setUuid(new EntityModel<String>()); setValue(new EntityModel<String>()); setUsageType(new ListModel<LibvirtSecretUsageType>()); setDescription(new EntityModel<String>()); setProviderId(new EntityModel<String>()); ArrayList<LibvirtSecretUsageType> libvirtSecretUsageTypeList = AsyncDataProvider.getInstance().getLibvirtSecretUsageTypeList(); getUsageType().setItems(libvirtSecretUsageTypeList, Linq.firstOrNull(libvirtSecretUsageTypeList)); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if ("OnSave".equals(command.getName())) { //$NON-NLS-1$ onSave(); } } private void onSave() { if (!validate()) { return; } VdcActionType actionType = isNew() ? VdcActionType.AddLibvirtSecret : VdcActionType.UpdateLibvirtSecret; flush(); Frontend.getInstance().runAction(actionType, new LibvirtSecretParameters(getEntity()), result -> { VdcReturnValueBase res = result.getReturnValue(); if (res.getSucceeded()) { getCancelCommand().execute(); } }, this); } public boolean validate() { getUsageType().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getUuid().validateEntity(new IValidation[] { new NotEmptyValidation(), new GuidValidation() }); ArrayList<IValidation> valueValidations = new ArrayList<>( Collections.<IValidation>singletonList(new RegexValidation(ValidationUtils.BASE_64_PATTERN, ConstantsManager.getInstance().getConstants().secretValueMustBeInBase64()))); if (isNew()) { valueValidations.add(new NotEmptyValidation()); getValue().validateEntity(valueValidations.toArray(new IValidation[valueValidations.size()])); } return getUsageType().getIsValid() && getUuid().getIsValid() && getValue().getIsValid(); } private void flush() { LibvirtSecret secret = isNew() ? new LibvirtSecret() : getEntity(); secret.setUsageType(getUsageType().getSelectedItem()); secret.setDescription(getDescription().getEntity()); secret.setProviderId(Guid.createGuidFromString(getProviderId().getEntity())); secret.setId(Guid.createGuidFromString(uuid.getEntity())); if (StringUtils.isNotEmpty(getValue().getEntity())) { secret.setValue(getValue().getEntity()); } setEntity(secret); } public void edit(LibvirtSecret secret) { setEntity(secret); getUsageType().setSelectedItem(secret.getUsageType()); getUuid().setEntity(secret.getId().toString()); getDescription().setEntity(secret.getDescription()); } private boolean isNew() { return getEntity() == null; } public EntityModel<String> getUuid() { return uuid; } public void setUuid(EntityModel<String> uuid) { this.uuid = uuid; } public EntityModel<String> getValue() { return value; } public void setValue(EntityModel<String> value) { this.value = value; } public ListModel<LibvirtSecretUsageType> getUsageType() { return usageType; } public void setUsageType(ListModel<LibvirtSecretUsageType> usageType) { this.usageType = usageType; } public EntityModel<String> getDescription() { return description; } public void setDescription(EntityModel<String> description) { this.description = description; } public EntityModel<String> getProviderId() { return providerId; } public void setProviderId(EntityModel<String> providerId) { this.providerId = providerId; } }