diff options
author | Stephan Schwaer | 2015-10-06 17:46:54 +0200 |
---|---|---|
committer | Stephan Schwaer | 2015-10-06 17:46:54 +0200 |
commit | ae95943aeac83135c7d1a8e8c5d726aef9a20a65 (patch) | |
tree | e45dee7a8443d19784f396b4e5ea5b8c52a10801 | |
parent | [client] Allow saving of lecture changes if date period is invalid but dates ... (diff) | |
download | tutor-module-ae95943aeac83135c7d1a8e8c5d726aef9a20a65.tar.gz tutor-module-ae95943aeac83135c7d1a8e8c5d726aef9a20a65.tar.xz tutor-module-ae95943aeac83135c7d1a8e8c5d726aef9a20a65.zip |
[client] Calculate and show the days between the selected dates in lecture creation wizard.
3 files changed, 48 insertions, 3 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java index e60ce55f..06692a7c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java @@ -5,13 +5,17 @@ import java.util.Date; import javax.swing.JSpinner; +import org.apache.log4j.Logger; import org.jdatepicker.impl.JDatePickerImpl; public class DateTimeHelper { private static final Calendar calendar = Calendar.getInstance(); + private final static Logger LOGGER = Logger.getLogger(DateTimeHelper.class); + /** - * Returns the Date composed of the given datePicker's date and the given timeSpinner's time + * Returns the Date composed of the given datePicker's date and the given + * timeSpinner's time * * @param datePicker to extract the date from * @param timeSpinner to extract the time from @@ -32,9 +36,24 @@ public class DateTimeHelper { Date date = calendar.getTime(); return date; } + public static Date addDaysTo(Date start, int days) { calendar.setTime(start); calendar.add(Calendar.DAY_OF_MONTH, days); return calendar.getTime(); } + + /** + * Calculate the number of days between dates + * + * @param start start date to use + * @param end end date + * @return Rounded number of days + */ + public static int calculatePeriodInDays(Date start, Date end) { + if (end.before(start)) + return 0; + return Math.round((end.getTime() - start.getTime()) / 86400000f); + } + } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java index 6bc33b84..aa21a214 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java @@ -30,6 +30,7 @@ public abstract class LectureCreationPageLayout extends WizardPage { protected final QDatePickerImpl endDate; protected final JSpinner startTime; protected final JSpinner endTime; + protected final QLabel lblCalcPeriod; private static final Properties pickerStrings = new Properties(); @@ -84,6 +85,11 @@ public abstract class LectureCreationPageLayout extends WizardPage { grid.add(endTime); grid.nextRow(); + grid.add(new QLabel("Dauer der Veranstaltung: ")); + lblCalcPeriod = new QLabel(); + grid.add(lblCalcPeriod, 2); + grid.nextRow(); + grid.finish(true); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java index b341f95f..cd229635 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureCreationPage.java @@ -41,10 +41,12 @@ public class LectureCreationPage extends LectureCreationPageLayout { public void removeUpdate(DocumentEvent e) { changedUpdate(e); } + @Override public void insertUpdate(DocumentEvent e) { changedUpdate(e); } + @Override public void changedUpdate(DocumentEvent e) { reactToUserInput(); @@ -72,6 +74,7 @@ public class LectureCreationPage extends LectureCreationPageLayout { endTime.addChangeListener(changeListener); startDate.addActionListener(actionListener); endDate.addActionListener(actionListener); + calculateDatePeriod(); } @Override @@ -86,10 +89,26 @@ public class LectureCreationPage extends LectureCreationPageLayout { */ private boolean reactToUserInput() { boolean b = isPageValid(); + calculateDatePeriod(); setPageComplete(b); return b; } + /** + * Calculate the days between the selected dates and update the corresponding label. + */ + private void calculateDatePeriod() { + Date start = DateTimeHelper.getDateFrom(startDate, startTime); + Date end = DateTimeHelper.getDateFrom(endDate, endTime); + if (end.before(start)) { + lblCalcPeriod.setText("Endzeitpunkt ist vor Startzeitpunkt!"); + } else { + int numberOfDays = DateTimeHelper.calculatePeriodInDays(start, end); + String dayString = numberOfDays == 1 ? " Tag" : " Tage"; + lblCalcPeriod.setText(numberOfDays + dayString); + } + } + private boolean isPageValid() { if (lectureNameTextField.getText().isEmpty()) { setWarningMessage("Geben Sie einen Veranstaltungsnamen ein."); @@ -108,7 +127,7 @@ public class LectureCreationPage extends LectureCreationPageLayout { final Date end = DateTimeHelper.getDateFrom(endDate, endTime); if (start.after(end)) { - setWarningMessage("Startzeit is nach Endzeit!"); + setWarningMessage("Startzeit ist nach Endzeit!"); return false; } else if (now.after(end)) { setWarningMessage("Endzeit liegt in die Vergangenheit!"); @@ -126,7 +145,8 @@ public class LectureCreationPage extends LectureCreationPageLayout { } } String nextText; - nextText = state.image == null ? ", um eine Virtuelle Maschine auszuwählen" : " für Berechtigungen oder 'Fertigstellen'."; + nextText = state.image == null ? ", um eine Virtuelle Maschine auszuwählen" + : " für Berechtigungen oder 'Fertigstellen'."; setDescription("Klicken Sie auf 'Weiter' " + nextText); return true; } |