/**
* 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.io.Serializable;
import org.dspace.app.rest.model.RestModel;
import org.dspace.app.rest.model.hateoas.DSpaceResource;
import org.dspace.app.rest.utils.ContextUtil;
import org.dspace.app.rest.utils.Utils;
import org.dspace.core.Context;
import org.dspace.services.RequestService;
import org.dspace.services.model.Request;
import org.dspace.utils.DSpace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
* This is the base class for any Rest Repository. It add a DSpaceContext to the
* normal Spring Data Repository methods signature and assure that the
* repository is able to wrap a DSpace Rest Object in a HAL Resource
*
* @author Andrea Bollini (andrea.bollini at 4science.it)
*
*/
public abstract class DSpaceRestRepository<T extends RestModel, ID extends Serializable>
implements PagingAndSortingRepository<T, ID> {
@Autowired
protected Utils utils;
protected RequestService requestService = new DSpace().getRequestService();
@Override
public <S extends T> S save(S entity) {
// TODO Auto-generated method stub
return null;
}
@Override
public <S extends T> Iterable<S> save(Iterable<S> entities) {
// TODO Auto-generated method stub
return null;
}
@Override
public T findOne(ID id) {
Context context = obtainContext();
return findOne(context, id);
}
public abstract T findOne(Context context, ID id);
@Override
public boolean exists(ID id) {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterable<T> findAll() {
throw new RuntimeException("findAll MUST be paginated");
}
@Override
public Iterable<T> findAll(Iterable<ID> ids) {
throw new RuntimeException("findAll MUST be paginated");
}
@Override
public long count() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void delete(ID id) {
// TODO Auto-generated method stub
}
@Override
public void delete(T entity) {
// TODO Auto-generated method stub
}
@Override
public void delete(Iterable<? extends T> entities) {
// TODO Auto-generated method stub
}
@Override
public void deleteAll() {
// TODO Auto-generated method stub
}
@Override
public Iterable<T> findAll(Sort sort) {
throw new RuntimeException("findAll MUST be paginated");
}
@Override
public Page<T> findAll(Pageable pageable) {
Context context = obtainContext();
return findAll(context, pageable);
}
public abstract Page<T> findAll(Context context, Pageable pageable);
private Context obtainContext() {
Request currentRequest = requestService.getCurrentRequest();
Context context = (Context) currentRequest.getAttribute(ContextUtil.DSPACE_CONTEXT);
if (context != null && context.isValid()) {
return context;
}
context = new Context();
currentRequest.setAttribute(ContextUtil.DSPACE_CONTEXT, context);
return context;
}
public abstract Class<T> getDomainClass();
public abstract DSpaceResource<T> wrapResource(T model, String... rels);
}