Clean code update 1 #1

Merged
nilzbu merged 8 commits from cq_1 into master 2025-07-13 16:42:28 +00:00
Showing only changes of commit acb96dc1c6 - Show all commits

View File

@@ -30,122 +30,117 @@ public class TimeEntryView extends VerticalLayout {
private final TimeEntryService timeEntryService; private final TimeEntryService timeEntryService;
private final UserRepository userRepository; private final UserRepository userRepository;
private User currentUser;
private final DatePicker datePicker = new DatePicker("Date"); private final DatePicker datePicker = new DatePicker("Date");
private final TimePicker startTimePicker = new TimePicker("Start Time"); private final TimePicker startTimePicker = new TimePicker("Start Time");
private final TimePicker endTimePicker = new TimePicker("End Time"); private final TimePicker endTimePicker = new TimePicker("End Time");
private final NumberField breakMinutesField = new NumberField("Break (minutes)"); private final NumberField breakField = new NumberField("Break (min)");
private final NumberField targetMinutesField = new NumberField("Target Time (minutes)"); private final NumberField targetField = new NumberField("Target Time (min)");
private final TextArea commentField = new TextArea("Comment"); private final TextArea commentArea = new TextArea("Comment");
private final ComboBox<DayStatus> statusComboBox = new ComboBox<>("Status"); private final ComboBox<DayStatus> statusCombo = new ComboBox<>("Status");
private final Button saveButton = new Button("Save"); private final Button saveBtn = new Button("Save");
private final Button updateButton = new Button("Update"); private final Button updateBtn = new Button("Update");
private final Button deleteButton = new Button("Delete"); private final Button deleteBtn = new Button("Delete");
private final Grid<TimeEntry> entryGrid = new Grid<>(TimeEntry.class, false); private final Grid<TimeEntry> entryGrid = new Grid<>(TimeEntry.class, false);
private TimeEntry selectedEntry = null; private TimeEntry selectedEntry = null;
private User currentUser;
public TimeEntryView(TimeEntryService timeEntryService, UserRepository userRepository) { public TimeEntryView(TimeEntryService timeEntryService, UserRepository userRepository) {
this.timeEntryService = timeEntryService; this.timeEntryService = timeEntryService;
this.userRepository = userRepository; this.userRepository = userRepository;
initializeCurrentUser(); initializeUser();
configureFields(); configureFormFields();
configureButtons(); configureButtons();
configureGrid(); configureGrid();
datePicker.addValueChangeListener(e -> checkIfDateAlreadyExists()); datePicker.addValueChangeListener(e -> toggleSaveButton());
add(createFormLayout(), createButtonLayout(), entryGrid); add(buildFormLayout(), buildButtonLayout(), entryGrid);
refreshGrid(); refreshGrid();
checkIfDateAlreadyExists(); // Initiale Prüfung toggleSaveButton();
} }
private void initializeCurrentUser() { private void initializeUser() {
String username = SecurityContextHolder.getContext().getAuthentication().getName(); String username = SecurityContextHolder.getContext().getAuthentication().getName();
this.currentUser = userRepository.findByUsername(username) this.currentUser = userRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException("User not found")); .orElseThrow(() -> new RuntimeException("User not found"));
} }
private void configureFields() { private void configureFormFields() {
datePicker.setValue(LocalDate.now()); datePicker.setValue(LocalDate.now());
breakMinutesField.setValue(30.0); breakField.setValue(30.0);
targetMinutesField.setValue(480.0); targetField.setValue(480.0);
statusCombo.setItems(DayStatus.values());
statusComboBox.setItems(DayStatus.values()); statusCombo.setValue(DayStatus.REMOTE);
statusComboBox.setValue(DayStatus.REMOTE);
} }
private HorizontalLayout createFormLayout() { private HorizontalLayout buildFormLayout() {
return new HorizontalLayout( return new HorizontalLayout(datePicker, startTimePicker, endTimePicker,
datePicker, breakField, targetField, commentArea, statusCombo);
startTimePicker,
endTimePicker,
breakMinutesField,
targetMinutesField,
commentField,
statusComboBox
);
} }
private HorizontalLayout createButtonLayout() { private HorizontalLayout buildButtonLayout() {
updateButton.setEnabled(false); updateBtn.setEnabled(false);
deleteButton.setEnabled(false); deleteBtn.setEnabled(false);
return new HorizontalLayout(saveButton, updateButton, deleteButton); return new HorizontalLayout(saveBtn, updateBtn, deleteBtn);
} }
private void configureButtons() { private void configureButtons() {
saveButton.addClickListener(e -> { saveBtn.addClickListener(e -> saveEntry());
if (!isDateAvailable(datePicker.getValue())) { updateBtn.addClickListener(e -> updateEntry());
Notification.show("An entry already exists for this date."); deleteBtn.addClickListener(e -> deleteEntry());
return; }
}
TimeEntry entry = TimeEntry.builder() private void saveEntry() {
.user(currentUser) if (!isDateAvailable(datePicker.getValue())) {
.date(datePicker.getValue()) Notification.show("An entry already exists for this date.");
.startTime(startTimePicker.getValue()) return;
.endTime(endTimePicker.getValue()) }
.pauseMinutes(breakMinutesField.getValue().intValue())
.targetMinutes(targetMinutesField.getValue().intValue())
.status(statusComboBox.getValue())
.comment(commentField.getValue())
.build();
timeEntryService.save(entry); TimeEntry entry = TimeEntry.builder()
clearForm(); .user(currentUser)
refreshGrid(); .date(datePicker.getValue())
Notification.show("Entry saved"); .startTime(startTimePicker.getValue())
}); .endTime(endTimePicker.getValue())
.pauseMinutes(breakField.getValue().intValue())
.targetMinutes(targetField.getValue().intValue())
.status(statusCombo.getValue())
.comment(commentArea.getValue())
.build();
updateButton.addClickListener(e -> { timeEntryService.save(entry);
if (selectedEntry == null) return; clearForm();
refreshGrid();
Notification.show("Entry saved");
}
selectedEntry.setDate(datePicker.getValue()); private void updateEntry() {
selectedEntry.setStartTime(startTimePicker.getValue()); if (selectedEntry == null) return;
selectedEntry.setEndTime(endTimePicker.getValue());
selectedEntry.setPauseMinutes(breakMinutesField.getValue().intValue());
selectedEntry.setTargetMinutes(targetMinutesField.getValue().intValue());
selectedEntry.setStatus(statusComboBox.getValue());
selectedEntry.setComment(commentField.getValue());
timeEntryService.save(selectedEntry); selectedEntry.setDate(datePicker.getValue());
clearForm(); selectedEntry.setStartTime(startTimePicker.getValue());
refreshGrid(); selectedEntry.setEndTime(endTimePicker.getValue());
Notification.show("Entry updated"); selectedEntry.setPauseMinutes(breakField.getValue().intValue());
}); selectedEntry.setTargetMinutes(targetField.getValue().intValue());
selectedEntry.setStatus(statusCombo.getValue());
selectedEntry.setComment(commentArea.getValue());
deleteButton.addClickListener(e -> { timeEntryService.save(selectedEntry);
if (selectedEntry == null) return; clearForm();
refreshGrid();
Notification.show("Entry updated");
}
timeEntryService.delete(selectedEntry); private void deleteEntry() {
clearForm(); if (selectedEntry == null) return;
refreshGrid();
Notification.show("Entry deleted"); timeEntryService.delete(selectedEntry);
}); clearForm();
refreshGrid();
Notification.show("Entry deleted");
} }
private void configureGrid() { private void configureGrid() {
@@ -159,53 +154,49 @@ public class TimeEntryView extends VerticalLayout {
entryGrid.addColumn(TimeEntry::getComment).setHeader("Comment"); entryGrid.addColumn(TimeEntry::getComment).setHeader("Comment");
entryGrid.addColumn(timeEntryService::calculateDeviation).setHeader("Deviation (min)"); entryGrid.addColumn(timeEntryService::calculateDeviation).setHeader("Deviation (min)");
entryGrid.asSingleSelect().addValueChangeListener(event -> { entryGrid.asSingleSelect().addValueChangeListener(event -> populateForm(event.getValue()));
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();
}
});
} }
private void refreshGrid() { private void refreshGrid() {
entryGrid.setItems(timeEntryService.getEntriesForUser(currentUser)); 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() { private void clearForm() {
selectedEntry = null; selectedEntry = null;
datePicker.setValue(LocalDate.now()); datePicker.setValue(LocalDate.now());
startTimePicker.clear(); startTimePicker.clear();
endTimePicker.clear(); endTimePicker.clear();
breakMinutesField.setValue(30.0); breakField.setValue(30.0);
targetMinutesField.setValue(480.0); targetField.setValue(480.0);
statusComboBox.setValue(DayStatus.REMOTE); statusCombo.setValue(DayStatus.REMOTE);
commentField.clear(); commentArea.clear();
updateButton.setEnabled(false); updateBtn.setEnabled(false);
deleteButton.setEnabled(false); deleteBtn.setEnabled(false);
checkIfDateAlreadyExists(); toggleSaveButton();
} }
private void checkIfDateAlreadyExists() { private void toggleSaveButton() {
LocalDate date = datePicker.getValue(); saveBtn.setEnabled(isDateAvailable(datePicker.getValue()));
if (!isDateAvailable(date)) {
saveButton.setEnabled(false);
} else {
saveButton.setEnabled(true);
}
} }
private boolean isDateAvailable(LocalDate date) { private boolean isDateAvailable(LocalDate date) {