package gui.image; import gui.intro.About_GUI; import gui.intro.ListAllOtherUsers_GUI; 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.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URI; import java.net.URISyntaxException; 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.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JTable; import javax.swing.JTextPane; import javax.swing.ScrollPaneConstants; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; 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.Links; import models.RightsManagement; import models.person; import org.apache.log4j.Logger; import server.generated.Person; import server.generated.Server.Client; import util.CheckIntegrity; import util.OpenLinks; @SuppressWarnings("serial") public class PermissionCreateImage_GUI extends JFrame { private final static Logger LOGGER = Logger .getLogger(PermissionCreateImage_GUI.class); Client client = models.Client.clientcon.getClient(); private final JPanel contentPanel = new JPanel(); String[] result; private JTable table = null; private Class[] classes; Object[] titles = { "Name", "Read", "Write", "Link", "Admin", "userID" }; private List map = null; // List of people who have rights Component c = null; 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; private static final String HELP_MESSAGE = "
" + "Legen Sie fest, welche Personen welche Rechte an Ihrem Image haben.
" + "Sie können die Rechte read, write, 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(Component formerGUI) { addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent arg0) { System.exit(0); } }); setResizable(false); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } setTitle("bwLehrpool Suite - Image bearbeiten"); setBounds(0, 0, 603, 722); setLocationRelativeTo(formerGUI); 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); } }); table.setModel(model); table.setSelectionForeground(Color.WHITE); // 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) { //System.out.println("Loading data from db"); //do nothing /*try { user.add(0, person.verantwortlicher.getUserID()); if(user==null){ System.out.println("user is null"); } //map = client.getAllOtherSatelliteUsers(person.verantwortlicher.getUserID()); map = client.getAllOtherSatelliteUsers(user); Iterator i = map.iterator(); int x = 0; while (i.hasNext()) { // erzeuge Objekte fuer die Tabelle Object[] obj = { map.get(x).getNachname() + ", " + map.get(x).getVorname(), // Name false, // Read false, // Write false, // Link false, // Admin map.get(x).getUserID() // userID }; // Fuege diese Objekte der Tabelle hinzu model.addRow(obj); i.next(); x++; } } catch (TException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }*/ } else // read from model { //System.out.println("reading from model"); //System.out // .println("RightsManagement.rightsManagement.getPermittedUserList().size() = " // + RightsManagement.rightsManagement // .getPermittedUserList().size()); List listt = RightsManagement.rightsManagement .getPermittedUserList(); Iterator i = listt.iterator(); int x = 0; 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 }; //System.out.println("Processing: " + temp.getName() + ", " // + temp.getVorname() + ", " + temp.isImageRead() + ", " // + temp.isImageWrite() + ", " + temp.isImageLinkAllowed() + ", " // + temp.isImageAdmin() + ", " + temp.getUserID()); // Fuege diese Objekte der Tabelle hinzu model.addRow(obj); x++; } }// end set list of permitted users //TableCellRenderer rend = table.getTableHeader().getDefaultRenderer(); TableColumn tc1 = table.getColumnModel().getColumn(1); tc1.setCellEditor(table.getDefaultEditor(Boolean.class)); tc1.setCellRenderer(table.getDefaultRenderer(Boolean.class)); tc1.setHeaderRenderer(new CheckBoxHeader(new MyItemListener1(), (String) titles[1])); // tc1.setCellRenderer(cellRenderer) TableColumn tc2 = table.getColumnModel().getColumn(2); tc2.setCellEditor(table.getDefaultEditor(Boolean.class)); tc2.setCellRenderer(table.getDefaultRenderer(Boolean.class)); tc2.setHeaderRenderer(new CheckBoxHeader(new MyItemListener2(), (String) 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 MyItemListener3(), (String) 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 MyItemListener4(), (String) 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(); 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 //LOGGER.info("deletabelRows.length="+deletableRows.length); for (int i=0; i"); 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("Read"); lblRead.setBounds(28, 18, 90, 20); panel_2.add(lblRead); lblWrite = new JLabel("Write"); 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( "Image lesen und starten, in Suchfenster und VMchooser sichtbar."); lblReadDesc.setBounds(128, 18, 380, 20); panel_2.add(lblReadDesc); lblWriteDesc = new JLabel( "Image anpassen und überschreiben, jedoch nicht löschen."); lblWriteDesc.setBounds(128, 38, 380, 20); panel_2.add(lblWriteDesc); lblAdminDesc = new JLabel( "Volle Rechte: read, write, 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) { CreateImageTechnisch_GUI ci = new CreateImageTechnisch_GUI( c); ci.setVisible(true); dispose(); } }); 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()); FTPCreateUploader_GUI ea = new FTPCreateUploader_GUI(c); ea.setVisible(true); dispose(); } }); 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); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu mnNewMenu_1 = new JMenu("Hilfe"); menuBar.add(mnNewMenu_1); JMenuItem mntmFaq = new JMenuItem("FAQ"); mntmFaq.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { OpenLinks open = new OpenLinks(); URI windows; try { windows = new URI(Links.getFAQ()); open.openWebpage(windows); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); mnNewMenu_1.add(mntmFaq); JMenuItem mntmOtrs = new JMenuItem("OTRS"); mntmOtrs.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { OpenLinks open = new OpenLinks(); URI windows; try { windows = new URI(Links.getOTRS()); open.openWebpage(windows); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); mnNewMenu_1.add(mntmOtrs); JMenuItem mntmAbout = new JMenuItem("About"); mntmAbout.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { About_GUI ab = new About_GUI(); ab.setVisible(true); } }); mnNewMenu_1.add(mntmAbout); JMenu mnNewMenu_Info = new JMenu("Info"); mnNewMenu_Info.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { JOptionPane.showMessageDialog(c, HELP_MESSAGE, "Hilfe zu dieser Oberfläche", JOptionPane.INFORMATION_MESSAGE); } }); menuBar.add(mnNewMenu_Info); c = this; this.setLocationRelativeTo(formerGUI); this.setVisible(true); }// 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() // Read column class MyItemListener1 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, 1); } } } // Write column class MyItemListener2 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, 1); //set read table.setValueAt(new Boolean(checked), x, 2); // set write } } } // Link column class MyItemListener3 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, 1); //set read table.setValueAt(new Boolean(checked), x, 3); //set link } } } // Admin column class MyItemListener4 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, 1); //set read table.setValueAt(new Boolean(checked), x, 2); // set write table.setValueAt(new Boolean(checked), x, 3); // set link table.setValueAt(new Boolean(checked), x, 4); //set admin //TODO //also set table header (un-)selected } JTableHeader header = table.getTableHeader(); //header.getColumnModel().getColumn(1).setHeaderValue(Status.); //header.getColumnModel().getColumn(2).setHeaderValue(new Boolean(checked)); //model.setValueAt(new Boolean(checked), 0, 1); //table.setValueAt(new Boolean(checked), 0, 1); } } // 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); } } } // public void createRightsList() { // ///// // } // 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 if (map == null) //System.out.println("Error: map is null"); // 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 } } //System.out.println("Setting list information.\tTable size: " // + table.getRowCount() + "\t List length (=selected users): " // + list.size()); //for (int y = 0; y < list.size(); y++) { // System.out.println("" + list.get(y).getName()); //} RightsManagement.rightsManagement.setPermittedUserList(list); }// end saveTableToList() } // end class class CheckBoxHeader extends JCheckBox implements TableCellRenderer,MouseListener { protected CheckBoxHeader rendererComponent; protected int column; protected boolean mousePressed = false; //protected boolean readFlag = false, writeFlag = false, linkFlag = false, adminFlag = 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(); } /* //also set dependent headers clicked switch(viewColumn) { case 2: //write //also set read if (viewColumn == ++this.column && e.getClickCount() == 1 && column != -1 && writeFlag == false && readFlag == false) //going backward through table --> ++ { doClick(); writeFlag = true; readFlag = true; } break; case 3: //link //also set read if (viewColumn == (this.column+2) && e.getClickCount() == 1 && column != -1) //going backward through table --> ++ { //System.out.println("clickCount: " + e.getClickCount()); doClick(); //System.out.println("viewColumn = " + viewColumn + "++this.column = "+ ++this.column); } break; case 4: //admin break; default: break; } */ } //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) { } }