package gui.lecture; import gui.helper.ColumnSelector; import gui.intro.MainMenue_GUI; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Font; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JTable; import javax.swing.JTextPane; import javax.swing.ScrollPaneConstants; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import models.RightsManagement; import models.person; import util.CheckIntegrity; import util.GuiManager; import util.ListAllOtherUsers_GUI; @SuppressWarnings("serial") public class PermissionCreateLecture_GUI extends JInternalFrame { private final JPanel contentPanel = new JPanel(); private JTable tablePermittedUsers = null; private static final String[] titles = { "Name", "Lesen", "Schreiben", "Admin", "userID" }; public static final String HELP_MESSAGE = "
" + "Hier können Sie die Berechtigungen für Ihre Veranstaltung ändern.
" + "Es wird unterschieden, ob innerhalb der Suite (dieses Programm) Änderungen vorgenommen werden dürfen,
" + "und/oder ob die Veranstaltung auch im VMChooser angezeigt wird." + "
"; private final DefaultTableModel model = new DefaultTableModel(titles, 0) { @Override public boolean isCellEditable(int rowIndex, int mColIndex) { if (mColIndex >= 1) { return true; } return false; } @Override public Class getColumnClass(int c) { switch (c) { case 0: return String.class; default: return Boolean.class; } } }; // private JTable tablePermittedUsers; public PermissionCreateLecture_GUI() { setResizable(false); setTitle("bwLehrpool Suite - Berechtigungen - " + person.verantwortlicher.getUserID()); setBounds(0, 0, 603, 722); getContentPane().setLayout(null); { JPanel panel = new JPanel(); panel.setBackground(SystemColor.menu); panel.setBounds(10, 11, 577, 57); getContentPane().add(panel); panel.setLayout(null); { JLabel lblNewLabel = new JLabel("Veranstaltung - Berechtigungen"); lblNewLabel.setBounds(10, 11, 509, 22); panel.add(lblNewLabel); lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 18)); } JTextPane txtpnBitteWhlenSie = new JTextPane(); txtpnBitteWhlenSie.setEditable(false); txtpnBitteWhlenSie.setBackground(SystemColor.menu); txtpnBitteWhlenSie .setText("Definieren Sie hier bitte die gewünschten Berechtigungen für Ihre Veranstaltung"); txtpnBitteWhlenSie.setBounds(10, 36, 509, 32); panel.add(txtpnBitteWhlenSie); } contentPanel.setBounds(10, 85, 577, 531); contentPanel.setBackground(SystemColor.menu); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel); contentPanel.setLayout(null); // tablePermittedUsers = new JTable(); tablePermittedUsers = new JTable(); tablePermittedUsers.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { checkIntegrity(-1); } @Override public void mouseReleased(MouseEvent e) { tablePermittedUsers.clearSelection(); //just one row is selectable tablePermittedUsers.setRowSelectionInterval(tablePermittedUsers.rowAtPoint(e.getPoint()), tablePermittedUsers.rowAtPoint(e.getPoint())); } }); tablePermittedUsers.setModel(model); tablePermittedUsers.setSelectionForeground(Color.WHITE); tablePermittedUsers.getTableHeader().setReorderingAllowed(false); // invisible attribute userID for identifying selected user tablePermittedUsers.getColumnModel().getColumn(4).setWidth(0); tablePermittedUsers.getColumnModel().getColumn(4).setMinWidth(0); tablePermittedUsers.getColumnModel().getColumn(4).setMaxWidth(0); // if new session, get values for table from database if (RightsManagement.rightsManagement.getPermittedUserList().size() > 0) { List listt = RightsManagement.rightsManagement.getPermittedUserList(); Iterator i = listt.iterator(); while (i.hasNext()) { // erzeuge Objekte fuer die Tabelle person temp = i.next(); Object[] obj = { temp.getName() + ", " + temp.getVorname(), // Name temp.isLecture_read(), // Read temp.isLecture_write(), // Write // temp.isImageLinkAllowed(), // Link temp.isLecture_admin(), // Admin temp.getUserID() // userID }; // Fuege diese Objekte der Tabelle hinzu model.addRow(obj); } }// end set list of permitted users TableColumn tc1 = tablePermittedUsers.getColumnModel().getColumn(1); tc1.setCellEditor(tablePermittedUsers.getDefaultEditor(Boolean.class)); tc1.setCellRenderer(tablePermittedUsers.getDefaultRenderer(Boolean.class)); tc1.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1), titles[1])); TableColumn tc2 = tablePermittedUsers.getColumnModel().getColumn(2); tc2.setCellEditor(tablePermittedUsers.getDefaultEditor(Boolean.class)); tc2.setCellRenderer(tablePermittedUsers.getDefaultRenderer(Boolean.class)); tc2.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1, 2), titles[2])); TableColumn tc3 = tablePermittedUsers.getColumnModel().getColumn(3); tc3.setCellEditor(tablePermittedUsers.getDefaultEditor(Boolean.class)); tc3.setCellRenderer(tablePermittedUsers.getDefaultRenderer(Boolean.class)); tc3.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1, 2, 3), titles[3])); tc1.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1), titles[1])); tc2.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1, 2), titles[2])); tc3.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(tablePermittedUsers, 1, 2, 3), titles[3])); JLabel lblHauptmen = new JLabel("Hauptmenü"); lblHauptmen.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { GuiManager.show(new MainMenue_GUI()); } }); lblHauptmen.setForeground(Color.BLUE); lblHauptmen.setBounds(10, 11, 61, 14); contentPanel.add(lblHauptmen); JLabel label_1 = new JLabel(">"); label_1.setBounds(69, 11, 13, 14); contentPanel.add(label_1); JLabel lblVlimage = new JLabel("Veranstaltung"); lblVlimage.setForeground(Color.BLUE); lblVlimage.setBounds(81, 11, 90, 14); contentPanel.add(lblVlimage); JLabel label_2 = new JLabel(">"); label_2.setBounds(181, 11, 13, 14); contentPanel.add(label_2); JLabel lblNewLabel_1 = new JLabel("Neu"); lblNewLabel_1.setBounds(194, 11, 155, 14); contentPanel.add(lblNewLabel_1); JPanel panel = new JPanel(); panel.setBounds(10, 35, 557, 148); contentPanel.add(panel); panel.setLayout(null); panel.setBorder(new TitledBorder(null, "Beschreibung", TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel.setBackground(SystemColor.menu); JLabel label = new JLabel("Lesen"); label.setBounds(28, 18, 90, 20); panel.add(label); JLabel label_3 = new JLabel("Schreiben"); label_3.setBounds(28, 38, 90, 20); panel.add(label_3); JLabel label_5 = new JLabel("Admin"); label_5.setBounds(28, 58, 90, 20); panel.add(label_5); JLabel label_7 = new JLabel("Veranstaltung ist in bwLehrpool Suite und VMchooser sichtbar."); label_7.setBounds(128, 18, 419, 20); panel.add(label_7); JLabel lblimageDarfAngepasst = new JLabel( "Veranstaltung darf angepasst und überschrieben, jedoch nicht gelöscht werden."); lblimageDarfAngepasst.setBounds(128, 38, 419, 20); panel.add(lblimageDarfAngepasst); JLabel lblvolleRechteRead = new JLabel( "Volle Rechte: Lesen, Schreiben, Löschen und Berechtigungen für andere Benutzer festlegen."); lblvolleRechteRead.setBounds(128, 58, 419, 35); panel.add(lblvolleRechteRead); JPanel panel_1 = new JPanel(); panel_1.setLayout(null); panel_1.setBorder(new TitledBorder(null, "Suite-Berechtigungen", TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel_1.setBackground(SystemColor.menu); panel_1.setBounds(10, 194, 311, 326); contentPanel.add(panel_1); JScrollPane scrollPaneMyImage = new JScrollPane(); scrollPaneMyImage.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPaneMyImage.setBounds(10, 28, 291, 251); panel_1.add(scrollPaneMyImage); tablePermittedUsers.setBounds(0, 0, 555, 1); // panel_1.add(tablePermittedUsers); scrollPaneMyImage.setViewportView(tablePermittedUsers); JButton btnAddUser = new JButton("Hinzufügen..."); btnAddUser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // show list of all other relevant users GuiManager.openPopup(new ListAllOtherUsers_GUI(tablePermittedUsers, 4)); // give access to the table model and inform that the // userID is position 5 in the model } }); btnAddUser.setBounds(10, 290, 113, 23); panel_1.add(btnAddUser); JButton btnDeleteUser = new JButton("Löschen"); btnDeleteUser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // delete selected users from table int[] deletableRows = tablePermittedUsers.getSelectedRows(); int pointerCorrection = 0; // after deleting a row, the length of selected rows is reduced by 1. // This pointer counts the already deleted rows and correct the offset of i for (int i = 0; i < deletableRows.length; i++) { model.removeRow(deletableRows[i - pointerCorrection]); pointerCorrection++; } } }); btnDeleteUser.setBounds(133, 290, 113, 23); panel_1.add(btnDeleteUser); JPanel panel_2 = new JPanel(); panel_2.setLayout(null); panel_2.setBorder(new TitledBorder(null, "Sichtbarkeit im VMChooser", TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel_2.setBackground(SystemColor.menu); panel_2.setBounds(331, 194, 236, 326); contentPanel.add(panel_2); JScrollPane scrollPane_1 = new JScrollPane(); scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPane_1.setEnabled(false); scrollPane_1.setBounds(16, 88, 210, 191); panel_2.add(scrollPane_1); JRadioButton radioButton = new JRadioButton("Sichtbar für alle"); radioButton.setSelected(true); radioButton.setEnabled(false); radioButton.setBounds(6, 32, 109, 23); panel_2.add(radioButton); JRadioButton radioButton_1 = new JRadioButton("Individuell"); radioButton_1.setEnabled(false); radioButton_1.setBounds(6, 58, 109, 23); panel_2.add(radioButton_1); JButton button_2 = new JButton("Hinzufügen"); button_2.setEnabled(false); button_2.setBounds(23, 290, 89, 23); panel_2.add(button_2); JButton button_3 = new JButton("Löschen"); button_3.setEnabled(false); button_3.setBounds(122, 290, 89, 23); panel_2.add(button_3); { JPanel buttonPane = new JPanel(); buttonPane.setBounds(0, 640, 597, 33); buttonPane.setBackground(SystemColor.menu); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane); { JButton cancelButton = new JButton("Zurück"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GuiManager.show(new CreateLectureAllgemein_GUI()); } }); cancelButton.setActionCommand("OK"); buttonPane.add(cancelButton); // getRootPane().setDefaultButton(cancelButton); } { JButton continueButton = new JButton("Weiter"); continueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // before save, check integrity to avoid dblClick errors // of rights for (int i = 0; i < tablePermittedUsers.getRowCount(); i++) { checkIntegrity(i); // check integrity of each line // again //System.out.println("in auto-correct"); } saveTableToList(); GuiManager.show(new CreateLectureLink_GUI()); } }); continueButton.setActionCommand("Cancel"); buttonPane.add(continueButton); getRootPane().setDefaultButton(continueButton); } } JSeparator separator = new JSeparator(); separator.setBounds(0, 78, 597, 2); getContentPane().add(separator); JSeparator separator_1 = new JSeparator(); separator_1.setBounds(0, 627, 597, 2); getContentPane().add(separator_1); }// end constructor private void checkIntegrity(int row) { int selectedRow; if (row == -1) { selectedRow = tablePermittedUsers.getSelectedRow(); } else { selectedRow = row; } boolean isRead, isWrite, isAdmin; // collect all row data isRead = (boolean) tablePermittedUsers.getValueAt(selectedRow, 1); isWrite = (boolean) tablePermittedUsers.getValueAt(selectedRow, 2); isAdmin = (boolean) tablePermittedUsers.getValueAt(selectedRow, 3); boolean[] checkedVals = CheckIntegrity.isIntegreForLecture(isRead, isWrite, isAdmin); tablePermittedUsers.setValueAt(checkedVals[0], selectedRow, 1); tablePermittedUsers.setValueAt(checkedVals[1], selectedRow, 2); tablePermittedUsers.setValueAt(checkedVals[2], selectedRow, 3); }// end checkIntegrity() // Column 0 == Concat user name // save the entered rights into the model and prepare them to be written to // the database private void saveTableToList() { //System.out.println("Saving Table to List"); List list = new ArrayList(); int seperatorIndex = 0; // get values from table and save the checkbox values for (int i = 0; i < tablePermittedUsers.getRowCount(); i++) { person temp = new person(); seperatorIndex = tablePermittedUsers.getModel().getValueAt(i, 0).toString().indexOf(","); temp.setUserID(tablePermittedUsers.getModel().getValueAt(i, 4).toString()); // get // userID temp.setLecture_admin(Boolean.parseBoolean(tablePermittedUsers.getModel().getValueAt(i, 3) .toString())); // get Admin temp.setLecture_write(Boolean.parseBoolean(tablePermittedUsers.getModel().getValueAt(i, 2) .toString()));// get Write temp.setLecture_read(Boolean.parseBoolean(tablePermittedUsers.getModel().getValueAt(i, 1) .toString()));// get Read seperatorIndex = tablePermittedUsers.getModel().getValueAt(i, 0).toString().indexOf(","); temp.setName(tablePermittedUsers.getModel().getValueAt(i, 0).toString() .substring(0, seperatorIndex)); temp.setVorname(tablePermittedUsers.getModel().getValueAt(i, 0).toString() .substring(seperatorIndex + 2)); // check if at least one checkbox is checked. If yes, save this // entry into list, if not ignore this entry if (temp.isLecture_admin() || temp.isLecture_write() || temp.isLecture_read()) { // save entry list.add(temp); } else { // do nothing } } RightsManagement.rightsManagement.setPermittedUserList(list); }// end saveTableToList() }// end class class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener { private static final long serialVersionUID = -132401386877928691L; protected CheckBoxHeader rendererComponent; protected int column; protected boolean mousePressed = false; public CheckBoxHeader(ItemListener itemListener, String text) { rendererComponent = this; rendererComponent.addItemListener(itemListener); rendererComponent.setText(text); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (table != null) { JTableHeader header = table.getTableHeader(); if (header != null) { rendererComponent.setForeground(header.getForeground()); rendererComponent.setBackground(header.getBackground()); rendererComponent.setFont(header.getFont()); rendererComponent.setBorder(header.getBorder()); header.addMouseListener(rendererComponent); } } setColumn(column); return rendererComponent; } protected void setColumn(int column) { this.column = column; } public int getColumn() { return column; } protected void handleClickEvent(MouseEvent e) { if (mousePressed) { mousePressed = false; JTableHeader header = (JTableHeader) (e.getSource()); JTable tableView = header.getTable(); TableColumnModel columnModel = tableView.getColumnModel(); int viewColumn = columnModel.getColumnIndexAtX(e.getX()); int column = tableView.convertColumnIndexToModel(viewColumn); if (viewColumn == this.column && e.getClickCount() == 1 && column != -1) { doClick(); } } } public void mouseClicked(MouseEvent e) { handleClickEvent(e); ((JTableHeader) e.getSource()).repaint(); } public void mousePressed(MouseEvent e) { mousePressed = true; } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }