Inhalt

Aktueller Ordner: duesseldorfer-schuelerinventar-java-client/src/main/java/com/duesk
⬅ Übergeordnet

GroupManagerDialog.java

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<Group> 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<List<Group>, Void> worker = new SwingWorker<List<Group>, Void>() {
            @Override
            protected List<Group> 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<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
            @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<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
                    @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<Group> data = new ArrayList<>();
        private int selectedRow = -1;
        
        public void setGroups(List<Group> 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();
        }
    }
}