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) {
}
}