package org.ovirt.engine.api.restapi.resource;
import java.util.HashMap;
import org.ovirt.engine.api.model.Action;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.BaseResources;
import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.DiskAttachment;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
import org.ovirt.engine.core.common.queries.NameQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public abstract class AbstractBackendStorageDomainContentResource<C extends BaseResources,
R extends BaseResource,
Q extends IVdcQueryable>
extends AbstractBackendActionableResource<R, Q> {
protected AbstractBackendStorageDomainContentsResource<C, R, Q> parent;
public AbstractBackendStorageDomainContentResource(String id,
AbstractBackendStorageDomainContentsResource<C, R, Q> parent,
Class<R> modelType,
Class<Q> entityType) {
super(id, modelType, entityType);
this.parent = parent;
}
public AbstractBackendStorageDomainContentsResource<C, R, Q> getParent() {
return parent;
}
protected abstract java.util.Map<Guid, org.ovirt.engine.core.common.businessentities.storage.Disk> getDiskMap();
protected Guid getDestStorageDomainId(Action action) {
if (action.getStorageDomain().isSetId()) {
return asGuid(action.getStorageDomain().getId());
} else {
return parent.lookupStorageDomainIdByName(action.getStorageDomain().getName());
}
}
protected Guid getClusterId(Action action) {
if (action.getCluster().isSetId()) {
return asGuid(action.getCluster().getId());
} else {
return lookupClusterIdByName(action.getCluster().getName());
}
}
protected Guid lookupClusterIdByName(String name) {
return lookupClusterByName(name).getId();
}
protected Cluster lookupClusterByName(String name) {
return getEntity(Cluster.class,
VdcQueryType.GetClusterByName,
new NameQueryParameters(name),
"Cluster: name=" + name);
}
protected HashMap<Guid, Guid> getDiskToDestinationMap(Action action) {
HashMap<Guid, Guid> diskToDestinationMap = new HashMap<>();
if (action.isSetVm() && action.getVm().isSetDiskAttachments() && action.getVm().getDiskAttachments().isSetDiskAttachments()) {
for (DiskAttachment diskAttachment : action.getVm().getDiskAttachments().getDiskAttachments()) {
Disk disk = diskAttachment.getDisk();
if (disk != null && disk.isSetId() && disk.isSetStorageDomains() && disk.getStorageDomains().isSetStorageDomains()
&& disk.getStorageDomains().getStorageDomains().get(0).isSetId()) {
diskToDestinationMap.put(Guid.createGuidFromStringDefaultEmpty(disk.getId()),
Guid.createGuidFromStringDefaultEmpty(disk.getStorageDomains().getStorageDomains().get(0).getId()));
}
}
}
return diskToDestinationMap;
}
}