@Override public int compare(Disk o1, Disk o2) { Boolean boot1 = o1.isBoot(); Boolean boot2 = o2.isBoot(); int bootResult = boot1.compareTo(boot2); if (bootResult == 0 && o1.isBoot()) { return Boolean.compare(o2.isDiskSnapshot(), o1.isDiskSnapshot()); } return bootResult; }
private boolean checkCanPerformRegularUpdate() { boolean retValue = true; if (_oldDisk.getDiskInterface() != getParameters().getDiskInfo().getDiskInterface()) { List<VmNetworkInterface> allVmInterfaces = DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(getVmId()); List<Disk> allVmDisks = getDiskDao().getAllForVm(getVmId()); allVmDisks.removeAll( LinqUtils.filter( allVmDisks, new Predicate<Disk>() { @Override public boolean eval(Disk o) { return o.getId().equals(_oldDisk.getId()); } })); allVmDisks.add(getParameters().getDiskInfo()); if (!checkPciAndIdeLimit( getVm().getnum_of_monitors(), allVmInterfaces, allVmDisks, getReturnValue().getCanDoActionMessages())) { retValue = false; } } // Validate update boot disk. if (retValue && getParameters().getDiskInfo().isBoot()) { VmHandler.updateDisksFromDb(getVm()); for (Disk disk : getVm().getDiskMap().values()) { if (disk.isBoot() && !disk.getId().equals(_oldDisk.getId())) { retValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_BOOT_IN_USE); getReturnValue() .getCanDoActionMessages() .add(String.format("$DiskName %1$s", disk.getDiskAlias())); break; } } } // Set disk alias name in the disk retrieved from the parameters. ImagesHandler.setDiskAlias(getParameters().getDiskInfo(), getVm()); return retValue && validateShareableDisk(); }