package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; 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; public class DiskModel extends Model { private DiskVmElement diskVmElement; private Disk disk; private VM vm; private EntityModel<Integer> size; private EntityModel<String> alias; private EntityModel<String> description; private EntityModel<String> sourceStorageDomainName; private EntityModel<Boolean> isBootable; private EntityModel<Boolean> passDiscard; private ListModel<VolumeType> volumeType; private ListModel<DiskInterface> diskInterface; private boolean readOnly; private ListModel<StorageDomain> sourceStorageDomain; private ListModel<StorageDomain> storageDomain; private ListModel<DiskProfile> diskProfile; private ListModel<Quota> quota; private ListModel<VolumeFormat> volumeFormat; private boolean pluggedToRunningVm; public Disk getDisk() { return disk; } public void setDisk(Disk disk) { this.disk = disk; } public VM getVm() { return vm; } public void setVm(VM vm) { this.vm = vm; } public EntityModel<Integer> getSize() { return size; } public void setSize(EntityModel<Integer> size) { this.size = size; } public EntityModel<String> getAlias() { return alias; } public void setAlias(EntityModel<String> alias) { this.alias = alias; } public EntityModel<String> getDescription() { return description; } public void setDescription(EntityModel<String> description) { this.description = description; } public EntityModel<String> getSourceStorageDomainName() { return sourceStorageDomainName; } public void setSourceStorageDomainName(EntityModel<String> sourceStorageDomainName) { this.sourceStorageDomainName = sourceStorageDomainName; } public ListModel<VolumeType> getVolumeType() { return volumeType; } public void setVolumeType(ListModel<VolumeType> volumeType) { this.volumeType = volumeType; } public ListModel<VolumeFormat> getVolumeFormat() { return volumeFormat; } public void setVolumeFormat(ListModel<VolumeFormat> volumeFormat) { this.volumeFormat = volumeFormat; } public ListModel<DiskInterface> getDiskInterface() { return diskInterface; } public void setDiskInterface(ListModel<DiskInterface> diskInterface) { this.diskInterface = diskInterface; } public boolean isReadOnly() { return readOnly; } public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } public EntityModel<Boolean> getIsBootable() { return isBootable; } public void setIsBootable(EntityModel<Boolean> isBootable) { this.isBootable = isBootable; } public EntityModel<Boolean> getPassDiscard() { return passDiscard; } public void setPassDiscard(EntityModel<Boolean> passDiscard) { this.passDiscard = passDiscard; } public ListModel<StorageDomain> getSourceStorageDomain() { return sourceStorageDomain; } public void setSourceStorageDomain(ListModel<StorageDomain> sourceStorageDomain) { this.sourceStorageDomain = sourceStorageDomain; } public ListModel<StorageDomain> getStorageDomain() { return storageDomain; } public void setStorageDomain(ListModel<StorageDomain> storageDomain) { this.storageDomain = storageDomain; } public ListModel<DiskProfile> getDiskProfile() { return diskProfile; } public void setDiskProfile(ListModel<DiskProfile> diskProfile) { this.diskProfile = diskProfile; } public ListModel<Quota> getQuota() { return quota; } public void setQuota(ListModel<Quota> quota) { this.quota = quota; } public boolean isPluggedToRunningVm() { return pluggedToRunningVm; } public void setPluggedToRunningVm(boolean pluggedToRunningVm) { this.pluggedToRunningVm = pluggedToRunningVm; } protected DiskVmElement getDiskVmElement() { return diskVmElement; } protected void setDiskVmElement(DiskVmElement diskVmElement) { this.diskVmElement = diskVmElement; } public DiskModel() { setSize(new EntityModel<Integer>()); setAlias(new EntityModel<String>()); setDescription(new EntityModel<String>()); setSourceStorageDomainName(new EntityModel<String>()); setSourceStorageDomain(new ListModel<StorageDomain>()); setDiskInterface(new ListModel<DiskInterface>()); setStorageDomain(new ListModel<StorageDomain>()); setDiskProfile(new ListModel<DiskProfile>()); setIsBootable(new EntityModel<Boolean>()); getIsBootable().setEntity(false); setPassDiscard(new EntityModel<Boolean>()); getPassDiscard().setEntity(false); getPassDiscard().setIsAvailable(false); getPassDiscard().setIsChangeable(false); setQuota(new ListModel<Quota>()); getQuota().setIsAvailable(false); setVolumeType(new ListModel<VolumeType>()); getVolumeType().setItems(AsyncDataProvider.getInstance().getVolumeTypeList()); setVolumeFormat(new ListModel<VolumeFormat>()); getVolumeFormat().setItems(AsyncDataProvider.getInstance().getVolumeFormats()); getVolumeFormat().setIsAvailable(false); } public static DiskModel diskToModel(Disk disk) { DiskModel diskModel = new DiskModel(); diskModel.getAlias().setEntity(disk.getDiskAlias()); if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { DiskImage diskImage = (DiskImage) disk; EntityModel<Integer> sizeEntity = new EntityModel<>(); sizeEntity.setEntity((int) diskImage.getSizeInGigabytes()); diskModel.setSize(sizeEntity); ListModel<VolumeType> volumeList = new ListModel<>(); volumeList.setItems(diskImage.getVolumeType() == VolumeType.Preallocated ? new ArrayList<>(Arrays.asList(new VolumeType[]{VolumeType.Preallocated})) : AsyncDataProvider.getInstance().getVolumeTypeList()); volumeList.setSelectedItem(diskImage.getVolumeType()); diskModel.setVolumeType(volumeList); } diskModel.setDisk(disk); return diskModel; } public static List<DiskModel> disksToDiskModelList(List<Disk> disks) { return disks.stream().map(DiskModel::diskToModel).collect(Collectors.toList()); } }