You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2012/02/16 10:25:42 UTC
svn commit: r1244899 - in
/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench:
AclEditorFrame.java PropertyEditorFrame.java
Author: fmui
Date: Thu Feb 16 09:25:42 2012
New Revision: 1244899
URL: http://svn.apache.org/viewvc?rev=1244899&view=rev
Log:
Workbench: ACL editor improvements
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java?rev=1244899&r1=1244898&r2=1244899&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java Thu Feb 16 09:25:42 2012
@@ -20,29 +20,42 @@ package org.apache.chemistry.opencmis.wo
import java.awt.BorderLayout;
import java.awt.Color;
+import java.awt.Cursor;
import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
import javax.swing.JSplitPane;
+import javax.swing.SwingConstants;
import javax.swing.UIManager;
+import javax.swing.text.JTextComponent;
import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
@@ -62,7 +75,10 @@ public class AclEditorFrame extends JFra
private final AceList addAceList;
private final AceList removeAceList;
- private AclPropagation aclPropagation;
+
+ private JRadioButton propagationRepositoryButton;
+ private JRadioButton propagationObjectOnlyButton;
+ private JRadioButton propagationPropagteButton;
public AclEditorFrame(final ClientModel model, final CmisObject object) {
super();
@@ -74,9 +90,15 @@ public class AclEditorFrame extends JFra
try {
// get users
List<String> princiaplList = new ArrayList<String>();
+
princiaplList.add("");
princiaplList.add("cmis:user");
+ String user = model.getClientSession().getSessionParameters().get(SessionParameter.USER);
+ if (user != null && user.length() > 0) {
+ princiaplList.add(user);
+ }
+
String anonymous = model.getRepositoryInfo().getPrincipalIdAnonymous();
if (anonymous != null && anonymous.length() > 0) {
princiaplList.add(anonymous);
@@ -87,9 +109,24 @@ public class AclEditorFrame extends JFra
princiaplList.add(anyone);
}
+ if (object.getAcl() != null && object.getAcl().getAces() != null) {
+ List<String> aclPrinciaplList = new ArrayList<String>();
+
+ for (Ace ace : object.getAcl().getAces()) {
+ String pid = ace.getPrincipalId();
+ if (!princiaplList.contains(pid) && !aclPrinciaplList.contains(pid)) {
+ aclPrinciaplList.add(pid);
+ }
+ }
+
+ Collections.sort(aclPrinciaplList);
+
+ princiaplList.addAll(aclPrinciaplList);
+ }
+
principals = princiaplList.toArray();
} catch (Exception ex) {
- principals = new Object[] { "cmis:user" };
+ principals = new Object[] { "", "cmis:user" };
}
Object[] permissions;
@@ -109,7 +146,6 @@ public class AclEditorFrame extends JFra
addAceList = new AceList(principals, permissions);
removeAceList = new AceList(principals, permissions);
- aclPropagation = AclPropagation.REPOSITORYDETERMINED;
createGUI();
}
@@ -136,14 +172,46 @@ public class AclEditorFrame extends JFra
topPanel.add(new JLabel(object.getId()));
add(topPanel, BorderLayout.PAGE_START);
+ // ACE panels
final JPanel addAcePanel = createAceListPanel("Add ACEs", addAceList);
final JPanel removeAcePanel = createAceListPanel("Remove ACEs", removeAceList);
- final JSplitPane centerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(addAcePanel),
+ JPanel centerPanel = new JPanel(new BorderLayout());
+
+ final JSplitPane aceSplitPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(addAcePanel),
new JScrollPane(removeAcePanel));
+ centerPanel.add(aceSplitPanel, BorderLayout.CENTER);
+
+ // propagation buttons
+ propagationRepositoryButton = new JRadioButton("repository determined", true);
+ propagationObjectOnlyButton = new JRadioButton("object only", false);
+ propagationPropagteButton = new JRadioButton("propagate", false);
+
+ try {
+ if (model.getRepositoryInfo().getAclCapabilities().getAclPropagation() == AclPropagation.OBJECTONLY) {
+ propagationPropagteButton.setEnabled(false);
+ }
+ } catch (Exception e) {
+ // ignore
+ }
+
+ ButtonGroup propagtionGroup = new ButtonGroup();
+ propagtionGroup.add(propagationRepositoryButton);
+ propagtionGroup.add(propagationObjectOnlyButton);
+ propagtionGroup.add(propagationPropagteButton);
+
+ JPanel propagtionPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+ propagtionPanel.add(new JLabel("ACL Propagation:"));
+ propagtionPanel.add(propagationRepositoryButton);
+ propagtionPanel.add(propagationObjectOnlyButton);
+ propagtionPanel.add(propagationPropagteButton);
+
+ centerPanel.add(propagtionPanel, BorderLayout.PAGE_END);
+
add(centerPanel, BorderLayout.CENTER);
+ // update button
JButton updateButton = new JButton("Update");
updateButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
updateButton.setDefaultCapable(true);
@@ -162,7 +230,7 @@ public class AclEditorFrame extends JFra
setLocationRelativeTo(null);
setVisible(true);
- centerPanel.setDividerLocation(0.5f);
+ aceSplitPanel.setDividerLocation(0.5f);
}
private JPanel createAceListPanel(final String title, final AceList list) {
@@ -203,10 +271,21 @@ public class AclEditorFrame extends JFra
*/
private boolean doApply() {
try {
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+
List<Ace> adds = addAceList.getAces();
List<Ace> removes = removeAceList.getAces();
if (adds != null || removes != null) {
+ AclPropagation aclPropagation = AclPropagation.REPOSITORYDETERMINED;
+ if (propagationObjectOnlyButton.isSelected()) {
+ aclPropagation = AclPropagation.OBJECTONLY;
+ }
+
+ if (propagationPropagteButton.isSelected()) {
+ aclPropagation = AclPropagation.PROPAGATE;
+ }
+
object.applyAcl(adds, removes, aclPropagation);
model.reloadObject();
}
@@ -215,9 +294,14 @@ public class AclEditorFrame extends JFra
} catch (Exception ex) {
ClientHelper.showError(this, ex);
return false;
+ } finally {
+ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
+ /**
+ * ACE list panel.
+ */
private static class AceList extends JPanel {
private static final long serialVersionUID = 1L;
@@ -281,16 +365,17 @@ public class AclEditorFrame extends JFra
private static final ImageIcon ICON_REMOVE = ClientHelper.getIcon("remove.png");
- private final AceList list;
+ private final Object[] permissions;
private int position;
- private JComboBox principalBox;
- private List<JComboBox> permissionBoxes;
+ private final JComboBox principalBox;
+ private final JPanel permissionsPanel;
+ private final List<JComboBox> permissionBoxes;
public AceInputPanel(final AceList list, final Object[] principals, final Object[] permissions, int position) {
super();
- this.list = list;
+ this.permissions = permissions;
updatePosition(position);
@@ -305,13 +390,16 @@ public class AclEditorFrame extends JFra
// col 1
c.gridx = 0;
c.weightx = 1;
- c.fill = GridBagConstraints.NONE;
+ c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.LINE_START;
c.gridy = 0;
add(new JLabel("Principal:"), c);
c.gridy = 1;
+ add(new JSeparator(SwingConstants.HORIZONTAL), c);
+
+ c.gridy = 2;
add(new JLabel("Permissions:"), c);
// col 2
@@ -327,16 +415,19 @@ public class AclEditorFrame extends JFra
c.gridy = 0;
add(principalBox, c);
- permissionBoxes = new ArrayList<JComboBox>();
+ c.gridy = 1;
+ add(new JSeparator(SwingConstants.HORIZONTAL), c);
+
+ permissionsPanel = new JPanel();
+ permissionsPanel.setLayout(new BoxLayout(permissionsPanel, BoxLayout.Y_AXIS));
+ permissionsPanel.setOpaque(false);
- JComboBox firstPermissionBox = new JComboBox(permissions);
- firstPermissionBox.setEditable(true);
- firstPermissionBox.setPrototypeDisplayValue("1234567890123456789012345");
+ permissionBoxes = new ArrayList<JComboBox>();
- permissionBoxes.add(firstPermissionBox);
+ updatePermissionsPanel(false);
- c.gridy = 1;
- add(permissionBoxes.get(0), c);
+ c.gridy = 2;
+ add(permissionsPanel, c);
// col 3
c.gridx = 2;
@@ -355,6 +446,68 @@ public class AclEditorFrame extends JFra
add(removeButton, c);
}
+ private JComboBox createPermissionBox() {
+ JComboBox result = new JComboBox(permissions);
+ result.setEditable(true);
+ result.setPrototypeDisplayValue("1234567890123456789012345");
+
+ JTextComponent editor = (JTextComponent) result.getEditor().getEditorComponent();
+ editor.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent event) {
+ updatePermissionsPanel(true);
+ }
+ });
+
+ editor.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB) {
+ updatePermissionsPanel(true);
+ }
+ }
+ });
+
+ return result;
+ }
+
+ private void updatePermissionsPanel(boolean focus) {
+ boolean changed = false;
+
+ if (!permissionBoxes.isEmpty()) {
+ int i = 0;
+ while (i < permissionBoxes.size() - 1) {
+ if (permissionBoxes.get(i).getSelectedItem().toString().trim().length() == 0) {
+ permissionBoxes.remove(i);
+ changed = true;
+ } else {
+ i++;
+ }
+ }
+
+ if (permissionBoxes.get(permissionBoxes.size() - 1).getSelectedItem().toString().trim().length() > 0) {
+ permissionBoxes.add(createPermissionBox());
+ changed = true;
+ }
+ } else {
+ permissionBoxes.add(createPermissionBox());
+ changed = true;
+ }
+
+ if (changed) {
+ permissionsPanel.removeAll();
+
+ for (JComboBox box : permissionBoxes) {
+ permissionsPanel.add(box);
+ }
+
+ revalidate();
+
+ if (focus) {
+ permissionBoxes.get(permissionBoxes.size() - 1).requestFocusInWindow();
+ }
+ }
+ }
+
public void updatePosition(int position) {
this.position = position;
setBackground(position % 2 == 0 ? BACKGROUND1 : BACKGROUND2);
@@ -373,7 +526,10 @@ public class AclEditorFrame extends JFra
List<String> permissions = new ArrayList<String>();
for (JComboBox box : permissionBoxes) {
- permissions.add(box.getSelectedItem().toString());
+ String permission = box.getSelectedItem().toString().trim();
+ if (permission.length() > 0) {
+ permissions.add(permission);
+ }
}
return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalBox.getSelectedItem()
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java?rev=1244899&r1=1244898&r2=1244899&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java Thu Feb 16 09:25:42 2012
@@ -20,6 +20,7 @@ package org.apache.chemistry.opencmis.wo
import java.awt.BorderLayout;
import java.awt.Color;
+import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
@@ -156,6 +157,8 @@ public class PropertyEditorFrame extends
*/
private boolean doUpdate() {
try {
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+
Map<String, Object> properties = new HashMap<String, Object>();
for (PropertyInputPanel propertyPanel : propertyPanels) {
if (propertyPanel.includeInUpdate()) {
@@ -182,6 +185,8 @@ public class PropertyEditorFrame extends
} catch (Exception ex) {
ClientHelper.showError(this, ex);
return false;
+ } finally {
+ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}