package org.ovirt.engine.core.bll.architecture;
import java.util.List;
import org.ovirt.engine.core.bll.VmCommand;
import org.ovirt.engine.core.common.businessentities.storage.DiskInterface;
import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.archstrategy.ArchCommand;
public class HasMaximumNumberOfDisks implements ArchCommand {
private boolean hasMaximum;
private List<DiskVmElement> allDiskVmElements;
public HasMaximumNumberOfDisks(Guid vmId) {
allDiskVmElements = DbFacade.getInstance().getDiskVmElementDao().getAllForVm(vmId);
}
private int countDisks(final DiskInterface diskType) {
return (int) allDiskVmElements.stream().filter(a -> a.getDiskInterface() == diskType).count();
}
@Override
public void runForX86_64() {
hasMaximum = VmCommand.MAX_IDE_SLOTS == countDisks(DiskInterface.IDE);
}
@Override
public void runForPPC64() {
hasMaximum = VmCommand.MAX_SPAPR_SCSI_DISKS == countDisks(DiskInterface.SPAPR_VSCSI);
}
public boolean returnValue() {
return hasMaximum;
}
}