Added a new panel that show the latest reviews in the peer portal
This commit is contained in:
parent
ba89f7f02d
commit
91388962e3
src/main/java/se/su/dsv/scipro/peer
data/dao
panels
@ -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));
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user