package fr.openwide.maven.artifact.notifier.web.application.administration.model;
import java.util.List;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import fr.openwide.core.jpa.exception.ServiceException;
import fr.openwide.core.wicket.more.markup.repeater.data.LoadableDetachableDataProvider;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
import fr.openwide.maven.artifact.notifier.core.business.user.model.User;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserService;
public class UserDataProvider extends LoadableDetachableDataProvider<User> {
private static final long serialVersionUID = -8540890431031886412L;
private static final Logger LOGGER = LoggerFactory.getLogger(UserDataProvider.class);
@SpringBean
private IUserService userService;
private IModel<String> searchTermModel;
public UserDataProvider(IModel<String> searchTerm) {
super();
this.searchTermModel = searchTerm;
Injector.get().inject(this);
}
@Override
public IModel<User> model(User item) {
return new GenericEntityModel<Long, User>(item);
}
@Override
protected List<User> loadList(long first, long count) {
try {
return userService.search(searchTermModel.getObject(), (int) count, (int) first);
} catch (ServiceException e) {
LOGGER.error("Unable to search for users.");
}
return Lists.newArrayListWithExpectedSize(0);
}
@Override
protected long loadSize() {
try {
return userService.countSearch(searchTermModel.getObject());
} catch (ServiceException e) {
LOGGER.error("Unable to search for users.");
}
return 0;
}
@Override
public void detach() {
super.detach();
if (searchTermModel != null) {
searchTermModel.detach();
}
}
}