Support for enabling/disabling peer-ratings

Change-Id: I56ebe733e9d67f6fdc3e4c9f49435cd2bb39e7aa
This commit is contained in:
mpeters 2011-07-12 12:56:37 +02:00
parent 4924108096
commit b929c74d3b
10 changed files with 149 additions and 88 deletions

@ -5,8 +5,21 @@
<wicket:extend>
<div class="append-bottom">
<h5 class="peer-title">Settings for levels</h5>
<h5 class="peer-title">General settings</h5>
<form wicket:id="peerSettingsForm">
<form wicket:id="peerRatingsSettingsForm">
<table>
<tr>
<td><label for="peerRatingsEnabled">Enable peers to rate reviews and the display of ratings: </label></td>
<td><input type="checkbox" wicket:id="peerRatingsEnabled" name="peerRatingsEnabled"></td>
</tr>
<tr>
<td><label for="peerDisplayNumberOfReviewsPerformed">Display users number of reviews performed on portal page</label></td>
<td><input type="checkbox" wicket:id="peerDisplayNumberOfReviewsPerformed" name="peerDisplayNumberOfReviewsPerformed"></td>
</tr>
</table>
</form>
<h5 class="peer-title">Settings for levels</h5>
<ul class="no-list-style">
<li wicket:id="projectClassList" class="append-bottom">
<h5 wicket:id="projectClassName" class="peer-box-subtitle"></h5>

