Liron Ar has uploaded a new change for review. Change subject: core: move images handling methods to ImagesHandler ......................................................................
core: move images handling methods to ImagesHandler Currently there are images related methods placed in ImportVmCommand that are also being executed from other commands than ImportVm - therefore in this patch those methods are moved to ImagesHandler. Change-Id: Ic548bd5a805c0b7d702c0d363434234f6484fc25 Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java 2 files changed, 67 insertions(+), 67 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/27/15627/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index 97f925a..c5eb912 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -43,6 +43,7 @@ import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.utils.collections.MultiValueMapUtils; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; @@ -544,6 +545,70 @@ } + // the last image in each list is the leaf + public static Map<Guid, List<DiskImage>> getImagesLeaf(List<DiskImage> images) { + Map<Guid, List<DiskImage>> retVal = new HashMap<Guid, List<DiskImage>>(); + for (DiskImage image : images) { + MultiValueMapUtils.addToMap(image.getId(), image, retVal); + } + + for (List<DiskImage> list : retVal.values()) { + sortImageList(list); + } + return retVal; + } + + private static void sortImageList(List<DiskImage> images) { + List<DiskImage> hold = new ArrayList<DiskImage>(); + DiskImage curr = null; + + // find the first image + for (int i = 0; i < images.size(); i++) { + int pos = getFirstImage(images, images.get(i)); + if (pos == -1) { + curr = images.get(i); + hold.add(images.get(i)); + images.remove(images.get(i)); + break; + } + } + + while (images.size() > 0) { + int pos = getNextImage(images, curr); + if (pos == -1) { + log.error("Image list error in SortImageList"); + break; + } + curr = images.get(pos); + hold.add(images.get(pos)); + images.remove(images.get(pos)); + } + + for (DiskImage image : hold) { + images.add(image); + } + } + + // function return the index of image that is its child + private static int getNextImage(List<DiskImage> images, DiskImage curr) { + for (int i = 0; i < images.size(); i++) { + if (images.get(i).getParentId().equals(curr.getImageId())) { + return i; + } + } + return -1; + } + + // function return the index of the image that has no parent + private static int getFirstImage(List<DiskImage> images, DiskImage curr) { + for (int i = 0; i < images.size(); i++) { + if (curr.getParentId().equals(images.get(i).getImageId())) { + return i; + } + } + return -1; + } + public static void removeImage(DiskImage diskImage) { DbFacade.getInstance() .getImageStorageDomainMapDao() diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java index b44c18b..d5b43a2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java @@ -69,7 +69,6 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; -import org.ovirt.engine.core.utils.collections.MultiValueMapUtils; import org.ovirt.engine.core.utils.linq.Function; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; @@ -256,7 +255,7 @@ image.setStorageIds(new ArrayList<Guid>(Arrays.asList(getParameters().getSourceDomainId()))); } - Map<Guid, List<DiskImage>> images = getImagesLeaf(getVm().getImages()); + Map<Guid, List<DiskImage>> images = ImagesHandler.getImagesLeaf(getVm().getImages()); for (Map.Entry<Guid, List<DiskImage>> entry : images.entrySet()) { Guid id = entry.getKey(); List<DiskImage> diskList = entry.getValue(); @@ -612,7 +611,7 @@ } protected void addVmImagesAndSnapshots() { - Map<Guid, List<DiskImage>> images = getImagesLeaf(getVm().getImages()); + Map<Guid, List<DiskImage>> images = ImagesHandler.getImagesLeaf(getVm().getImages()); if (getParameters().getCopyCollapse()) { Guid snapshotId = Guid.NewGuid(); @@ -772,70 +771,6 @@ "Active VM snapshot", new Date(), null)); - } - - // the last image in each list is the leaf - public static Map<Guid, List<DiskImage>> getImagesLeaf(List<DiskImage> images) { - Map<Guid, List<DiskImage>> retVal = new HashMap<Guid, List<DiskImage>>(); - for (DiskImage image : images) { - MultiValueMapUtils.addToMap(image.getId(), image, retVal); - } - - for (List<DiskImage> list : retVal.values()) { - sortImageList(list); - } - return retVal; - } - - private static void sortImageList(List<DiskImage> images) { - List<DiskImage> hold = new ArrayList<DiskImage>(); - DiskImage curr = null; - - // find the first image - for (int i = 0; i < images.size(); i++) { - int pos = getFirstImage(images, images.get(i)); - if (pos == -1) { - curr = images.get(i); - hold.add(images.get(i)); - images.remove(images.get(i)); - break; - } - } - - while (images.size() > 0) { - int pos = getNextImage(images, curr); - if (pos == -1) { - log.error("Image list error in SortImageList"); - break; - } - curr = images.get(pos); - hold.add(images.get(pos)); - images.remove(images.get(pos)); - } - - for (DiskImage image : hold) { - images.add(image); - } - } - - // function return the index of the image that has no parent - private static int getFirstImage(List<DiskImage> images, DiskImage curr) { - for (int i = 0; i < images.size(); i++) { - if (curr.getParentId().equals(images.get(i).getImageId())) { - return i; - } - } - return -1; - } - - // function return the index of image that is its child - private static int getNextImage(List<DiskImage> images, DiskImage curr) { - for (int i = 0; i < images.size(); i++) { - if (images.get(i).getParentId().equals(curr.getImageId())) { - return i; - } - } - return -1; } protected void addVmStatic() { -- To view, visit http://gerrit.ovirt.org/15627 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic548bd5a805c0b7d702c0d363434234f6484fc25 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Ar <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
