package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.VirtualNumaNode;
import org.ovirt.engine.api.resource.VmNumaNodeResource;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VmNumaNodeOperationParameters;
import org.ovirt.engine.core.common.businessentities.VmNumaNode;
import org.ovirt.engine.core.compat.Guid;
public class BackendVmNumaNodeResource
extends AbstractBackendActionableResource<VirtualNumaNode, VmNumaNode>
implements VmNumaNodeResource {
private VdcActionType updateType;
private ParametersProvider<VirtualNumaNode, VmNumaNode> updateParametersProvider;
private EntityIdResolver<Guid> entityResolver;
private String[] requiredUpdateFields;
private BackendVmNumaNodesResource collection;
private VdcActionType removeAction;
public BackendVmNumaNodeResource(String id,
final BackendVmNumaNodesResource collection,
VdcActionType updateType,
AbstractBackendSubResource.ParametersProvider<VirtualNumaNode, VmNumaNode> updateParametersProvider,
String[] requiredUpdateFields) {
super(id, VirtualNumaNode.class, VmNumaNode.class);
this.updateType = updateType;
this.updateParametersProvider = updateParametersProvider;
this.requiredUpdateFields = requiredUpdateFields;
this.collection = collection;
this.removeAction = VdcActionType.RemoveVmNumaNodes;
entityResolver = new EntityIdResolver<Guid>() {
@Override
public VmNumaNode lookupEntity(Guid id) throws BackendFailureException {
return collection.lookupEntity(guid);
}
};
}
@Override
public VirtualNumaNode update(VirtualNumaNode node) {
validateParameters(node, requiredUpdateFields);
return performUpdate(node, entityResolver, updateType, updateParametersProvider);
}
@Override
public VirtualNumaNode get() {
VmNumaNode entity = collection.lookupEntity(guid);
if (entity == null) {
return notFound();
}
return addLinks(populate(map(entity), entity));
}
@Override
public VirtualNumaNode addParents(VirtualNumaNode node) {
return collection.addParents(node);
}
@Override
public Response remove() {
get();
return performAction(removeAction, getRemoveParameters());
}
private VdcActionParametersBase getRemoveParameters() {
VmNumaNode entity = new VmNumaNode();
entity.setId(guid);
VmNumaNodeOperationParameters parameters = new VmNumaNodeOperationParameters(collection.parentId, entity);
return parameters;
}
}