blob: 9bb9140922bb7383a9584634d036ddf9f8cd8816 (
plain) (
tree)
|
|
package org.openslx.dozmod.gui.wizard.page;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.helper.DateTimeHelper;
import org.openslx.dozmod.gui.helper.TextChangeListener;
import org.openslx.dozmod.gui.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.layout.LectureCreationPageLayout;
import org.openslx.dozmod.state.LectureWizardState;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.util.FormatHelper;
/**
* First page for creating a new lecture.
* Used to set name, description and start- and endtime
*/
@SuppressWarnings("serial")
public class LectureCreationPage extends LectureCreationPageLayout {
private final static Logger LOGGER = Logger.getLogger(LectureCreationPage.class);
private LectureWizardState state = null;
/**
* Page for creating lectures
*/
public LectureCreationPage(Wizard wizard, LectureWizardState state) {
super(wizard, state.image != null ? state.image.imageName : "Neu");
this.state = state;
// listener for the text fields
final TextChangeListener docListener = new TextChangeListener() {
@Override
public void changed() {
reactToUserInput();
}
};
txtName.getDocument().addDocumentListener(docListener);
txtDescription.getDocument().addDocumentListener(docListener);
// listeners for the date pickers
final ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
reactToUserInput();
}
};
// listeners for the time pickers
final ChangeListener changeListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
reactToUserInput();
}
};
spnStartTime.addChangeListener(changeListener);
spnEndTime.addChangeListener(changeListener);
dtpStartDate.addActionListener(actionListener);
dtpEndDate.addActionListener(actionListener);
calculateDatePeriod();
}
@Override
protected boolean wantNextOrFinish() {
return reactToUserInput();
}
/**
* Called by event listeners. This will set guidance message or error
* message and call setPageComplete(bool) accordingly.
* The state will be updated if the fields are valid.
*/
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(dtpStartDate, spnStartTime);
Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime);
if (end.before(start)) {
lblCalcPeriod.setText("Endzeitpunkt ist vor Startzeitpunkt!");
} else {
int numberOfDays = DateTimeHelper.calculatePeriodInDays(start, end);
lblCalcPeriod.setText(numberOfDays + "Tag(e)");
lblCalcPeriod.setForeground(numberOfDays < 7 ? Color.RED : null);
}
}
private boolean isPageValid() {
if (txtName.getText().isEmpty()) {
setWarningMessage("Geben Sie einen Veranstaltungsnamen ein.");
return false;
} else {
state.name = txtName.getText();
}
if (txtDescription.getText().isEmpty()) {
setWarningMessage("Fügen Sie eine Beschreibung hinzu.");
return false;
} else {
state.description = txtDescription.getText();
}
final Date now = new Date();
final Date start = DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime);
final Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime);
if (start.after(end)) {
setWarningMessage("Startzeit ist nach Endzeit!");
return false;
} else if (now.after(end)) {
setWarningMessage("Endzeit liegt in die Vergangenheit!");
return false;
} else {
int validityPeriod = Session.getSatelliteConfig().getMaxLectureValidityDays();
Date validityPeriodEnd = DateTimeHelper.addDaysTo(start, validityPeriod); // all good, save them both
if (end.after(validityPeriodEnd)) {
setWarningMessage("Endzeit liegt nach dem spätest möglichen Datum: "
+ FormatHelper.shortDate(validityPeriodEnd.getTime() / 1000L));
return false;
} else {
state.start = start;
state.end = end;
}
}
String nextText;
nextText = state.image == null ? ", um eine Virtuelle Maschine auszuwählen"
: " für Berechtigungen oder 'Fertigstellen'.";
setDescription("Klicken Sie auf 'Weiter' " + nextText);
return true;
}
}
|