package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Bookmark;
import org.ovirt.engine.api.model.Bookmarks;
import org.ovirt.engine.api.resource.BookmarkResource;
import org.ovirt.engine.api.resource.BookmarksResource;
import org.ovirt.engine.core.common.action.BookmarksOperationParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.queries.NameQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendBookmarksResource extends
AbstractBackendCollectionResource<Bookmark, org.ovirt.engine.core.common.businessentities.Bookmark> implements
BookmarksResource {
public BackendBookmarksResource() {
super(Bookmark.class, org.ovirt.engine.core.common.businessentities.Bookmark.class);
}
@Override
public Bookmarks list() {
return mapCollection(getBackendCollection(VdcQueryType.GetAllBookmarks, new VdcQueryParametersBase()));
}
@Override
public Response add(Bookmark bookmark) {
validateParameters(bookmark, "name");
validateParameters(bookmark, "value");
return performCreate(VdcActionType.AddBookmark, new BookmarksOperationParameters(map(bookmark)),
new BookmarkNameResolver(bookmark.getName()));
}
@Override
public BookmarkResource getBookmarkResource(String id) {
return inject(new BackendBookmarkResource(id));
}
protected Bookmarks mapCollection(List<org.ovirt.engine.core.common.businessentities.Bookmark> entities) {
Bookmarks collection = new Bookmarks();
for (org.ovirt.engine.core.common.businessentities.Bookmark entity : entities) {
collection.getBookmarks().add(addLinks(map(entity)));
}
return collection;
}
protected org.ovirt.engine.core.common.businessentities.Bookmark lookupBookmarkByName(final String name) {
return getEntity(org.ovirt.engine.core.common.businessentities.Bookmark.class,
VdcQueryType.GetBookmarkByBookmarkName, new NameQueryParameters(name), name);
}
protected class BookmarkNameResolver extends EntityIdResolver<Guid> {
private final String name;
BookmarkNameResolver(String name) {
this.name = name;
}
@Override
public org.ovirt.engine.core.common.businessentities.Bookmark lookupEntity(Guid id) throws
BackendFailureException {
assert id == null; // AddBookmark returns nothing, lookup name instead
return lookupBookmarkByName(name);
}
}
}