Added a new panel that show the latest reviews in the peer portal

This commit is contained in:
Emil Siverhall 2011-07-12 16:16:42 +02:00
parent ba89f7f02d
commit 91388962e3
4 changed files with 178 additions and 0 deletions
src/main/java/se/su/dsv/scipro/peer

@ -44,6 +44,10 @@ public interface PeerReviewDao extends LazyDeleteDao<PeerReview> {
public int countStudentsWithReviews(final long minimumNumberOfReviews, final Date since);
public int countStudentsWithReviews();
public int countSubmittedReviews();
public List<PeerReview> findReviewsSortedByDate(final int firstResult, final Integer limit);
/**
* Find given peer reviews for a given project and student

@ -385,4 +385,55 @@ public class PeerReviewDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<PeerReview>
}
});
}
@Transactional
public List<PeerReview> findReviewsSortedByDate(final int firstResult, final Integer limit) {
return getJpaTemplate().execute(new JpaCallback<List<PeerReview>>() {
public List<PeerReview> doInJpa(EntityManager em)
throws PersistenceException {
String q = "select pr " +
"from PeerReview pr " +
"where pr.submitted = true " +
"and pr.deleted = false " +
"and pr.aborted = false " +
"order by pr.lastModified desc";
TypedQuery<PeerReview> query = em.createQuery(q, PeerReview.class);
query.setMaxResults(limit != null ? limit : 3);
query.setFirstResult(firstResult);
try {
return query.getResultList();
} catch (NoResultException e) {
return new LinkedList<PeerReview>();
}
}
});
}
@Override
public int countSubmittedReviews() {
return getJpaTemplate().execute(new JpaCallback<Integer>() {
public Integer doInJpa(EntityManager em)
throws PersistenceException {
String q = "select count(pr) " +
"from PeerReview pr " +
"where pr.submitted = true " +
"and pr.deleted = false " +
"and pr.aborted = false";
TypedQuery<Long> query = em.createQuery(q, Long.class);
try {
return query.getSingleResult().intValue();
} catch (NoResultException e) {
return 0;
}
}
}); }
}

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div>
<table>
<tbody wicket:id="listView">
<tr>
<td wicket:id="reviewer"></td>
</tr>
<tr>
<td wicket:id="reviewDate"></td>
</tr>
</tbody>
</table>
<i><span wicket:id="noReviewersFoundMessage"></span></i>
</div>
<div>
<a href="#" wicket:id="showMore">Show more...</a>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,100 @@
package se.su.dsv.scipro.peer.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.peer.data.dao.interfaces.PeerReviewDao;
import se.su.dsv.scipro.peer.data.dataobjects.PeerReview;
public class LatestReviewPanel extends Panel {
private static final long serialVersionUID = 1L;
@SpringBean
private PeerReviewDao peerReviewDao;
/**
* @param id
* @param model
* the number of users to show by default - also defines how many
* users to show when clicking showmore
*/
public LatestReviewPanel(String id, final Model<Integer> model) {
super(id, model);
setOutputMarkupId(true);
final int totalCount = peerReviewDao.countSubmittedReviews();
final LoadableDetachableModel<List<PeerReview>> listModel = new LoadableDetachableModel<List<PeerReview>>() {
private static final long serialVersionUID = 1L;
@Override
protected List<PeerReview> load() {
return peerReviewDao.findReviewsSortedByDate(0,
model.getObject());
}
};
final ListView<PeerReview> listView = new ListView<PeerReview>(
"listView", listModel) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<PeerReview> item) {
PeerReview pr = item.getModelObject();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
item.add(new Label("reviewDate", "Review date: "
+ df.format(pr.getLastModified())));
item.add(pr.getReviewer().getUser()
.getDisplayComponent("reviewer"));
add(item);
}
};
add(new Label("noReviewersFoundMessage", "No reviewers found") {
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible() {
return listView.size() == 0;
}
});
add(listView);
add(new AjaxLink<Void>("showMore") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
Integer i = model.getObject();
i += model.getObject();
model.setObject(i);
target.addComponent(LatestReviewPanel.this);
}
@Override
public boolean isVisible() {
return listView.size() < totalCount;
}
});
}
public LatestReviewPanel(String id) {
this(id, new Model<Integer>(3));
}
}