Skip to content

Commit 52c83c7

Browse files
author
Jan Schraff
committed
Added logic to workitem edit dialog to prevent modification of end
before start. It will display an error message and prevent the dialog from closing. Updates on change of time information.
1 parent dbbca1c commit 52c83c7

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

src/main/java/de/doubleslash/keeptime/view/ManageWorkController.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import javafx.scene.Node;
4141
import javafx.scene.control.ComboBox;
4242
import javafx.scene.control.DatePicker;
43+
import javafx.scene.control.Label;
4344
import javafx.scene.control.ListCell;
4445
import javafx.scene.control.ListView;
4546
import javafx.scene.control.Spinner;
@@ -80,8 +81,12 @@ public class ManageWorkController {
8081
@FXML
8182
private ComboBox<Project> projectComboBox;
8283

84+
@FXML
85+
private Label errorLabel;
86+
8387
private boolean comboChange;
8488
private Project selectedProject;
89+
private boolean valid;
8590

8691
private FilteredList<Project> filteredList;
8792

@@ -98,11 +103,42 @@ private void initialize() {
98103

99104
setUpTimeSpinner(endTimeSpinner);
100105

106+
setUpTimeRestriction();
107+
101108
setProjectUpComboBox();
102109

103110
Platform.runLater(() -> projectComboBox.requestFocus());
104111
}
105112

113+
private void setUpTimeRestriction() {
114+
final ChangeListener<Object> timeListener = (final ObservableValue<? extends Object> observable,
115+
final Object oldValue, final Object newValue) -> {
116+
if (startTimeSpinner.getValue() == null || endTimeSpinner.getValue() == null
117+
|| startDatePicker.getValue() == null || endDatePicker.getValue() == null) {
118+
return;
119+
}
120+
if (startDatePicker.getValue().isAfter(endDatePicker.getValue())
121+
|| (startDatePicker.getValue().isEqual(endDatePicker.getValue())
122+
&& startTimeSpinner.getValue().isAfter(endTimeSpinner.getValue()))) {
123+
errorLabel.setText("startDate has to be before endDate");
124+
valid = false;
125+
} else {
126+
errorLabel.setText("");
127+
valid = true;
128+
}
129+
130+
};
131+
startTimeSpinner.valueProperty().addListener(timeListener);
132+
endTimeSpinner.valueProperty().addListener(timeListener);
133+
endDatePicker.valueProperty().addListener(timeListener);
134+
startDatePicker.valueProperty().addListener(timeListener);
135+
136+
}
137+
138+
public boolean isValid() {
139+
return valid;
140+
}
141+
106142
private void setUpTimeSpinner(final Spinner<LocalTime> spinner) {
107143
spinner.focusedProperty().addListener((e) -> {
108144
final LocalTimeStringConverter stringConverter = new LocalTimeStringConverter(FormatStyle.MEDIUM);
@@ -281,6 +317,9 @@ public void initializeWith(final Work work) {
281317

282318
startTimeSpinner.getValueFactory().setValue(work.getStartTime().toLocalTime());
283319
endTimeSpinner.getValueFactory().setValue(work.getEndTime().toLocalTime());
320+
valid = !startDatePicker.getValue().isAfter(endDatePicker.getValue())
321+
|| (startDatePicker.getValue().isEqual(endDatePicker.getValue())
322+
&& startTimeSpinner.getValue().isAfter(endTimeSpinner.getValue()));
284323

285324
noteTextArea.setText(work.getNotes());
286325

@@ -290,6 +329,7 @@ public void initializeWith(final Work work) {
290329
setColor(projectComboBox.getEditor(), model.hoverBackgroundColor.get());
291330

292331
setTextColor(projectComboBox.getEditor(), model.hoverFontColor.get());
332+
293333
}
294334

295335
private void enableStrgA_combo() {

src/main/java/de/doubleslash/keeptime/view/ReportController.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,11 @@ private GridPane setUpEditWorkGridPane(final Work work, final Dialog<Work> dialo
344344
final ManageWorkController manageWorkController = loader.getController();
345345
manageWorkController.setModel(model);
346346
manageWorkController.initializeWith(work);
347-
347+
dialog.getDialogPane().lookupButton(ButtonType.OK).addEventFilter(ActionEvent.ACTION, event -> {
348+
if (!manageWorkController.isValid()) {
349+
event.consume();
350+
}
351+
});
348352
dialog.setResultConverter(dialogButton -> {
349353
if (dialogButton == ButtonType.OK) {
350354
return manageWorkController.getWorkFromUserInput();

src/main/resources/layouts/manage-work.fxml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
<Insets bottom="5.0" />
6060
</GridPane.margin>
6161
</Label>
62+
<Label fx:id="errorLabel" textFill="RED" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="5">
63+
<font>
64+
<Font name="Open Sans Regular" size="12.0" />
65+
</font>
66+
</Label>
6267
</children>
6368
<padding>
6469
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />

0 commit comments

Comments
 (0)