@Override
	public void nodeSelectionChanged(List<String> selectedNodes)
	{
		this.aclDataPanel.removeAll();
		if (selectedNodes.size() > 0)
		{
			this.selectedNode = selectedNodes.get(0);
			SwingWorker<List<Map<String, String>>, Void> worker = new SwingWorker<List<Map<String, String>>, Void>()
			{

				@Override
				protected List<Map<String, String>> doInBackground() throws Exception
				{
					return NodeViewerACL.this.zooInspectorManager
							.getACLs(NodeViewerACL.this.selectedNode);
				}

				@Override
				protected void done()
				{
					List<Map<String, String>> acls = null;
					try
					{
						acls = get();
					}
					catch (InterruptedException e)
					{
						acls = new ArrayList<Map<String, String>>();
						LoggerFactory.getLogger().error(
								"Error retrieving ACL Information for node: "
										+ NodeViewerACL.this.selectedNode, e);
					}
					catch (ExecutionException e)
					{
						acls = new ArrayList<Map<String, String>>();
						LoggerFactory.getLogger().error(
								"Error retrieving ACL Information for node: "
										+ NodeViewerACL.this.selectedNode, e);
					}
					int numRows = acls.size() * 2 + 1;
					double[] rows = new double[numRows];
					for (int i = 0; i < numRows; i++)
					{
						if (i % 2 == 0)
						{
							rows[i] = 5;
						}
						else
						{
							rows[i] = TableLayout.PREFERRED;
						}
					}
					aclDataPanel.setLayout(new TableLayout(new double[] { 10,
							TableLayout.PREFERRED, 10 }, rows));
					int j = 0;
					for (Map<String, String> data : acls)
					{
						int rowPos = 2 * j + 1;
						JPanel aclPanel = new JPanel();
						aclPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
						aclPanel.setBackground(Color.WHITE);
						int numRowsACL = data.size() * 2 + 1;
						double[] rowsACL = new double[numRowsACL];
						for (int i = 0; i < numRowsACL; i++)
						{
							if (i % 2 == 0)
							{
								rowsACL[i] = 5;
							}
							else
							{
								rowsACL[i] = TableLayout.PREFERRED;
							}
						}
						aclPanel.setLayout(new TableLayout(new double[] { 10,
								TableLayout.PREFERRED, 5, TableLayout.PREFERRED, 10 }, rowsACL));
						int i = 0;
						for (Map.Entry<String, String> entry : data.entrySet())
						{
							int rowPosACL = 2 * i + 1;
							JLabel label = new JLabel(entry.getKey());
							label.setFont(new Font("Courier New",Font.PLAIN,16));
							JTextField text = new JTextField(entry.getValue());
							text.setEditable(false);
							text.setFont(new Font("Courier New",Font.PLAIN,16));
							aclPanel.add(label, "1," + rowPosACL);
							aclPanel.add(text, "3," + rowPosACL);
							i++;
						}
						aclDataPanel.add(aclPanel, "1," + rowPos);
					}
					NodeViewerACL.this.aclDataPanel.revalidate();
					NodeViewerACL.this.aclDataPanel.repaint();
				}
			};
			worker.execute();
		}
	}