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/15 17:44:45 UTC

svn commit: r1244585 - in /chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench: ./ actions/ details/

Author: fmui
Date: Wed Feb 15 16:44:44 2012
New Revision: 1244585

URL: http://svn.apache.org/viewvc?rev=1244585&view=rev
Log:
Workbench: added simple and incomplete ACL editor

Added:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java   (with props)
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java   (with props)
Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java

Added: 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=1244585&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java Wed Feb 15 16:44:44 2012
@@ -0,0 +1,383 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+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.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.UIManager;
+
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.commons.data.Ace;
+import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
+import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
+import org.apache.chemistry.opencmis.workbench.model.ClientModel;
+
+public class AclEditorFrame extends JFrame {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String WINDOW_TITLE = "ACL Editor";
+    private static final ImageIcon ICON_ADD = ClientHelper.getIcon("add.png");
+
+    private final ClientModel model;
+    private final CmisObject object;
+
+    private final AceList addAceList;
+    private final AceList removeAceList;
+    private AclPropagation aclPropagation;
+
+    public AclEditorFrame(final ClientModel model, final CmisObject object) {
+        super();
+
+        this.model = model;
+        this.object = object;
+
+        Object[] principals;
+        try {
+            // get users
+            List<String> princiaplList = new ArrayList<String>();
+            princiaplList.add("");
+            princiaplList.add("cmis:user");
+
+            String anonymous = model.getRepositoryInfo().getPrincipalIdAnonymous();
+            if (anonymous != null && anonymous.length() > 0) {
+                princiaplList.add(anonymous);
+            }
+
+            String anyone = model.getRepositoryInfo().getPrincipalIdAnyone();
+            if (anyone != null && anyone.length() > 0) {
+                princiaplList.add(anyone);
+            }
+
+            principals = princiaplList.toArray();
+        } catch (Exception ex) {
+            principals = new Object[] { "cmis:user" };
+        }
+
+        Object[] permissions;
+        try {
+            // get permissions
+            List<String> permissionsList = new ArrayList<String>();
+            permissionsList.add("");
+
+            for (PermissionDefinition pd : model.getRepositoryInfo().getAclCapabilities().getPermissions()) {
+                permissionsList.add(pd.getId());
+            }
+
+            permissions = permissionsList.toArray();
+        } catch (Exception ex) {
+            permissions = new Object[] { "", "cmis:read", "cmis:write", "cmis:all" };
+        }
+
+        addAceList = new AceList(principals, permissions);
+        removeAceList = new AceList(principals, permissions);
+        aclPropagation = AclPropagation.REPOSITORYDETERMINED;
+
+        createGUI();
+    }
+
+    private void createGUI() {
+        setTitle(WINDOW_TITLE);
+        setPreferredSize(new Dimension(800, 600));
+        setMinimumSize(new Dimension(300, 120));
+
+        setLayout(new BorderLayout());
+
+        final JPanel panel = new JPanel();
+        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
+
+        final Font labelFont = UIManager.getFont("Label.font");
+        final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
+
+        final JPanel topPanel = new JPanel();
+        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));
+        topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        final JLabel nameLabel = new JLabel(object.getName());
+        nameLabel.setFont(boldFont);
+        topPanel.add(nameLabel);
+        topPanel.add(new JLabel(object.getId()));
+        add(topPanel, BorderLayout.PAGE_START);
+
+        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),
+                new JScrollPane(removeAcePanel));
+
+        add(centerPanel, BorderLayout.CENTER);
+
+        JButton updateButton = new JButton("Update");
+        updateButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        updateButton.setDefaultCapable(true);
+        updateButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                if (doApply()) {
+                    dispose();
+                }
+            }
+        });
+
+        add(updateButton, BorderLayout.PAGE_END);
+
+        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+        pack();
+        setLocationRelativeTo(null);
+        setVisible(true);
+
+        centerPanel.setDividerLocation(0.5f);
+    }
+
+    private JPanel createAceListPanel(final String title, final AceList list) {
+        final Font labelFont = UIManager.getFont("Label.font");
+        final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
+
+        final JPanel result = new JPanel();
+        result.setLayout(new BoxLayout(result, BoxLayout.PAGE_AXIS));
+
+        final JPanel topPanel = new JPanel();
+        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.LINE_AXIS));
+        topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+        final JLabel titleLabel = new JLabel(title);
+        titleLabel.setFont(boldFont);
+        topPanel.add(titleLabel, BorderLayout.LINE_START);
+
+        topPanel.add(Box.createHorizontalGlue());
+
+        final JButton addButton = new JButton(ICON_ADD);
+        addButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                list.addNewAce();
+            }
+        });
+
+        topPanel.add(addButton, BorderLayout.LINE_END);
+
+        result.add(topPanel);
+
+        result.add(list);
+
+        return result;
+    }
+
+    /**
+     * Applies the ACEs.
+     */
+    private boolean doApply() {
+        try {
+            List<Ace> adds = addAceList.getAces();
+            List<Ace> removes = removeAceList.getAces();
+
+            if (adds != null || removes != null) {
+                object.applyAcl(adds, removes, aclPropagation);
+                model.reloadObject();
+            }
+
+            return true;
+        } catch (Exception ex) {
+            ClientHelper.showError(this, ex);
+            return false;
+        }
+    }
+
+    private static class AceList extends JPanel {
+
+        private static final long serialVersionUID = 1L;
+
+        private final List<AceInputPanel> panels;
+        private final Object[] principals;
+        private final Object[] permissions;
+
+        public AceList(final Object[] principals, final Object[] permissions) {
+            super();
+
+            panels = new ArrayList<AceInputPanel>();
+            this.principals = principals;
+            this.permissions = permissions;
+
+            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        }
+
+        public synchronized void addNewAce() {
+            AceInputPanel acePanel = new AceInputPanel(this, principals, permissions, panels.size());
+            panels.add(acePanel);
+
+            add(acePanel);
+        }
+
+        public synchronized void removeAce(int position) {
+            panels.remove(position);
+            for (int i = position; i < panels.size(); i++) {
+                panels.get(i).updatePosition(i);
+            }
+
+            removeAll();
+            for (AceInputPanel p : panels) {
+                add(p);
+            }
+
+            revalidate();
+        }
+
+        public synchronized List<Ace> getAces() {
+            List<Ace> result = new ArrayList<Ace>();
+
+            for (AceInputPanel p : panels) {
+                result.add(p.getAce());
+            }
+
+            return result.isEmpty() ? null : result;
+        }
+    }
+
+    /**
+     * ACE input panel.
+     */
+    public static class AceInputPanel extends JPanel {
+
+        private static final long serialVersionUID = 1L;
+
+        private static final Color BACKGROUND1 = UIManager.getColor("Table:\"Table.cellRenderer\".background");
+        private static final Color BACKGROUND2 = UIManager.getColor("Table.alternateRowColor");
+        private static final Color LINE = new Color(0xB8, 0xB8, 0xB8);
+
+        private static final ImageIcon ICON_REMOVE = ClientHelper.getIcon("remove.png");
+
+        private final AceList list;
+
+        private int position;
+        private JComboBox principalBox;
+        private List<JComboBox> permissionBoxes;
+
+        public AceInputPanel(final AceList list, final Object[] principals, final Object[] permissions, int position) {
+            super();
+
+            this.list = list;
+
+            updatePosition(position);
+
+            setLayout(new GridBagLayout());
+            setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, LINE),
+                    BorderFactory.createEmptyBorder(10, 5, 10, 5)));
+
+            GridBagConstraints c = new GridBagConstraints();
+            c.gridheight = 1;
+            c.gridwidth = 1;
+
+            // col 1
+            c.gridx = 0;
+            c.weightx = 1;
+            c.fill = GridBagConstraints.NONE;
+            c.anchor = GridBagConstraints.LINE_START;
+
+            c.gridy = 0;
+            add(new JLabel("Principal:"), c);
+
+            c.gridy = 1;
+            add(new JLabel("Permissions:"), c);
+
+            // col 2
+            c.gridx = 1;
+            c.weightx = 1;
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.anchor = GridBagConstraints.LINE_START;
+
+            principalBox = new JComboBox(principals);
+            principalBox.setEditable(true);
+            principalBox.setPrototypeDisplayValue("1234567890123456789012345");
+
+            c.gridy = 0;
+            add(principalBox, c);
+
+            permissionBoxes = new ArrayList<JComboBox>();
+
+            JComboBox firstPermissionBox = new JComboBox(permissions);
+            firstPermissionBox.setEditable(true);
+            firstPermissionBox.setPrototypeDisplayValue("1234567890123456789012345");
+
+            permissionBoxes.add(firstPermissionBox);
+
+            c.gridy = 1;
+            add(permissionBoxes.get(0), c);
+
+            // col 3
+            c.gridx = 2;
+            c.weightx = 1;
+            c.fill = GridBagConstraints.NONE;
+            c.anchor = GridBagConstraints.LINE_END;
+
+            c.gridy = 0;
+            JButton removeButton = new JButton(ICON_REMOVE);
+            removeButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    list.removeAce(getPosition());
+                }
+            });
+
+            add(removeButton, c);
+        }
+
+        public void updatePosition(int position) {
+            this.position = position;
+            setBackground(position % 2 == 0 ? BACKGROUND1 : BACKGROUND2);
+        }
+
+        public int getPosition() {
+            return position;
+        }
+
+        @Override
+        public Dimension getMaximumSize() {
+            return new Dimension(Short.MAX_VALUE, getPreferredSize().height);
+        }
+
+        public Ace getAce() {
+            List<String> permissions = new ArrayList<String>();
+
+            for (JComboBox box : permissionBoxes) {
+                permissions.add(box.getSelectedItem().toString());
+            }
+
+            return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalBox.getSelectedItem()
+                    .toString()), permissions);
+        }
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/AclEditorFrame.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java?rev=1244585&r1=1244584&r2=1244585&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/RepositoryInfoFrame.java Wed Feb 15 16:44:44 2012
@@ -21,7 +21,6 @@ package org.apache.chemistry.opencmis.wo
 import java.awt.Dimension;
 import java.util.List;
 
