fixed conflicts
This commit is contained in:
commit
5058fa759f
resources/db_update_scripts
src
main/java/se/su/dsv/scipro
data/dataobjects
examiner/panels
ExaminerReviewDialogPanel.htmlExaminerReviewDialogPanel.javaExaminerReviewPanel.javaExaminerReviewPanel.properties
notifications
project/pages
reviewer
seminar/panels
SeminarCRUDPanel.htmlSeminarCRUDPanel.javaSeminarCancelledInfoPanel.htmlSeminarCancelledInfoPanel.javaSeminarCancelledInfoPanel.propertiesSeminarPanel.htmlSeminarPanel.javaSeminarThesisPanel.javaThesisCommentUploadPanel.java
springdata
workerthreads
test/java/se/su/dsv/scipro/seminar/panels
@ -0,0 +1 @@
|
||||
ALTER TABLE `final_seminar` ADD `deleted` tinyint(1) NOT NULL;
|
@ -30,8 +30,7 @@ import java.util.List;
|
||||
@Table(name = "final_seminar")
|
||||
@Cacheable(true)
|
||||
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
|
||||
//public class FinalSeminar extends LazyDeletableDomainObject implements Commentable, Membership {
|
||||
public class FinalSeminar extends DomainObject implements Commentable, Membership {
|
||||
public class FinalSeminar extends LazyDeletableDomainObject implements Commentable, Membership {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -6,6 +6,7 @@
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<br />
|
||||
<div wicket:id="cancelled"></div>
|
||||
<b>Final seminar thesis:</b>
|
||||
<div wicket:id="thesisPanel"></div>
|
||||
<br />
|
||||
|
@ -11,6 +11,7 @@ import se.su.dsv.scipro.SciProSession;
|
||||
import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
|
||||
import se.su.dsv.scipro.data.enums.DateStyle;
|
||||
import se.su.dsv.scipro.reusable.WorkDaysModel;
|
||||
import se.su.dsv.scipro.seminar.panels.SeminarCancelledInfoPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.SeminarThesisPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.ThesisCommentUploadPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.ViewThesisCommentsPanel;
|
||||
@ -43,6 +44,7 @@ public class ExaminerReviewDialogPanel extends Panel {
|
||||
add(initViewThesisCommentsPanel());
|
||||
add(initThesisCommentUploadPanel());
|
||||
addExaminerDeadlineInfo();
|
||||
add(new SeminarCancelledInfoPanel(CANCELLED, model));
|
||||
}
|
||||
|
||||
private WebMarkupContainer initThesisPanel() {
|
||||
@ -99,7 +101,8 @@ public class ExaminerReviewDialogPanel extends Panel {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static final String CANCELLED = "cancelled";
|
||||
static final String THESIS = "thesisPanel";
|
||||
static final String UPLOAD = "uploadPanel";
|
||||
static final String VIEW_COMMENTS = "viewCommentPanel";
|
||||
|
@ -179,11 +179,16 @@ public class ExaminerReviewPanel extends Panel {
|
||||
};
|
||||
}
|
||||
|
||||
private AjaxConfirmationLinkColumn<FinalSeminar> confirmReviewLink(String id, IModel<FinalSeminar> model, final WebMarkupContainer table) {
|
||||
private AjaxConfirmationLinkColumn<FinalSeminar> confirmReviewLink(String id, final IModel<FinalSeminar> model, final WebMarkupContainer table) {
|
||||
return new AjaxConfirmationLinkColumn<FinalSeminar>(id, model, new StringResourceModel("confirmReview", ExaminerReviewPanel.this, null)) {
|
||||
|
||||
private static final long serialVersionUID = -1404592483897629010L;
|
||||
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!model.getObject().isDeleted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target, IModel<FinalSeminar> clickedModel) {
|
||||
FinalSeminar seminar = seminarService.addExaminer(SciProSession.get().getUser(), clickedModel.getObject());
|
||||
@ -192,7 +197,11 @@ public class ExaminerReviewPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public String labelString() {
|
||||
return new StringResourceModel("select", ExaminerReviewPanel.this, null).getString();
|
||||
if (model.getObject().isDeleted()){
|
||||
return new StringResourceModel("deleted", ExaminerReviewPanel.this, null).getString();
|
||||
} else {
|
||||
return new StringResourceModel("select", ExaminerReviewPanel.this, null).getString();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -2,3 +2,4 @@ dialogTitle=Thesis comment for project\: ${project.title}
|
||||
notCommented=Not commented yet
|
||||
confirmReview=Are you sure you want to comment this thesis?
|
||||
select=Not commented yet, Select
|
||||
deleted=Cancelled
|
||||
|
@ -20,7 +20,7 @@ public class SeminarEvent extends NotificationEvent {
|
||||
|
||||
public enum Event { CREATED, ROOM_CHANGED, DATE_CHANGED, OPPOSITION_CHANGED, PARTICIPATION_CHANGED, THESIS_UPLOADED,
|
||||
OPPOSITION_REPORT_UPLOADED, TURNITIN_ERROR, THESIS_DELETED, THESIS_COMMENT_UPLOADED, THESIS_COMMENT_REMIND,
|
||||
THESIS_UPLOAD_REMIND}
|
||||
THESIS_UPLOAD_REMIND, CANCELLED}
|
||||
|
||||
@ManyToOne
|
||||
private FinalSeminar seminar;
|
||||
|
@ -64,6 +64,8 @@ FINAL_SEMINAR.THESIS_COMMENT_REMIND.title = Final seminar thesis comment reminde
|
||||
FINAL_SEMINAR.THESIS_COMMENT_REMIND.body = Thesis comment should be uploaded to final seminar.
|
||||
FINAL_SEMINAR.THESIS_UPLOAD_REMIND.title = Reminder: Upload final seminar thesis
|
||||
FINAL_SEMINAR.THESIS_UPLOAD_REMIND.body = No final seminar thesis has been uploaded to the seminar yet.
|
||||
FINAL_SEMINAR.CANCELLED.title = Final seminar for project {1} was cancelled
|
||||
FINAL_SEMINAR.CANCELLED.body = The final seminar for project {0} was cancelled because the deadline for uploading the final seminar thesis wasn't met.
|
||||
FINAL_SEMINAR.compilationSuffix = , project: {0}
|
||||
|
||||
PEER.REVIEW_COMPLETED.title = Peer review completed
|
||||
|
@ -3,6 +3,7 @@ package se.su.dsv.scipro.project.pages;
|
||||
import org.apache.wicket.PageParameters;
|
||||
import org.apache.wicket.RequestCycle;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
|
||||
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
|
||||
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
|
||||
import org.apache.wicket.markup.html.panel.EmptyPanel;
|
||||
@ -26,6 +27,7 @@ import se.su.dsv.scipro.datatables.ClickableTitleColumn;
|
||||
import se.su.dsv.scipro.datatables.GenericDataPanel;
|
||||
import se.su.dsv.scipro.datatables.finalseminar.OpposeColumnPanel;
|
||||
import se.su.dsv.scipro.datatables.finalseminar.ParticipateColumnPanel;
|
||||
import se.su.dsv.scipro.match.dataobject.NewIdea;
|
||||
import se.su.dsv.scipro.opponent.panels.ProjectOppositionsParticipationsPanel;
|
||||
import se.su.dsv.scipro.reusable.SciProUtilities;
|
||||
import se.su.dsv.scipro.seminar.panels.SeminarPanel;
|
||||
@ -104,10 +106,16 @@ public class ProjectOppositionPage extends AbstractProjectDetailsPage implements
|
||||
dialog.open(target);
|
||||
}
|
||||
});
|
||||
|
||||
getColumns().add(new AbstractColumn<FinalSeminar>(Model.of("Oppose"), null) {
|
||||
@Override
|
||||
public void populateItem(Item item, String s, IModel iModel) {
|
||||
public void populateItem(Item<ICellPopulator<FinalSeminar>> item, String s, final IModel<FinalSeminar> iModel) {
|
||||
item.add(new OpposeColumnPanel(s, iModel) {
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!iModel.getObject().isDeleted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target, IModel<FinalSeminar> clickedModel) {
|
||||
target.addComponent(feedbackPanel);
|
||||
@ -129,8 +137,14 @@ public class ProjectOppositionPage extends AbstractProjectDetailsPage implements
|
||||
});
|
||||
getColumns().add(new AbstractColumn<FinalSeminar>(Model.of("Participate"), null) {
|
||||
@Override
|
||||
public void populateItem(Item item, String s, IModel iModel) {
|
||||
public void populateItem(Item<ICellPopulator<FinalSeminar>> item, String s, final IModel<FinalSeminar> iModel) {
|
||||
item.add(new ParticipateColumnPanel(s, iModel) {
|
||||
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!iModel.getObject().isDeleted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target, IModel<FinalSeminar> clickedModel) {
|
||||
target.addComponent(feedbackPanel);
|
||||
|
@ -3,6 +3,7 @@
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<br />
|
||||
<div wicket:id="cancelled"></div>
|
||||
<b>Final seminar thesis:</b>
|
||||
<div wicket:id="thesisPanel"></div>
|
||||
<br />
|
||||
|
@ -11,6 +11,7 @@ import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
|
||||
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
|
||||
import se.su.dsv.scipro.data.enums.DateStyle;
|
||||
import se.su.dsv.scipro.reusable.WorkDaysModel;
|
||||
import se.su.dsv.scipro.seminar.panels.SeminarCancelledInfoPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.SeminarThesisPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.ThesisCommentUploadPanel;
|
||||
import se.su.dsv.scipro.seminar.panels.ViewThesisCommentsPanel;
|
||||
@ -40,6 +41,7 @@ public class ReviewDialogPanel extends Panel {
|
||||
add(initThesisCommentUploadPanel());
|
||||
add(initViewThesisCommentsPanel());
|
||||
addDeadlineInfo();
|
||||
addCancelledInfo();
|
||||
}
|
||||
|
||||
private WebMarkupContainer initThesisPanel() {
|
||||
@ -83,6 +85,10 @@ public class ReviewDialogPanel extends Panel {
|
||||
add(examinerDeadline);
|
||||
}
|
||||
|
||||
private void addCancelledInfo(){
|
||||
add(new SeminarCancelledInfoPanel(CANCELLED, model));
|
||||
}
|
||||
|
||||
private boolean isReviewer() {
|
||||
return model.getObject().getProject().getReviewer().getUser().equals(SciProSession.get().getUser());
|
||||
}
|
||||
@ -98,7 +104,8 @@ public class ReviewDialogPanel extends Panel {
|
||||
private boolean hasThesis() {
|
||||
return model.getObject().getDocument()!=null;
|
||||
}
|
||||
|
||||
|
||||
static final String CANCELLED = "cancelled";
|
||||
static final String THESIS = "thesisPanel";
|
||||
static final String VIEW_COMMENTS = "viewCommentsPanel";
|
||||
static final String UPLOAD = "uploadPanel";
|
||||
|
@ -129,6 +129,11 @@ public class ReviewPanel extends Panel {
|
||||
@Override
|
||||
public void populateItem(Item<ICellPopulator<FinalSeminar>> cellItem, String componentId, final IModel<FinalSeminar> rowModel) {
|
||||
cellItem.add(new AjaxLinkColumn<FinalSeminar>(componentId, rowModel) {
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!rowModel.getObject().isDeleted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target, IModel<FinalSeminar> clickedModel) {
|
||||
dialog.setTitle(new StringResourceModel("dialogTitle", ReviewPanel.this, rowModel));
|
||||
@ -145,6 +150,9 @@ public class ReviewPanel extends Panel {
|
||||
}
|
||||
@Override
|
||||
public String labelString() {
|
||||
if (rowModel.getObject().isDeleted()){
|
||||
return "Cancelled";
|
||||
}
|
||||
for (ThesisReview tr : rowModel.getObject().getThesisReviews()){
|
||||
if (tr.getUploader().equals(SciProSession.get().getUser())){
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||
|
@ -12,6 +12,7 @@
|
||||
<h6>Room: *</h6>
|
||||
<input wicket:id="room" />
|
||||
<h6>Date: (at least <span wicket:id="daysAheadLabel"></span> work days away from now)</h6>
|
||||
<div wicket:id="cancelled" class="row-fluid"><span class="label label-important">Select a new date</span></div>
|
||||
<wicket:container wicket:id="startDate"></wicket:container>
|
||||
<h6>Presentation language:</h6>
|
||||
<select wicket:id="presentationLanguage"></select>
|
||||
|
@ -2,6 +2,7 @@ package se.su.dsv.scipro.seminar.panels;
|
||||
|
||||
import org.apache.wicket.PageParameters;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.form.DropDownChoice;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
@ -84,7 +85,14 @@ public class SeminarCRUDPanel extends AbstractCRUDPanel<FinalSeminar> {
|
||||
new StringValidator.MinimumLengthValidator(1)));
|
||||
|
||||
form.add(new Label(DAYS_AHEAD, String.valueOf(settingsService.getFinalSeminarCreateDaysAhead())));
|
||||
|
||||
|
||||
form.add(new WebMarkupContainer(CANCELLED){
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
setVisibilityAllowed(form.getModelObject().isDeleted());
|
||||
}
|
||||
});
|
||||
|
||||
if (isNewDomainObject()) {
|
||||
// form.getModelObject().setStartDate(new DateTime().plusDays(settingsService.getFinalSeminarCreateDaysAhead()).toDate());
|
||||
form.getModelObject().setStartDate(daysService.workDaysAfter(SciProUtilities.setTimeOfDayTo0000(new Date()), settingsService.getFinalSeminarCreateDaysAhead()));
|
||||
@ -127,7 +135,13 @@ public class SeminarCRUDPanel extends AbstractCRUDPanel<FinalSeminar> {
|
||||
|
||||
if(!isNewDomainObject()) {
|
||||
FinalSeminar oldSeminar = seminarService.findOne(seminar.getId());
|
||||
if(oldSeminar.getStartDate().compareTo(seminar.getStartDate())!=0 && seminarIsTooClose)
|
||||
|
||||
if (oldSeminar.isDeleted() && seminarIsTooClose){
|
||||
parameters.setError(TOO_CLOSE);
|
||||
} else if (oldSeminar.isDeleted() && !seminarIsTooClose){
|
||||
oldSeminar.setDeleted(false);
|
||||
seminarModel.setObject(oldSeminar);
|
||||
} else if(oldSeminar.getStartDate().compareTo(seminar.getStartDate())!=0 && seminarIsTooClose)
|
||||
parameters.setError(TOO_CLOSE);
|
||||
}
|
||||
|
||||
@ -156,7 +170,8 @@ public class SeminarCRUDPanel extends AbstractCRUDPanel<FinalSeminar> {
|
||||
seminar.addOpposition(opposition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static final String CANCELLED = "cancelled";
|
||||
static final String MAX_PARTICIPANTS = "maxParticipants";
|
||||
static final String MAX_OPPONENTS = "maxOpponents";
|
||||
static final String ROOM = "room";
|
||||
|
12
src/main/java/se/su/dsv/scipro/seminar/panels/SeminarCancelledInfoPanel.html
Executable file
12
src/main/java/se/su/dsv/scipro/seminar/panels/SeminarCancelledInfoPanel.html
Executable file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<div wicket:id="cancelled" class="row-fluid"><span class="label label-important" wicket:id="cancelledInfo">
|
||||
Final seminar was cancelled because the deadline for <br>
|
||||
uploading the final seminar thesis wasn't met.<br>
|
||||
Supervisor must select a new date for the final seminar.
|
||||
</span></div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
package se.su.dsv.scipro.seminar.panels;
|
||||
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.basic.MultiLineLabel;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.StringResourceModel;
|
||||
import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
|
||||
|
||||
public class SeminarCancelledInfoPanel extends Panel {
|
||||
public SeminarCancelledInfoPanel(String id, final IModel<FinalSeminar> model) {
|
||||
super(id, model);
|
||||
WebMarkupContainer cancelled = new WebMarkupContainer(CANCELLED){
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setVisibilityAllowed(model.getObject().isDeleted());
|
||||
}
|
||||
};
|
||||
add(cancelled);
|
||||
cancelled.add(new MultiLineLabel(CANCELLED_INFO, new StringResourceModel(CANCELLED_INFO, this, null)));
|
||||
}
|
||||
static final String CANCELLED = "cancelled";
|
||||
static final String CANCELLED_INFO = "cancelledInfo";
|
||||
}
|
@ -0,0 +1 @@
|
||||
cancelledInfo=Final seminar was cancelled because the deadline for uploading \n the final seminar thesis wasn't met. Supervisor must select a \n new date for the final seminar.
|
@ -2,7 +2,17 @@
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
|
||||
<!--<div wicket:id="deleted" class="row-fluid"><span class="label label-important">-->
|
||||
<!--Final seminar was cancelled because the deadline for <br>-->
|
||||
<!--uploading the final seminar thesis wasn't met.<br>-->
|
||||
<!--Supervisor must select a new date for the final seminar.-->
|
||||
<!--</span></div>-->
|
||||
|
||||
|
||||
|
||||
<wicket:container wicket:id="project">
|
||||
<div wicket:id="cancelled"></div>
|
||||
<h6>Level:</h6> <span wicket:id="level">Unknown</span>
|
||||
<h6>Head supervisor:</h6> <span wicket:id="headSupervisor">No supervisor</span>
|
||||
<!--<<span wicket:id="headSupervisorEmail"></span>>-->
|
||||
|
@ -52,6 +52,11 @@ public class SeminarPanel extends Panel {
|
||||
@SpringBean
|
||||
GeneralSystemSettingsService settingsService;
|
||||
|
||||
// WebMarkupContainer deleted;
|
||||
|
||||
SeminarCancelledInfoPanel cancelledInfoPanel;
|
||||
WebMarkupContainer projectContainer;
|
||||
|
||||
private IModel<FinalSeminar> seminar;
|
||||
// private final IModel<Date> deadlineDate;
|
||||
// private final IModel<Date> examinerDeadlineDate;
|
||||
@ -135,6 +140,11 @@ public class SeminarPanel extends Panel {
|
||||
setVisibilityAllowed(seminar.getObject().getProject().getHeadSupervisor().getUser().equals(SciProSession.get().getUser()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(AjaxRequestTarget target, IModel<FinalSeminar> domainObject) {
|
||||
target.addComponent(cancelledInfoPanel);
|
||||
}
|
||||
|
||||
});
|
||||
add(initProjectComponent(seminar));
|
||||
add(initSeminarComponent(seminar));
|
||||
@ -142,6 +152,7 @@ public class SeminarPanel extends Panel {
|
||||
add(initThesisComponent(seminar));
|
||||
add(initThesisReviewComponent(seminar));
|
||||
add(initTurnitinComponent(seminar));
|
||||
projectContainer.add(initCancelledInfo(seminar));
|
||||
}
|
||||
|
||||
private WebMarkupContainer initSeminarNonCRUDComponent(final IModel<FinalSeminar> seminar) {
|
||||
@ -231,6 +242,7 @@ public class SeminarPanel extends Panel {
|
||||
setVisibilityAllowed(seminar.getObject().getDocument() != null &&
|
||||
SciProSession.get().getUser().equals(item.getModelObject().getOpponent().getUser()) &&
|
||||
item.getModelObject().getOpponentReport() == null);
|
||||
setEnabled(!seminar.getObject().isDeleted());
|
||||
}
|
||||
}.createDefaultWrapperPanel(SEMINAR_OPPOSITION_UPLOAD));
|
||||
|
||||
@ -250,7 +262,7 @@ public class SeminarPanel extends Panel {
|
||||
|
||||
private WebMarkupContainer initProjectComponent(IModel<FinalSeminar> seminar) {
|
||||
CompoundPropertyModel<Project> projectModel = new CompoundPropertyModel<Project>(new PropertyModel<Project>(seminar, PROJECT));
|
||||
WebMarkupContainer projectContainer = new WebMarkupContainer(PROJECT, projectModel);
|
||||
projectContainer = new WebMarkupContainer(PROJECT, projectModel);
|
||||
|
||||
projectContainer.add(new Label(PROJECT_LEVEL, projectModel.bind("projectClass.name")));
|
||||
// projectContainer.add(new Label(PROJECT_HEAD_SUPERVISOR, projectModel.bind("headSupervisor.nameAsString")));
|
||||
@ -302,6 +314,7 @@ public class SeminarPanel extends Panel {
|
||||
super.onConfigure();
|
||||
boolean isProjectMember = projectService.isPartOfProject(seminar.getObject().getProject(), SciProSession.get().getUser());
|
||||
setVisibilityAllowed(settingsService.isThesisReviewsEnabled() && hasThesis() && isProjectMember);
|
||||
setEnabled(!seminar.getObject().isDeleted());
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -336,6 +349,13 @@ public class SeminarPanel extends Panel {
|
||||
return turnitin;
|
||||
}
|
||||
|
||||
private SeminarCancelledInfoPanel initCancelledInfo(final IModel<FinalSeminar> seminar){
|
||||
cancelledInfoPanel = new SeminarCancelledInfoPanel(CANCELLED, seminar);
|
||||
cancelledInfoPanel.setOutputMarkupId(true);
|
||||
return cancelledInfoPanel;
|
||||
}
|
||||
|
||||
static final String CANCELLED = "cancelled";
|
||||
static final String DEADLINE = "deadline";
|
||||
static final String EXAMINER_DATE = "examinerDate";
|
||||
static final String DATE = "date";
|
||||
|
@ -157,6 +157,7 @@ public class SeminarThesisPanel extends Panel {
|
||||
super.onConfigure();
|
||||
boolean isAuthor = projectService.isAuthor(getSeminar().getProject(), SciProSession.get().getUser());
|
||||
setVisibilityAllowed(isAuthor && !seminarService.hasThesis(model.getObject()));
|
||||
setEnabled(!model.getObject().isDeleted() && !seminarService.hasDeadlinePassed(model.getObject()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -47,8 +47,18 @@ public class ThesisCommentUploadPanel extends Panel {
|
||||
reviewService.saveReview(upload.getFileUpload(), comment.getObject(), SciProSession.get().getUser(), seminarService.findOne(model.getObject().getId()), createSource());
|
||||
}
|
||||
};
|
||||
form.add(upload = new FileUploadField(UPLOAD));
|
||||
TextArea<String> commentArea = new TextArea<String>(COMMENT, comment);
|
||||
form.add(upload = new FileUploadField(UPLOAD){
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!model.getObject().isDeleted());
|
||||
}
|
||||
});
|
||||
TextArea<String> commentArea = new TextArea<String>(COMMENT, comment){
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!model.getObject().isDeleted());
|
||||
}
|
||||
};
|
||||
form.add(commentArea);
|
||||
form.add(new OrValidator(upload, commentArea));
|
||||
form.add(initCancelButton());
|
||||
@ -84,6 +94,11 @@ public class ThesisCommentUploadPanel extends Panel {
|
||||
protected void onError(AjaxRequestTarget target, Form<?> form) {
|
||||
target.addComponent(feedbackPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onConfigure(){
|
||||
setEnabled(!model.getObject().isDeleted());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -69,6 +69,11 @@ public class FinalSeminarServiceImpl extends AbstractQueryService<FinalSeminar,
|
||||
System.out.println("FinalSeminarServiceImpl instantiating...");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<FinalSeminar> findAll(FilterParams params) {
|
||||
return finalSeminarRepo.findAll(fromParams(params)).iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date thesisUploadDeadline(FinalSeminar finalSeminar) {
|
||||
return daysService.workDaysAhead(finalSeminar.getStartDate(), generalSystemSettingsService.getFinalSeminarThesisUploadDaysAhead());
|
||||
@ -213,6 +218,7 @@ public class FinalSeminarServiceImpl extends AbstractQueryService<FinalSeminar,
|
||||
if(params.getExaminerFilter()!=null) {
|
||||
bb.and(examinerFilter(params.getExaminerFilter(), params.getExaminer()));
|
||||
}
|
||||
bb.and(LazyDeleted(params.isLazyDeleted()));
|
||||
return bb;
|
||||
}
|
||||
|
||||
@ -307,6 +313,10 @@ public class FinalSeminarServiceImpl extends AbstractQueryService<FinalSeminar,
|
||||
return save(seminar); //return saved seminar
|
||||
}
|
||||
|
||||
public BooleanExpression LazyDeleted(boolean deleted){
|
||||
return QFinalSeminar.finalSeminar.deleted.eq(deleted);
|
||||
}
|
||||
|
||||
public BooleanExpression projectOpposing(Project project){
|
||||
return QFinalSeminar.finalSeminar.oppositions.any().project.eq(project);
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import se.su.dsv.scipro.notifications.NotifyingService;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* @author fred-fri
|
||||
@ -15,6 +16,8 @@ import java.util.Date;
|
||||
*/
|
||||
public interface FinalSeminarService extends GenericService<FinalSeminar, Long>, QueryService<FinalSeminar, Long>, NotifyingService<FinalSeminar> {
|
||||
|
||||
Iterator<FinalSeminar> findAll(FilterParams params);
|
||||
|
||||
Date thesisUploadDeadline(FinalSeminar finalSeminar);
|
||||
boolean hasDeadlinePassed(FinalSeminar finalSeminar);
|
||||
boolean hasThesis(FinalSeminar finalSeminar);
|
||||
@ -60,6 +63,15 @@ public interface FinalSeminarService extends GenericService<FinalSeminar, Long>,
|
||||
private Employee reviewer;
|
||||
private boolean hasBeenReviewedByReviewer;
|
||||
private ExaminerReviewPanel.ExaminerFilter examinerFilter;
|
||||
private boolean lazyDeleted;
|
||||
|
||||
public boolean isLazyDeleted() {
|
||||
return lazyDeleted;
|
||||
}
|
||||
|
||||
public void setLazyDeleted(boolean lazyDeleted) {
|
||||
this.lazyDeleted = lazyDeleted;
|
||||
}
|
||||
|
||||
public boolean getHasBeenReviewedByReviewer() {
|
||||
return hasBeenReviewedByReviewer;
|
||||
|
@ -48,7 +48,7 @@ public class Scheduler {
|
||||
|
||||
workerSchedules.add(new WorkerSchedule<AbstractWorker>(ThesisCommentPunishWorker.class, "Inform about people who didnt upload thesis comments", daily(04, 00), dayPeriod(), ctx));
|
||||
|
||||
// workerSchedules.add(new WorkerSchedule<AbstractWorker>(ThesisUploadDeadlineWorker.class, "Final seminar upload deadline delete worker", daily(04, 00), dayPeriod(), ctx)); commenting out due to bug
|
||||
workerSchedules.add(new WorkerSchedule<AbstractWorker>(ThesisUploadDeadlineWorker.class, "Final seminar upload deadline delete worker", daily(04, 00), dayPeriod(), ctx)); // commenting out due to bug
|
||||
|
||||
/**
|
||||
* We may need this worker for changing other notification URLS in the future so Ill just comment it out here
|
||||
|
@ -43,11 +43,15 @@ public class ThesisUploadDeadlineWorker extends AbstractWorker {
|
||||
protected void doWork() {
|
||||
this.beginTransaction();
|
||||
|
||||
GeneralSystemSettings systemSettings = systemSettingsService.getGeneralSystemSettingsInstance();
|
||||
Date now = new Date();
|
||||
|
||||
try {
|
||||
Iterator<FinalSeminar> it = finalSeminarService.findByStartDateAfter(now).iterator();
|
||||
FinalSeminarService.FilterParams params = new FinalSeminarService.FilterParams();
|
||||
params.setFromDate(now);
|
||||
params.setLazyDeleted(false);
|
||||
|
||||
Iterator<FinalSeminar> it = finalSeminarService.findAll(params);
|
||||
|
||||
while (it.hasNext()) {
|
||||
|
||||
FinalSeminar fs = it.next();
|
||||
@ -58,7 +62,6 @@ public class ThesisUploadDeadlineWorker extends AbstractWorker {
|
||||
Date seminarUploadDeadline = finalSeminarService.thesisUploadDeadline(fs);
|
||||
|
||||
logger.info("Final seminar thesis upload deadline: " + seminarUploadDeadline);
|
||||
logger.info("Current time " + now);
|
||||
|
||||
if (seminarUploadDeadline.before(now)) {
|
||||
logger.info("Deadline has passed, ");
|
||||
@ -88,16 +91,17 @@ public class ThesisUploadDeadlineWorker extends AbstractWorker {
|
||||
try {
|
||||
Project p = fs.getProject();
|
||||
|
||||
finalSeminarService.delete(fs.getId());
|
||||
// finalSeminarService.delete(fs.getId());
|
||||
fs.setDeleted(true);
|
||||
|
||||
PageParameters pp = new PageParameters();
|
||||
pp.add(Project.PP_PROJECT_ID, String.valueOf(p.getId()));
|
||||
NotificationSource source = new NotificationSource();
|
||||
source.setMessage(p.getTitle());
|
||||
source.setSupervisorSource(sourceURL.getProjectSupervisorURL() + p.getId());
|
||||
source.setUserSource(sourceURL.getProjectStudentURL()+ p.getId());
|
||||
notificationController.notifyProject(p, ProjectEvent.Event.FINAL_SEMINAR_CANCELLED, source);
|
||||
|
||||
source.setUserSource(sourceURL.getProjectStudentURL() + p.getId());
|
||||
// notificationController.notifyProject(p, ProjectEvent.Event.FINAL_SEMINAR_CANCELLED, source);
|
||||
notificationController.notifySeminar(fs, SeminarEvent.Event.CANCELLED, source);
|
||||
logger.info("Deleted and notifications sent");
|
||||
} catch (Exception e){
|
||||
System.out.println(e);
|
||||
|
@ -0,0 +1,97 @@
|
||||
package se.su.dsv.scipro.seminar.panels;
|
||||
|
||||
import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
|
||||
import org.apache.wicket.feedback.FeedbackMessage;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.MultiLineLabel;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
import org.apache.wicket.markup.html.form.TextArea;
|
||||
import org.apache.wicket.markup.html.form.upload.FileUpload;
|
||||
import org.apache.wicket.markup.html.form.upload.FileUploadField;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.apache.wicket.util.tester.FormTester;
|
||||
import org.apache.wicket.util.tester.ITestPanelSource;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import se.su.dsv.scipro.SciProTest;
|
||||
import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.notifications.dataobject.NotificationSource;
|
||||
import se.su.dsv.scipro.test.SeminarBuilder;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Matchers.isA;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
public class SeminarCancelledInfoPanelTest extends SciProTest {
|
||||
|
||||
SeminarCancelledInfoPanel panel;
|
||||
FinalSeminar seminar;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
seminar = new SeminarBuilder().create();
|
||||
// seminar.setDeleted(true);
|
||||
when(finalSeminarService.findOne(isA(Long.class))).thenReturn(seminar);
|
||||
// startPanel();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRenders() throws Exception {
|
||||
seminar.setDeleted(true);
|
||||
startPanel();
|
||||
assertNotNull("Does not render", panel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPanelContainsWMC() throws Exception {
|
||||
seminar.setDeleted(true);
|
||||
startPanel();
|
||||
tester.assertComponent(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED), WebMarkupContainer.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPanelContainsLabel() throws Exception {
|
||||
seminar.setDeleted(true);
|
||||
startPanel();
|
||||
tester.assertComponent(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED, SeminarCancelledInfoPanel.CANCELLED_INFO), MultiLineLabel.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWMCIsVisibleWhenSeminarIsDeleted() throws Exception {
|
||||
seminar.setDeleted(true);
|
||||
startPanel();
|
||||
tester.assertVisible(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLabelIsVisibleWhenSeminarIsDeleted() throws Exception {
|
||||
seminar.setDeleted(true);
|
||||
startPanel();
|
||||
tester.assertVisible(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED, SeminarCancelledInfoPanel.CANCELLED_INFO));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWMCIsInvisibleWhenSeminarIsNotDeleted() throws Exception {
|
||||
seminar.setDeleted(false);
|
||||
startPanel();
|
||||
tester.assertInvisible(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLabelIsInvisibleWhenSeminarIsNotDeleted() throws Exception {
|
||||
seminar.setDeleted(false);
|
||||
startPanel();
|
||||
tester.assertInvisible(path(panel.getId(), SeminarCancelledInfoPanel.CANCELLED, SeminarCancelledInfoPanel.CANCELLED_INFO));
|
||||
}
|
||||
|
||||
private void startPanel() {
|
||||
panel = (SeminarCancelledInfoPanel) tester.startPanel(new ITestPanelSource() {
|
||||
@Override
|
||||
public Panel getTestPanel(final String panelId) {
|
||||
return new SeminarCancelledInfoPanel(panelId, Model.of(seminar));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user