/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.rest.repository;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.dspace.app.rest.converter.ItemConverter;
import org.dspace.app.rest.model.ItemRest;
import org.dspace.app.rest.model.hateoas.ItemResource;
import org.dspace.content.Item;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService;
import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
/**
* This is the repository responsible to manage Item Rest object
*
* @author Andrea Bollini (andrea.bollini at 4science.it)
*
*/
@Component(ItemRest.NAME)
public class ItemRestRepository extends DSpaceRestRepository<ItemRest, UUID> {
ItemService is = ContentServiceFactory.getInstance().getItemService();
@Autowired
ItemConverter converter;
public ItemRestRepository() {
System.out.println("Repository initialized by Spring");
}
@Override
public ItemRest findOne(Context context, UUID id) {
Item item = null;
try {
item = is.find(context, id);
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
if (item == null) {
return null;
}
return converter.fromModel(item);
}
@Override
public Page<ItemRest> findAll(Context context, Pageable pageable) {
Iterator<Item> it = null;
List<Item> items = new ArrayList<Item>();
int total = 0;
try {
total = is.countTotal(context);
it = is.findAll(context, pageable.getPageSize(), pageable.getOffset());
while (it.hasNext()) {
Item i = it.next();
items.add(i);
}
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
Page<ItemRest> page = new PageImpl<Item>(items, pageable, total).map(converter);
return page;
}
@Override
public Class<ItemRest> getDomainClass() {
return ItemRest.class;
}
@Override
public ItemResource wrapResource(ItemRest item, String... rels) {
return new ItemResource(item, utils, rels);
}
}