@ -3,15 +3,19 @@ package se.su.dsv.scipro.admin.pages.settings;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.ProjectClassSettings;
@ -19,6 +23,8 @@ public class AdminPeerSettingsPage extends AbstractAdminSettingsPage {
@SpringBean
private ProjectClassDao projectClassDao;
@SpringBean
private GeneralSystemSettingsDao generalSystemSettingsDao;
public AdminPeerSettingsPage(final PageParameters pp){
super(pp);
@ -43,11 +49,30 @@ public class AdminPeerSettingsPage extends AbstractAdminSettingsPage {
}
});
CompoundPropertyModel<GeneralSystemSettings> ratingsModel = new CompoundPropertyModel<GeneralSystemSettings>(generalSystemSettingsDao.getGeneralSystemSettingsInstance());
PeerRatingsSettingsForm peerRatingsSettingsForm = new PeerRatingsSettingsForm("peerRatingsSettingsForm", ratingsModel);
peerSettingsForm.add(peerRatingsSettingsForm);
peerSettingsForm.add(new Button("submit"));
add(peerSettingsForm);
}
private class PeerRatingsSettingsForm extends Form<GeneralSystemSettings> {
private static final long serialVersionUID = 1L;
public PeerRatingsSettingsForm(String id, IModel<GeneralSystemSettings> model) {
super(id, model);
CheckBox peerRatingsEnabled = new CheckBox("peerRatingsEnabled");
add(peerRatingsEnabled);
CheckBox peerDisplayNumberOfReviewsPerformed = new CheckBox("peerDisplayNumberOfReviewsPerformed");
add(peerDisplayNumberOfReviewsPerformed);
}
@Override
public void onSubmit(){
setModelObject(generalSystemSettingsDao.save(getModelObject()));
}
}
private class PeerProjectClassSettingsForm extends Form<ProjectClassSettings> {
private static final long serialVersionUID = 1L;

@ -0,0 +1,21 @@
package se.su.dsv.scipro.components;
import org.apache.wicket.markup.html.WebMarkupContainer;
/**
* An invisible Panel that can trigger the hiding of wicket-enclosures which EmptyPanel doesn't do.
* @author Martin Peters - mpeters@dsv.su.se
*
*/
public final class InvisiblePanel extends WebMarkupContainer {
private static final long serialVersionUID = 1L;
public InvisiblePanel(String id) {
super(id);
}
@Override
public boolean isVisible(){
return false;
}
}

@ -1,31 +1,44 @@
package se.su.dsv.scipro.data.dao.jpa;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
/**
* @author Johan Aschan - aschan@dsv.su.se
* @author Martin Peters
*
*/
@Repository("generalSystemSettingsDao")
public class GeneralSystemSettingsDaoJPAImp extends AbstractDaoJPAImp<GeneralSystemSettings>
implements GeneralSystemSettingsDao {
private static final long INSTANCE_ID = 1L;
public GeneralSystemSettingsDaoJPAImp() {
super(GeneralSystemSettings.class);
}
@Override
@Transactional(readOnly = false)
public GeneralSystemSettings getGeneralSystemSettingsInstance(){
GeneralSystemSettings generalSystemSettings = load(1L);
GeneralSystemSettings generalSystemSettings = load(INSTANCE_ID);
if (generalSystemSettings == null) {
generalSystemSettings = new GeneralSystemSettings();
generalSystemSettings = new GeneralSystemSettings(INSTANCE_ID);
save(generalSystemSettings);
}
return generalSystemSettings;
}
@Override
@Transactional(readOnly = false)
public GeneralSystemSettings save(GeneralSystemSettings object){
if(object.getId() == null)
throw new UnsupportedOperationException("You're not supposed to be creating new instances of this object manually!");
return super.save(object);
}
}

@ -6,7 +6,6 @@ package se.su.dsv.scipro.data.dataobjects;
import javax.persistence.Basic;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@ -27,8 +26,9 @@ public class GeneralSystemSettings extends DomainObject{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
private Long id = null;
@Override
public Long getId() { return id; }
@Basic(optional=false)
private int finalSeminarMaxActiveParticipants = 6;
@ -40,7 +40,26 @@ public class GeneralSystemSettings extends DomainObject{
private int daysBeforeFinalSeminarCanRegisterAsOpponent = 3;
@Basic(optional=true)
private int projectPartnerDaysToLive;
private int projectPartnerDaysToLive;
@Basic(optional=false)
private boolean finalSeminarThesisMustBeAPDF = false;
@Basic(optional=false)
private boolean peerRatingsEnabled = true;
@Basic(optional=false)
private boolean peerDisplayNumberOfReviewsPerformed = true;
public GeneralSystemSettings(){
}
/**
* Not part of the public API, do NOT USE
*/
public GeneralSystemSettings(Long id){
this.id = id;
}
public int getProjectPartnerDaysToLive() {
return projectPartnerDaysToLive;
@ -50,10 +69,6 @@ public class GeneralSystemSettings extends DomainObject{
this.projectPartnerDaysToLive = projectPartnerDaysToLive;
}
@Basic(optional=false)
private boolean finalSeminarThesisMustBeAPDF = false;
public int getDaysBeforeFinalSeminarCanRegisterAsActiveParticipant() {
return daysBeforeFinalSeminarCanRegisterAsActiveParticipant;
}
@ -80,26 +95,27 @@ public class GeneralSystemSettings extends DomainObject{
this.finalSeminarMaxActiveParticipants = finalSeminarMaxActiveParticipants;
}
/**
* @return the finalSeminarThesisMustBeAPDF
*/
public boolean isFinalSeminarThesisMustBeAPDF() {
return finalSeminarThesisMustBeAPDF;
}
/**
* @param finalSeminarThesisMustBeAPDF the finalSeminarThesisMustBeAPDF to set
*/
public void setFinalSeminarThesisMustBeAPDF(boolean finalSeminarThesisMustBeAPDF) {
this.finalSeminarThesisMustBeAPDF = finalSeminarThesisMustBeAPDF;
}
@Override
public Long getId() {
return id;
public void setPeerRatingsEnabled(boolean peerRatingsEnabled) {
this.peerRatingsEnabled = peerRatingsEnabled;
}
public boolean isPeerRatingsEnabled() {
return peerRatingsEnabled;
}
public void setPeerDisplayNumberOfReviewsPerformed(boolean peerDisplayNumberOfReviewsPerformed) {
this.peerDisplayNumberOfReviewsPerformed = peerDisplayNumberOfReviewsPerformed;
}
public boolean isPeerDisplayNumberOfReviewsPerformed() {
return peerDisplayNumberOfReviewsPerformed;
}
}

@ -1,55 +0,0 @@
package se.su.dsv.scipro.peer.pages;
import java.util.ArrayList;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.basepages.MenuPage;
import se.su.dsv.scipro.data.dao.interfaces.MailEventDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.MailEvent;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.peer.data.dao.interfaces.QuestionDao;
import se.su.dsv.scipro.peer.data.dao.interfaces.ReviewTemplateDao;
import se.su.dsv.scipro.peer.data.dataobjects.Question;
import se.su.dsv.scipro.peer.data.dataobjects.QuestionOption;
import se.su.dsv.scipro.peer.data.dataobjects.ReviewTemplate;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
@Authorization(authorizedRoles={Roles.SYSADMIN})
public class PeerTestPage extends MenuPage {
@SpringBean
private QuestionDao questionDao;
@SpringBean
private ReviewTemplateDao rtDao;
@SpringBean
private UserDao userDao;
@SpringBean
private MailEventDao mailEventDao;
public PeerTestPage(){
ReviewTemplate rt = new ReviewTemplate();
rt.setName("Template for something");
Question q = new Question();
q.setQuestion("Really?");
q.setRadioChoiceQuestion(true);
q.setReviewTemplate(rt);
q.getRadioOptions().add(new QuestionOption(q, "Yes"));
q.getRadioOptions().add(new QuestionOption(q, "No"));
rt.getQuestions().add(q);
//rt = rtDao.save(rt);
System.out.println(questionDao.findAll());
System.out.println(questionDao.findAll().get(0).getRadioOptions());
User recipient = userDao.getUserByUsername("mpeters");
User replyUser = userDao.getUserByUsername("dan-kjel");
ArrayList<User> senderstmp = new ArrayList<User>();
senderstmp.add(replyUser);
MailEvent me = new MailEvent("subject åäö","this is the message åäö",recipient,"SciPro-avsändare åäö","no-reply@thesis.dsv.su.se", senderstmp,null);
me = mailEventDao.save(me);
}
}

@ -72,10 +72,13 @@
</div>
<!-- End left column -->
<div class="span-6 last">
<wicket:enclosure>
<div class="rounded-box">
<span class="box-title">Most frequent reviewers</span>
<div wicket:id="mostFrequentPanel" class="append-bottom"></div>
</div>
</wicket:enclosure>
<wicket:enclosure>
<div class="rounded-box">
<span class="box-title">Best rated reviewers</span>
<div wicket:id="bestRatedPanel" class="append-bottom"></div>
@ -83,6 +86,7 @@
<div>
<i><span class="small right">Last 12 months</span></i>
</div>
</wicket:enclosure>
</div>
</div>
</wicket:panel>

@ -11,6 +11,7 @@ import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.PageableListView;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
@ -19,7 +20,10 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.string.Strings;
import se.su.dsv.scipro.components.ExpandableMultiLineLabel;
import se.su.dsv.scipro.components.InvisiblePanel;
import se.su.dsv.scipro.components.SciProTooltipBehavior;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.ProjectClassSettings;
@ -46,6 +50,8 @@ public class PeerPortalPanel extends Panel {
private PeerPortalController peerPortalController;
@SpringBean
private PeerReviewDao peerReviewDao;
@SpringBean
private GeneralSystemSettingsDao generalSystemSettingsDao;
public PeerPortalPanel(final String id, final ProjectClass projectClass){
@ -208,10 +214,20 @@ public class PeerPortalPanel extends Panel {
PagingNavigator bottomRequestListNavigator = new RequestListNavigator("bottomNavigator", requestList);
add(bottomRequestListNavigator);
add(new MostFrequentReviewersPanel("mostFrequentPanel"));
add(new BestRatedReviewersPanel("bestRatedPanel"));
GeneralSystemSettings gsettings = generalSystemSettingsDao.getGeneralSystemSettingsInstance();
final String mostFrequentPanel = "mostFrequentPanel";
final String bestRatedPanel = "bestRatedPanel";
if(gsettings.isPeerDisplayNumberOfReviewsPerformed()){
add(new MostFrequentReviewersPanel(mostFrequentPanel));
} else {
add(new InvisiblePanel(mostFrequentPanel));
}
if( gsettings.isPeerRatingsEnabled() ){
add(new BestRatedReviewersPanel(bestRatedPanel));
} else {
add(new InvisiblePanel(bestRatedPanel));
}
}
}

@ -15,8 +15,10 @@
</ul>
<div>
<wicket:enclosure>
<strong>Review rating:</strong>
<div wicket:id="ratingPanel"></div>
</wicket:enclosure>
</div>
</div>
</wicket:panel>

@ -8,15 +8,13 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.components.InvisiblePanel;
import se.su.dsv.scipro.data.DomainObjectDetachableModel;
import se.su.dsv.scipro.data.dataobjects.FileDescription;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.peer.data.dao.interfaces.PeerReviewDao;
import se.su.dsv.scipro.peer.data.dataobjects.PeerReview;
import se.su.dsv.scipro.repository.components.FileDownloadLink;
import se.su.dsv.scipro.repository.components.FileOpenLink;
public class ReviewPageReviewDetailsPanel extends Panel {
@ -24,6 +22,8 @@ public class ReviewPageReviewDetailsPanel extends Panel {
@SpringBean
private PeerReviewDao peerReviewDao;
@SpringBean
private GeneralSystemSettingsDao generalSystemSettingsDao;
public ReviewPageReviewDetailsPanel(final String id, final PeerReview review) {
super(id);
@ -36,7 +36,13 @@ public class ReviewPageReviewDetailsPanel extends Panel {
add(review.getReviewer().getUser().getDisplayComponent("reviewer"));
add(review.getProject().getHeadSupervisor().getUser().getDisplayComponent("supervisor"));
add(new DateLabel("acceptDate", new Model<Date>(review.getDateCreated()), dpc));
add(new PeerReviewRatingPanel("ratingPanel", reviewModel ));
final String ratingPanel = "ratingPanel";
if(generalSystemSettingsDao.getGeneralSystemSettingsInstance().isPeerRatingsEnabled()){
add(new PeerReviewRatingPanel(ratingPanel, reviewModel ));
} else {
add(new InvisiblePanel(ratingPanel));
}
}
}