/* * ResourcePropertyDialog.java - Jun 17, 2003 * * @author wolf */ package org.exist.client; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.HeadlessException; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.text.DateFormat; import java.util.Date; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.border.EtchedBorder; import org.exist.security.Permission; import org.exist.security.User; import org.exist.xmldb.UserManagementService; import org.exist.xmldb.XmldbURI; import org.exist.xquery.util.URIUtils; import org.xmldb.api.base.XMLDBException; public class ResourcePropertyDialog extends JDialog { public final static int NO_OPTION = -1; public final static int APPLY_OPTION = 0; public final static int CANCEL_OPTION = 1; Permission permissions; XmldbURI resource; UserManagementService service; Date creationDate; Date modificationDate; String mimeType; JComboBox groups; JComboBox owners; JCheckBox[] worldPerms; JCheckBox[] groupPerms; JCheckBox[] userPerms; int result = NO_OPTION; /** * @param owner * @param mgt * @param res * @param perm * @param created * @param modified * @param mimeType * @throws java.awt.HeadlessException */ public ResourcePropertyDialog( Frame owner, UserManagementService mgt, XmldbURI res, Permission perm, Date created, Date modified, String mimeType) throws HeadlessException, XMLDBException { super(owner, "Edit Properties", true); this.service = mgt; this.permissions = perm; this.creationDate = created; this.modificationDate = modified; this.resource = res; this.mimeType = mimeType == null ? "N/A" : mimeType; setupComponents(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { cancelAction(); } }); pack(); } public int getResult() { return result; } public Permission getPermissions() { return permissions; } private void setupComponents() throws XMLDBException { GridBagLayout grid = new GridBagLayout(); getContentPane().setLayout(grid); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(5, 5, 5, 5); JLabel label = new JLabel("Resource:"); c.gridx = 0; c.gridy = 0; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; c.weighty = 0; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel(URIUtils.urlDecodeUtf8(resource)); c.gridx = 1; c.gridy = 0; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel("Mime:"); c.gridx = 0; c.gridy = 1; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel(mimeType); c.gridx = 1; c.gridy = 1; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel("Created:"); c.gridx = 0; c.gridy = 2; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(label, c); getContentPane().add(label); String date = DateFormat.getDateTimeInstance().format(creationDate); label = new JLabel(date); c.gridx = 1; c.gridy = 2; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel("Last modified:"); c.gridx = 0; c.gridy = 3; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(label, c); getContentPane().add(label); date = modificationDate != null ? DateFormat.getDateTimeInstance().format(modificationDate) : "not available"; label = new JLabel(date); c.gridx = 1; c.gridy = 3; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(label, c); getContentPane().add(label); label = new JLabel("Owner"); c.gridx = 0; c.gridy = 4; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(label, c); getContentPane().add(label); Vector ol = new Vector(); User users[] = service.getUsers(); for (int i = 0; i < users.length; i++) { ol.addElement(users[i].getName()); } owners = new JComboBox(ol); owners.setSelectedItem(permissions.getOwner()); c.gridx = 1; c.gridy = 4; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(owners, c); getContentPane().add(owners); label = new JLabel("Group"); c.gridx = 0; c.gridy = 5; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(label, c); getContentPane().add(label); Vector gl = new Vector(); String allGroups[] = service.getGroups(); for (int i = 0; i < allGroups.length; i++) gl.addElement(allGroups[i]); groups = new JComboBox(gl); groups.setSelectedItem(permissions.getOwnerGroup()); c.gridx = 1; c.gridy = 5; c.anchor = GridBagConstraints.EAST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(groups, c); getContentPane().add(groups); JComponent pc = setupPermissions(); c.gridx = 0; c.gridy = 6; c.gridwidth = 2; c.anchor = GridBagConstraints.EAST; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; grid.setConstraints(pc, c); getContentPane().add(pc); Box buttonBox = Box.createHorizontalBox(); JButton button = new JButton("Apply"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { applyAction(); } }); buttonBox.add(button); button = new JButton("Cancel"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancelAction(); } }); buttonBox.add(button); c.gridx = 1; c.gridy = 7; c.gridwidth = 1; c.anchor = GridBagConstraints.EAST; c.fill = GridBagConstraints.NONE; c.weightx = 0; grid.setConstraints(buttonBox, c); getContentPane().add(buttonBox); } private JComponent setupPermissions() { Box hbox = Box.createHorizontalBox(); hbox.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(EtchedBorder.RAISED), "Permissions")); userPerms = new JCheckBox[3]; JComponent c = getPermissionsBox("user", userPerms, permissions.getUserPermissions()); hbox.add(c); groupPerms = new JCheckBox[3]; c = getPermissionsBox("group", groupPerms, permissions.getGroupPermissions()); hbox.add(c); worldPerms = new JCheckBox[3]; c = getPermissionsBox("world", worldPerms, permissions.getPublicPermissions()); hbox.add(c); return hbox; } private JComponent getPermissionsBox(String title, JCheckBox[] perms, int current) { Box vbox = Box.createVerticalBox(); JLabel label = new JLabel(title); vbox.add(label); perms[0] = new JCheckBox("read", (current & 0x4) == 0x4); vbox.add(perms[0]); perms[1] = new JCheckBox("write", (current & 0x2) == 0x2); vbox.add(perms[1]); perms[2] = new JCheckBox("update", (current & 0x1) == 0x1); vbox.add(perms[2]); return vbox; } private int checkPermissions(JCheckBox cb[]) { int perm = 0; if (cb[0].isSelected()) perm |= 4; if (cb[1].isSelected()) perm |= 2; if (cb[2].isSelected()) perm |= 1; return perm; } private void cancelAction() { this.setVisible(false); result = CANCEL_OPTION; } private void applyAction() { permissions.setOwner((String) owners.getSelectedItem()); permissions.setGroup((String) groups.getSelectedItem()); int perms = (checkPermissions(userPerms) << 6) | (checkPermissions(groupPerms) << 3) | checkPermissions(worldPerms); permissions.setPermissions(perms); this.setVisible(false); result = APPLY_OPTION; } }