From acb96dc1c6bbe050b71e2bce9de05460da20a38e Mon Sep 17 00:00:00 2001 From: Nils Burghardt Date: Sun, 13 Jul 2025 18:27:21 +0200 Subject: [PATCH] upgrade clean code TimeEntryView --- .../mytimetracker/ui/view/TimeEntryView.java | 211 +++++++++--------- 1 file changed, 101 insertions(+), 110 deletions(-) diff --git a/src/main/java/de/nilzbu/mytimetracker/ui/view/TimeEntryView.java b/src/main/java/de/nilzbu/mytimetracker/ui/view/TimeEntryView.java index c11cf0d..e1043f7 100644 --- a/src/main/java/de/nilzbu/mytimetracker/ui/view/TimeEntryView.java +++ b/src/main/java/de/nilzbu/mytimetracker/ui/view/TimeEntryView.java @@ -30,122 +30,117 @@ public class TimeEntryView extends VerticalLayout { private final TimeEntryService timeEntryService; private final UserRepository userRepository; + private User currentUser; private final DatePicker datePicker = new DatePicker("Date"); private final TimePicker startTimePicker = new TimePicker("Start Time"); private final TimePicker endTimePicker = new TimePicker("End Time"); - private final NumberField breakMinutesField = new NumberField("Break (minutes)"); - private final NumberField targetMinutesField = new NumberField("Target Time (minutes)"); - private final TextArea commentField = new TextArea("Comment"); - private final ComboBox statusComboBox = new ComboBox<>("Status"); + private final NumberField breakField = new NumberField("Break (min)"); + private final NumberField targetField = new NumberField("Target Time (min)"); + private final TextArea commentArea = new TextArea("Comment"); + private final ComboBox statusCombo = new ComboBox<>("Status"); - private final Button saveButton = new Button("Save"); - private final Button updateButton = new Button("Update"); - private final Button deleteButton = new Button("Delete"); + private final Button saveBtn = new Button("Save"); + private final Button updateBtn = new Button("Update"); + private final Button deleteBtn = new Button("Delete"); private final Grid entryGrid = new Grid<>(TimeEntry.class, false); - private TimeEntry selectedEntry = null; - private User currentUser; public TimeEntryView(TimeEntryService timeEntryService, UserRepository userRepository) { this.timeEntryService = timeEntryService; this.userRepository = userRepository; - initializeCurrentUser(); - configureFields(); + initializeUser(); + configureFormFields(); configureButtons(); configureGrid(); - datePicker.addValueChangeListener(e -> checkIfDateAlreadyExists()); + datePicker.addValueChangeListener(e -> toggleSaveButton()); - add(createFormLayout(), createButtonLayout(), entryGrid); + add(buildFormLayout(), buildButtonLayout(), entryGrid); refreshGrid(); - checkIfDateAlreadyExists(); // Initiale Prüfung + toggleSaveButton(); } - private void initializeCurrentUser() { + private void initializeUser() { String username = SecurityContextHolder.getContext().getAuthentication().getName(); this.currentUser = userRepository.findByUsername(username) .orElseThrow(() -> new RuntimeException("User not found")); } - private void configureFields() { + private void configureFormFields() { datePicker.setValue(LocalDate.now()); - breakMinutesField.setValue(30.0); - targetMinutesField.setValue(480.0); - - statusComboBox.setItems(DayStatus.values()); - statusComboBox.setValue(DayStatus.REMOTE); + breakField.setValue(30.0); + targetField.setValue(480.0); + statusCombo.setItems(DayStatus.values()); + statusCombo.setValue(DayStatus.REMOTE); } - private HorizontalLayout createFormLayout() { - return new HorizontalLayout( - datePicker, - startTimePicker, - endTimePicker, - breakMinutesField, - targetMinutesField, - commentField, - statusComboBox - ); + private HorizontalLayout buildFormLayout() { + return new HorizontalLayout(datePicker, startTimePicker, endTimePicker, + breakField, targetField, commentArea, statusCombo); } - private HorizontalLayout createButtonLayout() { - updateButton.setEnabled(false); - deleteButton.setEnabled(false); - return new HorizontalLayout(saveButton, updateButton, deleteButton); + private HorizontalLayout buildButtonLayout() { + updateBtn.setEnabled(false); + deleteBtn.setEnabled(false); + return new HorizontalLayout(saveBtn, updateBtn, deleteBtn); } private void configureButtons() { - saveButton.addClickListener(e -> { - if (!isDateAvailable(datePicker.getValue())) { - Notification.show("An entry already exists for this date."); - return; - } + saveBtn.addClickListener(e -> saveEntry()); + updateBtn.addClickListener(e -> updateEntry()); + deleteBtn.addClickListener(e -> deleteEntry()); + } - TimeEntry entry = TimeEntry.builder() - .user(currentUser) - .date(datePicker.getValue()) - .startTime(startTimePicker.getValue()) - .endTime(endTimePicker.getValue()) - .pauseMinutes(breakMinutesField.getValue().intValue()) - .targetMinutes(targetMinutesField.getValue().intValue()) - .status(statusComboBox.getValue()) - .comment(commentField.getValue()) - .build(); + private void saveEntry() { + if (!isDateAvailable(datePicker.getValue())) { + Notification.show("An entry already exists for this date."); + return; + } - timeEntryService.save(entry); - clearForm(); - refreshGrid(); - Notification.show("Entry saved"); - }); + TimeEntry entry = TimeEntry.builder() + .user(currentUser) + .date(datePicker.getValue()) + .startTime(startTimePicker.getValue()) + .endTime(endTimePicker.getValue()) + .pauseMinutes(breakField.getValue().intValue()) + .targetMinutes(targetField.getValue().intValue()) + .status(statusCombo.getValue()) + .comment(commentArea.getValue()) + .build(); - updateButton.addClickListener(e -> { - if (selectedEntry == null) return; + timeEntryService.save(entry); + clearForm(); + refreshGrid(); + Notification.show("Entry saved"); + } - selectedEntry.setDate(datePicker.getValue()); - selectedEntry.setStartTime(startTimePicker.getValue()); - selectedEntry.setEndTime(endTimePicker.getValue()); - selectedEntry.setPauseMinutes(breakMinutesField.getValue().intValue()); - selectedEntry.setTargetMinutes(targetMinutesField.getValue().intValue()); - selectedEntry.setStatus(statusComboBox.getValue()); - selectedEntry.setComment(commentField.getValue()); + private void updateEntry() { + if (selectedEntry == null) return; - timeEntryService.save(selectedEntry); - clearForm(); - refreshGrid(); - Notification.show("Entry updated"); - }); + selectedEntry.setDate(datePicker.getValue()); + selectedEntry.setStartTime(startTimePicker.getValue()); + selectedEntry.setEndTime(endTimePicker.getValue()); + selectedEntry.setPauseMinutes(breakField.getValue().intValue()); + selectedEntry.setTargetMinutes(targetField.getValue().intValue()); + selectedEntry.setStatus(statusCombo.getValue()); + selectedEntry.setComment(commentArea.getValue()); - deleteButton.addClickListener(e -> { - if (selectedEntry == null) return; + timeEntryService.save(selectedEntry); + clearForm(); + refreshGrid(); + Notification.show("Entry updated"); + } - timeEntryService.delete(selectedEntry); - clearForm(); - refreshGrid(); - Notification.show("Entry deleted"); - }); + private void deleteEntry() { + if (selectedEntry == null) return; + + timeEntryService.delete(selectedEntry); + clearForm(); + refreshGrid(); + Notification.show("Entry deleted"); } private void configureGrid() { @@ -159,53 +154,49 @@ public class TimeEntryView extends VerticalLayout { entryGrid.addColumn(TimeEntry::getComment).setHeader("Comment"); entryGrid.addColumn(timeEntryService::calculateDeviation).setHeader("Deviation (min)"); - entryGrid.asSingleSelect().addValueChangeListener(event -> { - selectedEntry = event.getValue(); - if (selectedEntry != null) { - datePicker.setValue(selectedEntry.getDate()); - startTimePicker.setValue(selectedEntry.getStartTime()); - endTimePicker.setValue(selectedEntry.getEndTime()); - breakMinutesField.setValue((double) selectedEntry.getPauseMinutes()); - targetMinutesField.setValue((double) selectedEntry.getTargetMinutes()); - statusComboBox.setValue(selectedEntry.getStatus()); - commentField.setValue(selectedEntry.getComment() != null ? selectedEntry.getComment() : ""); - - updateButton.setEnabled(true); - deleteButton.setEnabled(true); - saveButton.setEnabled(false); - } else { - updateButton.setEnabled(false); - deleteButton.setEnabled(false); - checkIfDateAlreadyExists(); - } - }); + entryGrid.asSingleSelect().addValueChangeListener(event -> populateForm(event.getValue())); } private void refreshGrid() { entryGrid.setItems(timeEntryService.getEntriesForUser(currentUser)); } + private void populateForm(TimeEntry entry) { + selectedEntry = entry; + + if (entry != null) { + datePicker.setValue(entry.getDate()); + startTimePicker.setValue(entry.getStartTime()); + endTimePicker.setValue(entry.getEndTime()); + breakField.setValue((double) entry.getPauseMinutes()); + targetField.setValue((double) entry.getTargetMinutes()); + statusCombo.setValue(entry.getStatus()); + commentArea.setValue(entry.getComment() != null ? entry.getComment() : ""); + + updateBtn.setEnabled(true); + deleteBtn.setEnabled(true); + saveBtn.setEnabled(false); + } else { + clearForm(); + } + } + private void clearForm() { selectedEntry = null; datePicker.setValue(LocalDate.now()); startTimePicker.clear(); endTimePicker.clear(); - breakMinutesField.setValue(30.0); - targetMinutesField.setValue(480.0); - statusComboBox.setValue(DayStatus.REMOTE); - commentField.clear(); - updateButton.setEnabled(false); - deleteButton.setEnabled(false); - checkIfDateAlreadyExists(); + breakField.setValue(30.0); + targetField.setValue(480.0); + statusCombo.setValue(DayStatus.REMOTE); + commentArea.clear(); + updateBtn.setEnabled(false); + deleteBtn.setEnabled(false); + toggleSaveButton(); } - private void checkIfDateAlreadyExists() { - LocalDate date = datePicker.getValue(); - if (!isDateAvailable(date)) { - saveButton.setEnabled(false); - } else { - saveButton.setEnabled(true); - } + private void toggleSaveButton() { + saveBtn.setEnabled(isDateAvailable(datePicker.getValue())); } private boolean isDateAvailable(LocalDate date) {