package gui.image;
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.ItemEvent;
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.AbstractButton;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.ListSelectionModel;
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.Image;
import models.RightsManagement;
import models.person;
import util.CheckIntegrity;
import util.GuiManager;
import util.ListAllOtherUsers_GUI;
@SuppressWarnings("serial")
public class PermissionCreateImage_GUI extends JInternalFrame {
private final JPanel contentPanel = new JPanel();
private JTable table = null;
private String[] titles = { "Name", "Lesen", "Schreiben", "Link", "Admin", "userID" };
final DefaultTableModel model = new DefaultTableModel(titles, 0) {
public boolean isCellEditable(int rowIndex, int mColIndex) {
if (mColIndex >= 1) {
return true;
}
return false;
}
public Class> getColumnClass(int c) {
switch (c) {
case 0:
return String.class;
default:
return Boolean.class;
}
}
};
private JLabel lblRead;
private JLabel lblWrite;
private JLabel lblAdmin;
private JLabel lblLinkallowed;
private JLabel lblReadDesc;
private JLabel lblWriteDesc;
private JLabel lblAdminDesc;
private JLabel lblLinkallowedDesc;
public static final String HELP_MESSAGE = "
"
+ "Legen Sie fest, welche Personen welche Rechte an Ihrem Image haben.
"
+ "Sie können die Rechte Lesen, Schreiben, Link und Admin vergeben.
"
+ "Link bedeutet, dass diese Person Veranstaltungen auf Ihr Image verlinken darf und dieses somit
"
+ "implizit freigeben darf. Eine Person mit Adminrechten darf zusätzlich das Image löschen und Berechtigungen
"
+ "für andere Benutzer festlegen und ist somit wie der Besitzer zu betrachten." + "
";
private JButton btnAddUser;
private JButton btnDeleteUser;
public PermissionCreateImage_GUI() {
setResizable(false);
setTitle("bwLehrpool Suite - Image bearbeiten - " + 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("Image 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 Ihr Image");
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);
JPanel panel_1 = new JPanel();
panel_1.setBackground(SystemColor.menu);
panel_1.setBorder(new TitledBorder(null, "Weitere Berechtigungen", TitledBorder.LEADING,
TitledBorder.TOP, null, null));
panel_1.setBounds(10, 170, 557, 361);
contentPanel.add(panel_1);
panel_1.setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBounds(10, 21, 537, 185);
panel_1.add(scrollPane);
table = new JTable();
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
checkIntegrity(-1);
}
@Override
public void mouseReleased(MouseEvent e) {
table.clearSelection(); // just one row is selectable
table.setRowSelectionInterval(table.rowAtPoint(e.getPoint()), table.rowAtPoint(e.getPoint()));
}
});
table.setModel(model);
table.setSelectionForeground(Color.WHITE);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.getTableHeader().setReorderingAllowed(false);
// invisible attribute userID for identifying selected user
table.getColumnModel().getColumn(5).setWidth(0);
table.getColumnModel().getColumn(5).setMinWidth(0);
table.getColumnModel().getColumn(5).setMaxWidth(0);
// if new session, get values for table from database -> initialiting
// users
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.isImageRead(), // Read
temp.isImageWrite(), // Write
temp.isImageLinkAllowed(), // Link
temp.isImageAdmin(), // Admin
temp.getUserID() // userID
};
// Fuege diese Objekte der Tabelle hinzu
model.addRow(obj);
}
}// end set list of permitted users
TableColumn tc1 = table.getColumnModel().getColumn(1);
tc1.setCellEditor(table.getDefaultEditor(Boolean.class));
tc1.setCellRenderer(table.getDefaultRenderer(Boolean.class));
tc1.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(table, 1), titles[1]));
TableColumn tc2 = table.getColumnModel().getColumn(2);
tc2.setCellEditor(table.getDefaultEditor(Boolean.class));
tc2.setCellRenderer(table.getDefaultRenderer(Boolean.class));
tc2.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(table, 1, 2), titles[2]));
TableColumn tc3 = table.getColumnModel().getColumn(3);
tc3.setCellEditor(table.getDefaultEditor(Boolean.class));
tc3.setCellRenderer(table.getDefaultRenderer(Boolean.class));
tc3.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(table, 1, 3), titles[3]));
TableColumn tc4 = table.getColumnModel().getColumn(4);
tc4.setCellEditor(table.getDefaultEditor(Boolean.class));
tc4.setCellRenderer(table.getDefaultRenderer(Boolean.class));
tc4.setHeaderRenderer(new CheckBoxHeader(new ColumnSelector(table, 1, 2, 3, 4), titles[4]));
scrollPane.setViewportView(table);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBorder(new TitledBorder(null, "Freigabe", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setBackground(SystemColor.menu);
panel.setBounds(10, 260, 537, 80);
panel_1.add(panel);
JLabel label = new JLabel("Freigabemodus:");
label.setBounds(10, 30, 250, 20);
panel.add(label);
final JComboBox comboBox_1 = new JComboBox<>();
comboBox_1.setModel(new DefaultComboBoxModel(new String[] { "Lokal (Eigene Hochschule)",
"Öffentlich (Alle Hochschulen)" }));
comboBox_1.setSelectedIndex(0);
comboBox_1.setBounds(270, 30, 250, 20);
panel.add(comboBox_1);
btnAddUser = new JButton("Hinzufügen...");
btnAddUser.setBounds(10, 217, 113, 23);
panel_1.add(btnAddUser);
btnDeleteUser = new JButton("Löschen");
btnDeleteUser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// delete selected users from table
int[] deletableRows = table.getSelectedRows();
// 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
int pointerCorrection = 0;
for (int i = 0; i < deletableRows.length; i++) {
model.removeRow(deletableRows[i - pointerCorrection]);
pointerCorrection++;
}
}
});
btnDeleteUser.setBounds(134, 217, 113, 23);
panel_1.add(btnDeleteUser);
btnAddUser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// show list of all other relevant users
// give access to the table model and inform that the userID is
// position 5 in the model
GuiManager.openPopup(new ListAllOtherUsers_GUI(table, 5));
}
});
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("Image");
lblVlimage.setForeground(Color.BLUE);
lblVlimage.setBounds(81, 11, 45, 14);
contentPanel.add(lblVlimage);
JLabel label_2 = new JLabel(">");
label_2.setBounds(133, 11, 13, 14);
contentPanel.add(label_2);
JLabel lblNewLabel_1 = new JLabel("Neu");
lblNewLabel_1.setBounds(146, 11, 155, 14);
contentPanel.add(lblNewLabel_1);
JPanel panel_2 = new JPanel();
panel_2.setBackground(SystemColor.menu);
panel_2.setBorder(new TitledBorder(null, "Beschreibung", TitledBorder.LEADING, TitledBorder.TOP,
null, null));
panel_2.setBounds(10, 35, 557, 124);
contentPanel.add(panel_2);
panel_2.setLayout(null);
lblRead = new JLabel("Lesen");
lblRead.setBounds(28, 18, 90, 20);
panel_2.add(lblRead);
lblWrite = new JLabel("Schreiben");
lblWrite.setBounds(28, 38, 90, 20);
panel_2.add(lblWrite);
lblAdmin = new JLabel("Admin");
lblAdmin.setBounds(28, 78, 90, 20);
panel_2.add(lblAdmin);
lblLinkallowed = new JLabel("Link");
lblLinkallowed.setBounds(28, 58, 90, 20);
panel_2.add(lblLinkallowed);
lblReadDesc = new JLabel("Benutzer kann Image in bwLehrpool Suite sehen.");
lblReadDesc.setBounds(128, 18, 380, 20);
panel_2.add(lblReadDesc);
lblWriteDesc = new JLabel("Image sehen, anpassen und überschreiben, jedoch nicht löschen.");
lblWriteDesc.setBounds(128, 38, 380, 20);
panel_2.add(lblWriteDesc);
lblAdminDesc = new JLabel(
"Volle Rechte: Lesen, Schreiben, Löschen, Link und
Berechtigungen für andere Benutzer festlegen.");
lblAdminDesc.setBounds(128, 78, 380, 40);
panel_2.add(lblAdminDesc);
lblLinkallowedDesc = new JLabel("Erzeugung einer Veranstaltung auf ein Image ist erlaubt.");
lblLinkallowedDesc.setBounds(128, 58, 380, 20);
panel_2.add(lblLinkallowedDesc);
{
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 CreateImageTechnisch_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 < table.getRowCount(); i++) {
checkIntegrity(i); // check integrity of each line
// again
// System.out.println("in auto-correct");
}
saveTableToList();
Image.image.setShareMode(comboBox_1.getSelectedIndex());
GuiManager.show(new FTPCreateUploader_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 = table.getSelectedRow();
} else {
selectedRow = row;
}
boolean isRead, isWrite, isLink, isAdmin;
// collect all row data
isRead = (boolean) table.getValueAt(selectedRow, 1);
isWrite = (boolean) table.getValueAt(selectedRow, 2);
isLink = (boolean) table.getValueAt(selectedRow, 3);
isAdmin = (boolean) table.getValueAt(selectedRow, 4);
boolean[] checkedVals = CheckIntegrity.isIntegreForImage(isRead, isWrite, isLink, isAdmin);
table.setValueAt(checkedVals[0], selectedRow, 1);
table.setValueAt(checkedVals[1], selectedRow, 2);
table.setValueAt(checkedVals[2], selectedRow, 3);
table.setValueAt(checkedVals[3], selectedRow, 4);
}// end checkIntegrity()
// invisible userID column
class MyItemListener5 implements ItemListener {
public void itemStateChanged(ItemEvent e) {
Object source = e.getSource();
if (source instanceof AbstractButton == false)
return;
boolean checked = e.getStateChange() == ItemEvent.SELECTED;
for (int x = 0, y = table.getRowCount(); x < y; x++) {
table.setValueAt(new Boolean(checked), x, 5);
}
}
}
// 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;
// for (int i = 0; i < map.size(); i++) {
for (int i = 0; i < table.getRowCount(); i++) {
// System.out.println("in for, rowcount="+table.getRowCount());
person temp = new person();
// table.getModel().setValueAt(map.get, i, 5);
temp.setUserID(table.getModel().getValueAt(i, 5).toString()); // get
// userID
temp.setImageAdmin(Boolean.parseBoolean(table.getModel().getValueAt(i, 4).toString())); // get Admin
temp.setImageLinkAllowed(Boolean.parseBoolean(table.getModel().getValueAt(i, 3).toString()));// get Link
temp.setImageWrite(Boolean.parseBoolean(table.getModel().getValueAt(i, 2).toString()));// get Write
temp.setImageRead(Boolean.parseBoolean(table.getModel().getValueAt(i, 1).toString()));// get Read
seperatorIndex = table.getModel().getValueAt(i, 0).toString().indexOf(",");
temp.setName(table.getModel().getValueAt(i, 0).toString().substring(0, seperatorIndex));
temp.setVorname(table.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.isImageAdmin() || temp.isImageLinkAllowed() || temp.isImageWrite() || temp.isImageRead()) {
// 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 = 6189969287264710386L;
protected int column;
protected boolean mousePressed = false;
// protected boolean readFlag = false, writeFlag = false, linkFlag = false,
// adminFlag = false;
public CheckBoxHeader(ItemListener itemListener, String text) {
this.addItemListener(itemListener);
this.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) {
this.setForeground(header.getForeground());
this.setBackground(header.getBackground());
this.setFont(header.getFont());
this.setBorder(header.getBorder());
header.addMouseListener(this);
}
}
setColumn(column);
return this;
}
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) {
}
}