package org.ovirt.engine.core.bll.validator;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.storage.BaseDisk;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class MultipleVmsValidator {
private Iterable<VM> vms;
public MultipleVmsValidator(VM vm) {
this.vms = Collections.singletonList(vm);
}
public MultipleVmsValidator(Iterable<VM> vms) {
this.vms = vms;
}
/**
* @return ValidationResult indicating whether there are plugged disk snapshots
*/
public ValidationResult vmNotHavingPluggedDiskSnapshots(EngineMessage message) {
List<String> vmPluggedDiskSnapshotsInfo = null;
for (VM vm : vms) {
List<DiskImage> pluggedDiskSnapshots =
DbFacade.getInstance().getDiskImageDao().getAttachedDiskSnapshotsToVm(vm.getId(), Boolean.TRUE);
if (!pluggedDiskSnapshots.isEmpty()) {
if (vmPluggedDiskSnapshotsInfo == null) {
vmPluggedDiskSnapshotsInfo = new LinkedList<>();
}
List<String> pluggedDiskSnapshotAliases = new LinkedList<>();
for (BaseDisk disk : pluggedDiskSnapshots) {
pluggedDiskSnapshotAliases.add(disk.getDiskAlias());
}
vmPluggedDiskSnapshotsInfo.add(
String.format("%s / %s",
vm.getName(),
StringUtils.join(pluggedDiskSnapshotAliases, ",")));
}
}
if (vmPluggedDiskSnapshotsInfo != null) {
return new ValidationResult(message,
String.format("$disksInfo %s",
String.format(StringUtils.join(vmPluggedDiskSnapshotsInfo, "%n"))));
}
return ValidationResult.VALID;
}
}