Skip to content

Commit

Permalink
restapi: incorrect href for parent href
Browse files Browse the repository at this point in the history
If User send REST API request  for ovirt-engine/api/disks/{diskid}/disksnapshots?include_active&include_template he will get this  incorrect href back <parent href="/ovirt-engine/api/disks/{diskid}" id="{parentid}"/>.
Now it will get correct output that will look like this <parent href="/ovirt-engine/api/disks/{diskid}/disksnapshots/{parentid}" id="{parentid}"/>.

Bug-Url: https://bugzilla.redhat.com/2013697
Signed-off-by: Artiom Divak <adivak@redhat.com>
  • Loading branch information
ArtiomDivak committed Aug 4, 2022
1 parent 995f4a0 commit a21f89a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package org.ovirt.engine.api.restapi.resource;

import java.util.List;

import javax.ws.rs.core.Response;

import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.DiskSnapshot;
import org.ovirt.engine.api.resource.DiskSnapshotResource;
import org.ovirt.engine.core.common.action.ActionType;
import org.ovirt.engine.core.common.action.RemoveDiskSnapshotsParameters;
import org.ovirt.engine.core.common.queries.DiskSnapshotsQueryParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.QueryType;
import org.ovirt.engine.core.compat.Guid;
Expand All @@ -26,19 +29,31 @@ protected BackendDiskSnapshotResource(String id, BackendDiskSnapshotsResource pa

@Override
public DiskSnapshot get() {
List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities =
getBackendCollection(org.ovirt.engine.core.common.businessentities.storage.Disk.class, QueryType.GetAllDiskSnapshots,
new DiskSnapshotsQueryParameters(diskId, true, true));
DiskSnapshot diskSnapshot = performGet(QueryType.GetDiskSnapshotByImageId,
new IdQueryParameters(guid), Disk.class);
diskSnapshot.setDisk(new Disk());
diskSnapshot.getDisk().setId(diskId.toString());
diskSnapshot.getDisk().setHref(backendDiskSnapshotsResource.buildParentHref(diskId.toString(), false));
diskSnapshot.setHref(backendDiskSnapshotsResource.buildHref(diskId.toString(), diskSnapshot.getId().toString()));
if (diskSnapshot.getParent() != null) {
diskSnapshot.getParent().setHref(backendDiskSnapshotsResource.buildHref(diskId.toString(),
org.ovirt.engine.core.common.businessentities.storage.Disk
parentDisk = getDiskIdFromDiskSnapshotId(entities, diskSnapshot);
diskSnapshot.getParent().setHref(backendDiskSnapshotsResource.buildHref(parentDisk.getId().toString(),
diskSnapshot.getParent().getId()));
}
return diskSnapshot;
}

private org.ovirt.engine.core.common.businessentities.storage.Disk getDiskIdFromDiskSnapshotId
(List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities, DiskSnapshot diskSnapshot) {
return entities.stream().filter(tempDisk -> diskSnapshot.getParent().getId().equals(
getMapper(org.ovirt.engine.core.common.businessentities.storage.Disk.class, DiskSnapshot.class)
.map(tempDisk, null).getId())).findFirst().orElse(null);
}

@Override
public Response remove() {
get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,24 @@ protected DiskSnapshots mapCollection(List<org.ovirt.engine.core.common.business
diskSnapshot.setDisk(new Disk());
diskSnapshot.getDisk().setId(this.diskId.toString());
collection.getDiskSnapshots().add(addLinks(populate(diskSnapshot, disk), Disk.class));
diskSnapshot.setHref(buildHref(diskId.toString(), diskSnapshot.getId().toString()));
diskSnapshot.setHref(buildHref(diskId.toString(), diskSnapshot.getId()));
if (diskSnapshot.getParent() != null) {
diskSnapshot.getParent().setHref(buildParentHref(diskId.toString(), false));
org.ovirt.engine.core.common.businessentities.storage.Disk
parentDisk = getDiskIdFromDiskSnapshotId(entities, diskSnapshot);
diskSnapshot.getParent().setHref(buildHref(parentDisk.getId().toString(),
diskSnapshot.getParent().getId()));
}
}
return collection;
}

private org.ovirt.engine.core.common.businessentities.storage.Disk getDiskIdFromDiskSnapshotId
(List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities, DiskSnapshot diskSnapshot) {
return entities.stream().filter(tempDisk -> diskSnapshot.getParent().getId().equals(
getMapper(org.ovirt.engine.core.common.businessentities.storage.Disk.class, DiskSnapshot.class)
.map(tempDisk, null).getId())).findFirst().orElse(null);
}

protected String buildHref(String diskId, String snapshotId) {
return "/ovirt-engine/api/disks/" + diskId + "/disksnapshots/" + snapshotId;
}
Expand Down

0 comments on commit a21f89a

Please sign in to comment.