package com.duesk; import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.*; import java.util.ArrayList; import java.util.List; import com.duesk.api.ApiClient; import com.duesk.api.models.Group; public class GroupManagerDialog extends JDialog { private List groups = new ArrayList<>(); private GroupTableModel tableModel; private JTextField newGroupField; public GroupManagerDialog(JFrame parent) { super(parent, "Gruppenverwaltung", true); setSize(500, 400); setLocationRelativeTo(parent); initComponents(); loadGroups(); } private void initComponents() { setLayout(new BorderLayout()); // Oberer Bereich JPanel topPanel = new JPanel(new FlowLayout()); topPanel.add(new JLabel("Neue Gruppe:")); newGroupField = new JTextField(20); topPanel.add(newGroupField); JButton addBtn = new JButton("Hinzufügen"); addBtn.addActionListener(e -> addGroup()); topPanel.add(addBtn); add(topPanel, BorderLayout.NORTH); // Tabelle tableModel = new GroupTableModel(); JTable groupTable = new JTable(tableModel); add(new JScrollPane(groupTable), BorderLayout.CENTER); // Unterer Bereich JPanel bottomPanel = new JPanel(); JButton deleteBtn = new JButton("Löschen"); deleteBtn.addActionListener(e -> deleteGroup()); JButton closeBtn = new JButton("Schließen"); closeBtn.addActionListener(e -> dispose()); bottomPanel.add(deleteBtn); bottomPanel.add(closeBtn); add(bottomPanel, BorderLayout.SOUTH); } private void loadGroups() { SwingWorker, Void> worker = new SwingWorker, Void>() { @Override protected List doInBackground() throws Exception { return ApiClient.getGroups(); } @Override protected void done() { try { groups = get(); if (groups != null) { tableModel.setGroups(groups); } } catch (Exception e) { JOptionPane.showMessageDialog(GroupManagerDialog.this, "Fehler beim Laden: " + e.getMessage()); } } }; worker.execute(); } private void addGroup() { String name = newGroupField.getText().trim(); if (name.isEmpty()) { JOptionPane.showMessageDialog(this, "Bitte Gruppennamen eingeben!"); return; } SwingWorker worker = new SwingWorker() { @Override protected Boolean doInBackground() throws Exception { return ApiClient.createGroup(name); } @Override protected void done() { try { if (get()) { newGroupField.setText(""); loadGroups(); } else { JOptionPane.showMessageDialog(GroupManagerDialog.this, "Fehler beim Erstellen der Gruppe"); } } catch (Exception e) { JOptionPane.showMessageDialog(GroupManagerDialog.this, "Fehler: " + e.getMessage()); } } }; worker.execute(); } private void deleteGroup() { int selectedRow = tableModel.getSelectedRow(); if (selectedRow >= 0 && selectedRow < groups.size()) { Group group = groups.get(selectedRow); int confirm = JOptionPane.showConfirmDialog(this, "Möchten Sie die Gruppe '" + group.getName() + "' wirklich löschen?", "Gruppe löschen", JOptionPane.YES_NO_OPTION); if (confirm == JOptionPane.YES_OPTION) { SwingWorker worker = new SwingWorker() { @Override protected Boolean doInBackground() throws Exception { return ApiClient.deleteGroup(group.getGroupId()); } @Override protected void done() { try { if (get()) { loadGroups(); } else { JOptionPane.showMessageDialog(GroupManagerDialog.this, "Fehler beim Löschen der Gruppe"); } } catch (Exception e) { JOptionPane.showMessageDialog(GroupManagerDialog.this, "Fehler: " + e.getMessage()); } } }; worker.execute(); } } else { JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Gruppe aus."); } } private class GroupTableModel extends AbstractTableModel { private final String[] columns = {"Gruppenname"}; private List data = new ArrayList<>(); private int selectedRow = -1; public void setGroups(List groups) { this.data = groups; fireTableDataChanged(); } public void setSelectedRow(int row) { this.selectedRow = row; } public int getSelectedRow() { return selectedRow; } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int col) { return columns[col]; } @Override public Object getValueAt(int row, int col) { return data.get(row).getName(); } } }