fixed conflicts

This commit is contained in:
fred-fri 2013-06-10 12:55:32 +09:00
commit 5058fa759f
26 changed files with 292 additions and 23 deletions

@ -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";

@ -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>
<!--&lt;<span wicket:id="headSupervisorEmail"></span>&gt;-->

@ -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));
}
});
}
}