2 Commits

Author SHA1 Message Date
Nils Burghardt
6b57a0c5e5 upgrade clean code UserManagementView 2025-07-13 18:30:20 +02:00
Nils Burghardt
0f005ca130 Remove DB file from Git and add to .gitignore 2025-07-13 18:28:10 +02:00
3 changed files with 53 additions and 48 deletions

1
.gitignore vendored
View File

@@ -93,3 +93,4 @@ coverage/
*.bak *.bak
*.tmpdata/*.mv.db *.tmpdata/*.mv.db
src/main/frontend/generated/ src/main/frontend/generated/
/data/*.mv.db

Binary file not shown.

View File

@@ -18,37 +18,37 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.List; import java.util.List;
@Route(value = "admin/users", layout = MainLayout.class) @Route(value = "admin/user-management", layout = MainLayout.class)
@PageTitle("Benutzerverwaltung") @PageTitle("User Management")
@RolesAllowed("ROLE_ADMIN") @RolesAllowed("ROLE_ADMIN")
public class UserAdminView extends VerticalLayout { public class UserManagementView extends VerticalLayout {
private final UserRepository userRepository; private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final Grid<User> userGrid = new Grid<>(User.class, false); private final Grid<User> userGrid = new Grid<>(User.class, false);
private final TextField usernameField = new TextField("Benutzername"); private final TextField usernameField = new TextField("Username");
private final PasswordField passwordField = new PasswordField("Passwort"); private final PasswordField passwordField = new PasswordField("Password");
private final MultiSelectComboBox<String> rolesField = new MultiSelectComboBox<>("Rollen"); private final MultiSelectComboBox<String> rolesField = new MultiSelectComboBox<>("Roles");
private final Button saveButton = new Button("Speichern"); private final Button saveButton = new Button("Save");
private final Button deleteButton = new Button("Löschen"); private final Button deleteButton = new Button("Delete");
private User selectedUser; private User selectedUser;
public UserAdminView(UserRepository userRepository, PasswordEncoder passwordEncoder) { public UserManagementView(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository; this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder; this.passwordEncoder = passwordEncoder;
add(new H2("Benutzerverwaltung")); add(new H2("User Management"));
configureGrid(); setupUserGrid();
configureForm(); setupFormLayout();
refreshGrid(); loadUsersToGrid();
} }
private void configureGrid() { private void setupUserGrid() {
userGrid.addColumn(User::getUsername).setHeader("Benutzername"); userGrid.addColumn(User::getUsername).setHeader("Username");
userGrid.addColumn(user -> String.join(", ", user.getRoles())).setHeader("Rollen"); userGrid.addColumn(user -> String.join(", ", user.getRoles())).setHeader("Roles");
userGrid.setSelectionMode(Grid.SelectionMode.SINGLE); userGrid.setSelectionMode(Grid.SelectionMode.SINGLE);
userGrid.setWidthFull(); userGrid.setWidthFull();
@@ -64,50 +64,54 @@ public class UserAdminView extends VerticalLayout {
add(userGrid); add(userGrid);
} }
private void configureForm() { private void setupFormLayout() {
rolesField.setItems("ROLE_USER", "ROLE_ADMIN"); rolesField.setItems("ROLE_USER", "ROLE_ADMIN");
saveButton.addClickListener(e -> { saveButton.addClickListener(e -> saveOrUpdateUser());
if (selectedUser != null) { deleteButton.addClickListener(e -> deleteUser());
selectedUser.setUsername(usernameField.getValue());
selectedUser.setRoles(rolesField.getValue());
if (!passwordField.isEmpty()) {
selectedUser.setPassword(passwordEncoder.encode(passwordField.getValue()));
}
userRepository.save(selectedUser);
} else {
User newUser = User.builder()
.username(usernameField.getValue())
.roles(rolesField.getValue())
.enabled(true)
.locked(false)
.password(passwordEncoder.encode(passwordField.getValue()))
.build();
userRepository.save(newUser);
}
clearForm();
refreshGrid();
});
deleteButton.addClickListener(e -> {
if (selectedUser != null) {
userRepository.delete(selectedUser);
clearForm();
refreshGrid();
}
});
HorizontalLayout formLayout = new HorizontalLayout(usernameField, passwordField, rolesField, saveButton, deleteButton); HorizontalLayout formLayout = new HorizontalLayout(usernameField, passwordField, rolesField, saveButton, deleteButton);
formLayout.setWidthFull(); formLayout.setWidthFull();
add(formLayout); add(formLayout);
} }
private void refreshGrid() { private void saveOrUpdateUser() {
if (selectedUser != null) {
selectedUser.setUsername(usernameField.getValue());
selectedUser.setRoles(rolesField.getValue());
if (!passwordField.isEmpty()) {
selectedUser.setPassword(passwordEncoder.encode(passwordField.getValue()));
}
userRepository.save(selectedUser);
} else {
User newUser = User.builder()
.username(usernameField.getValue())
.roles(rolesField.getValue())
.enabled(true)
.locked(false)
.password(passwordEncoder.encode(passwordField.getValue()))
.build();
userRepository.save(newUser);
}
resetFormFields();
loadUsersToGrid();
}
private void deleteUser() {
if (selectedUser != null) {
userRepository.delete(selectedUser);
resetFormFields();
loadUsersToGrid();
}
}
private void loadUsersToGrid() {
List<User> users = userRepository.findAll(); List<User> users = userRepository.findAll();
userGrid.setItems(users); userGrid.setItems(users);
} }
private void clearForm() { private void resetFormFields() {
selectedUser = null; selectedUser = null;
usernameField.clear(); usernameField.clear();
passwordField.clear(); passwordField.clear();