package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.storage.Disk;
import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.UIMessages;
import org.ovirt.engine.ui.uicompat.external.StringUtils;
public class VmModelHelper {
public static enum WarningType {
VM_EXPORT,
VM_SNAPSHOT,
VM_TEMPLATE
}
public static void sendWarningForNonExportableDisks(Model model, List<Disk> vmDisks, WarningType warningType) {
final ArrayList<Disk> sharedImageDisks = new ArrayList<>();
final ArrayList<Disk> directLunDisks = new ArrayList<>();
final ArrayList<Disk> snapshotDisks = new ArrayList<>();
for (Disk disk : vmDisks) {
if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
if (disk.isShareable()) {
sharedImageDisks.add(disk);
} else if (disk.isDiskSnapshot()) {
snapshotDisks.add(disk);
}
} else if (disk.getDiskStorageType() == DiskStorageType.LUN) {
directLunDisks.add(disk);
}
}
final UIMessages messages = ConstantsManager.getInstance().getMessages();
// check if VM provides any disk for the export
if (vmDisks.size() - (sharedImageDisks.size() + directLunDisks.size() + snapshotDisks.size()) == 0) {
switch (warningType) {
case VM_EXPORT:
model.setMessage(messages.noExportableDisksFoundForTheExport());
break;
case VM_SNAPSHOT:
model.setMessage(messages.noExportableDisksFoundForTheSnapshot());
break;
case VM_TEMPLATE:
model.setMessage(messages.noExportableDisksFoundForTheTemplate());
break;
}
}
String diskLabels = getDiskLabelList(sharedImageDisks);
if (diskLabels != null) {
switch (warningType) {
case VM_EXPORT:
model.setMessage(messages.sharedDisksWillNotBePartOfTheExport(diskLabels));
break;
case VM_SNAPSHOT:
model.setMessage(messages.sharedDisksWillNotBePartOfTheSnapshot(diskLabels));
break;
case VM_TEMPLATE:
model.setMessage(messages.sharedDisksWillNotBePartOfTheTemplate(diskLabels));
break;
}
}
diskLabels = getDiskLabelList(directLunDisks);
if (diskLabels != null) {
switch (warningType) {
case VM_EXPORT:
model.setMessage(messages.directLUNDisksWillNotBePartOfTheExport(diskLabels));
break;
case VM_SNAPSHOT:
model.setMessage(messages.directLUNDisksWillNotBePartOfTheSnapshot(diskLabels));
break;
case VM_TEMPLATE:
model.setMessage(messages.directLUNDisksWillNotBePartOfTheTemplate(diskLabels));
break;
}
}
diskLabels = getDiskLabelList(snapshotDisks);
if (diskLabels != null) {
switch (warningType) {
case VM_EXPORT:
model.setMessage(messages.snapshotDisksWillNotBePartOfTheExport(diskLabels));
break;
case VM_SNAPSHOT:
model.setMessage(messages.snapshotDisksWillNotBePartOfTheSnapshot(diskLabels));
break;
case VM_TEMPLATE:
model.setMessage(messages.snapshotDisksWillNotBePartOfTheTemplate(diskLabels));
break;
}
}
}
public static String getDiskLabelList(ArrayList<Disk> disks) {
if (disks.isEmpty()) {
return null;
}
final List<String> labels = new ArrayList<>();
for (Disk disk : disks) {
labels.add(disk.getDiskAlias());
}
return StringUtils.join(labels, ", "); //$NON-NLS-1$
}
}