package org.ovirt.engine.api.restapi.resource;
import java.util.Map;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.Group;
import org.ovirt.engine.api.model.Permission;
import org.ovirt.engine.api.resource.PermissionResource;
import org.ovirt.engine.core.common.action.PermissionsOperationsParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendPermissionResource
extends AbstractBackendSubResource<Permission, org.ovirt.engine.core.common.businessentities.Permission>
implements PermissionResource {
protected BackendAssignedPermissionsResource parent;
private Guid targetId;
private Class<? extends BaseResource> suggestedParentType;
protected BackendPermissionResource(String id,
Guid targetId,
BackendAssignedPermissionsResource parent,
Class<? extends BaseResource> suggestedParentType) {
super(id, Permission.class, org.ovirt.engine.core.common.businessentities.Permission.class);
this.targetId = targetId;
this.parent = parent;
this.suggestedParentType = suggestedParentType;
}
@Override
public Permission get() {
return performGet(VdcQueryType.GetPermissionById,
new IdQueryParameters(guid),
suggestedParentType);
}
@Override
protected Permission addParents(Permission permission) {
return parent.addParents(permission);
}
@Override
protected Permission map(org.ovirt.engine.core.common.businessentities.Permission entity, Permission template) {
Map<Guid, DbUser> users = parent.getUsers();
return parent.map(entity, users.containsKey(entity.getAdElementId()) ? users.get(entity.getAdElementId()) : null);
}
@Override
protected Permission addLinks(Permission model, Class<? extends BaseResource> suggestedParent, String... subCollectionMembersToExclude) {
return super.addLinks(model, model.getUser() != null ? suggestedParentType : Group.class);
}
@Override
public Response remove() {
get();
return performAction(
VdcActionType.RemovePermission,
new PermissionsOperationsParameters(getPermissions(), targetId)
);
}
private org.ovirt.engine.core.common.businessentities.Permission getPermissions() {
return getEntity(
org.ovirt.engine.core.common.businessentities.Permission.class,
VdcQueryType.GetPermissionById,
new IdQueryParameters(guid),
guid.toString()
);
}
}