-import javax.swing.BorderFactory;
 import javax.swing.JFrame;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
@@ -175,7 +174,7 @@ public class RepositoryInfoFrame extends
                 JTree extensionsTree = new JTree();
                 extensionsTree.setRootVisible(false);
                 extensionsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-       
+
                 DefaultMutableTreeNode extRootNode = new DefaultMutableTreeNode("Extensions");
                 addExtension(extRootNode, repInfo.getExtensions());
 

Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java?rev=1244585&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java Wed Feb 15 16:44:44 2012
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench.actions;
+
+import org.apache.chemistry.opencmis.commons.enums.Action;
+import org.apache.chemistry.opencmis.workbench.AclEditorFrame;
+import org.apache.chemistry.opencmis.workbench.model.ClientModel;
+import org.apache.chemistry.opencmis.workbench.swing.ActionPanel;
+
+public class AclUpdatePanel extends ActionPanel {
+
+	private static final long serialVersionUID = 1L;
+
+	public AclUpdatePanel(ClientModel model) {
+		super("Change ACL", "Open ACL Editor", model);
+	}
+
+	@Override
+	protected void createActionComponents() {
+	}
+
+	@Override
+	public boolean isAllowed() {
+		if (getObject() == null) {
+			return false;
+		}
+
+		if ((getObject().getAllowableActions() == null)
+				|| (getObject().getAllowableActions().getAllowableActions() == null)) {
+			return true;
+		}
+
+		return getObject().getAllowableActions().getAllowableActions()
+				.contains(Action.CAN_APPLY_ACL);
+	}
+
+	@Override
+	public void doAction() throws Exception {
+		new AclEditorFrame(getClientModel(), getObject());
+	}
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/actions/AclUpdatePanel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java?rev=1244585&r1=1244584&r2=1244585&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ACLTable.java Wed Feb 15 16:44:44 2012
@@ -18,9 +18,13 @@
  */
 package org.apache.chemistry.opencmis.workbench.details;
 
+import java.awt.event.MouseEvent;
 import java.util.Collection;
 
 import org.apache.chemistry.opencmis.commons.data.Ace;
+import org.apache.chemistry.opencmis.commons.data.AllowableActions;
+import org.apache.chemistry.opencmis.commons.enums.Action;
+import org.apache.chemistry.opencmis.workbench.AclEditorFrame;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
 
 public class ACLTable extends AbstractDetailsTable {
@@ -35,6 +39,16 @@ public class ACLTable extends AbstractDe
         init(model, COLUMN_NAMES, COLUMN_WIDTHS);
     }
 
+    @Override
+    public void doubleClickAction(MouseEvent e, int rowIndex) {
+        AllowableActions aa = getObject().getAllowableActions();
+
+        if ((aa == null) || (aa.getAllowableActions() == null)
+                || aa.getAllowableActions().contains(Action.CAN_APPLY_ACL)) {
+            new AclEditorFrame(getClientModel(), getObject());
+        }
+    }
+
     public int getDetailRowCount() {
         if ((getObject().getAcl() == null) || (getObject().getAcl().getAces() == null)) {
             return 0;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java?rev=1244585&r1=1244584&r2=1244585&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ActionsPanel.java Wed Feb 15 16:44:44 2012
@@ -23,6 +23,7 @@ import javax.swing.BoxLayout;
 import javax.swing.JPanel;
 
 import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.workbench.actions.AclUpdatePanel;
 import org.apache.chemistry.opencmis.workbench.actions.AddObjectToFolderPanel;
 import org.apache.chemistry.opencmis.workbench.actions.ApplyPolicyPanel;
 import org.apache.chemistry.opencmis.workbench.actions.CancelCheckOutPanel;
@@ -57,6 +58,7 @@ public class ActionsPanel extends JPanel
     private DeleteContentStreamPanel deleteContentStreamPanel;
     private AddObjectToFolderPanel addObjectToFolderPanel;
     private RemoveObjectFromFolderPanel removeObjectFromFolderPanel;
+    private AclUpdatePanel aclUpdatePanel;
     private ApplyPolicyPanel applyPolicyPanel;
     private RemovePolicyPanel removePolicyPanel;
 
@@ -105,6 +107,9 @@ public class ActionsPanel extends JPanel
         removeObjectFromFolderPanel.setObject(object);
         removeObjectFromFolderPanel.setVisible(removeObjectFromFolderPanel.isAllowed());
 
+        aclUpdatePanel.setObject(object);
+        aclUpdatePanel.setVisible(aclUpdatePanel.isAllowed());
+
         applyPolicyPanel.setObject(object);
         applyPolicyPanel.setVisible(applyPolicyPanel.isAllowed());
 
@@ -152,6 +157,9 @@ public class ActionsPanel extends JPanel
         applyPolicyPanel = new ApplyPolicyPanel(model);
         add(applyPolicyPanel);
 
+        aclUpdatePanel = new AclUpdatePanel(model);
+        add(aclUpdatePanel);
+
         removePolicyPanel = new RemovePolicyPanel(model);
         add(removePolicyPanel);
     }