package org.ovirt.engine.ui.uicommonweb.models.datacenters; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.HasValidatedTabs; 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.LengthValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicommonweb.validation.SpecialAsciiI18NOrNoneValidation; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; public class DataCenterModel extends Model implements HasValidatedTabs { private StoragePool privateEntity; public StoragePool getEntity() { return privateEntity; } public void setEntity(StoragePool value) { privateEntity = value; } private Guid privateDataCenterId; public Guid getDataCenterId() { return privateDataCenterId; } public void setDataCenterId(Guid value) { privateDataCenterId = value; } private boolean privateIsNew; public boolean getIsNew() { return privateIsNew; } public void setIsNew(boolean value) { privateIsNew = value; } private String privateOriginalName; public String getOriginalName() { return privateOriginalName; } public void setOriginalName(String value) { privateOriginalName = value; } private EntityModel<String> privateName; public EntityModel<String> getName() { return privateName; } public void setName(EntityModel<String> value) { privateName = value; } private EntityModel<String> privateDescription; public EntityModel<String> getDescription() { return privateDescription; } public void setDescription(EntityModel<String> value) { privateDescription = value; } private EntityModel<String> privateComment; public EntityModel<String> getComment() { return privateComment; } public void setComment(EntityModel<String> value) { privateComment = value; } private ListModel<Boolean> storagePoolType; public ListModel<Boolean> getStoragePoolType() { return storagePoolType; } public void setStoragePoolType(ListModel<Boolean> value) { this.storagePoolType = value; } private ListModel<Version> privateVersion; public ListModel<Version> getVersion() { return privateVersion; } public void setVersion(ListModel<Version> value) { privateVersion = value; } private int privateMaxNameLength; public int getMaxNameLength() { return privateMaxNameLength; } public void setMaxNameLength(int value) { privateMaxNameLength = value; } ListModel<QuotaEnforcementTypeEnum> quotaEnforceTypeListModel; public ListModel<QuotaEnforcementTypeEnum> getQuotaEnforceTypeListModel() { return quotaEnforceTypeListModel; } public void setQuotaEnforceTypeListModel(ListModel<QuotaEnforcementTypeEnum> quotaEnforceTypeListModel) { this.quotaEnforceTypeListModel = quotaEnforceTypeListModel; } public DataCenterModel() { setName(new EntityModel<String>()); setDescription(new EntityModel<String>()); setComment(new EntityModel<String>()); setVersion(new ListModel<Version>()); setStoragePoolType(new ListModel<Boolean>()); getStoragePoolType().getSelectedItemChangedEvent().addListener(this); getStoragePoolType().setItems(Arrays.asList(Boolean.FALSE, Boolean.TRUE)); setQuotaEnforceTypeListModel(new ListModel<QuotaEnforcementTypeEnum>()); List<QuotaEnforcementTypeEnum> list = AsyncDataProvider.getInstance().getQuotaEnforcmentTypes(); getQuotaEnforceTypeListModel().setItems(list); getQuotaEnforceTypeListModel().setSelectedItem(list.get(0)); setMaxNameLength(1); AsyncDataProvider.getInstance().getDataCenterMaxNameLength(new AsyncQuery<>(result -> setMaxNameLength(result))); } @Override public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.matchesDefinition(ListModel.selectedItemChangedEventDefinition) && sender == getStoragePoolType()) { storagePoolType_SelectedItemChanged(); } } private void storagePoolType_SelectedItemChanged() { AsyncDataProvider.getInstance().getDataCenterVersions(new AsyncQuery<>(versions -> { Version selectedVersion = null; if (getVersion().getSelectedItem() != null) { selectedVersion = getVersion().getSelectedItem(); boolean hasSelectedVersion = false; for (Version version : versions) { if (selectedVersion.equals(version)) { selectedVersion = version; hasSelectedVersion = true; break; } } if (!hasSelectedVersion) { selectedVersion = null; } } getVersion().setItems(versions); if (selectedVersion == null) { getVersion().setSelectedItem(versions.stream().max(Comparator.naturalOrder()).orElse(null)); if (getEntity() != null) { initVersion(); } } else { getVersion().setSelectedItem(selectedVersion); } }), getDataCenterId()); } private boolean isVersionInit = false; private void initVersion() { if (!isVersionInit) { isVersionInit = true; for (Version item : getVersion().getItems()) { if (item.equals(getEntity().getCompatibilityVersion())) { getVersion().setSelectedItem(item); break; } } } } public boolean validate() { getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new LengthValidation(40), new LengthValidation(getMaxNameLength()), new AsciiNameValidation() }); getVersion().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getDescription().validateEntity(new IValidation[] { new AsciiOrNoneValidation() }); getComment().validateEntity(new IValidation[] { new SpecialAsciiI18NOrNoneValidation() }); boolean validationResult = getName().getIsValid() && getDescription().getIsValid() && getComment().getIsValid() && getVersion().getIsValid(); return validationResult; } }