Fix search view
authorBruno Sinou <bsinou@argeo.org>
Sat, 16 Nov 2013 14:42:01 +0000 (14:42 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sat, 16 Nov 2013 14:42:01 +0000 (14:42 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@6622 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java [new file with mode: 0644]
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java [new file with mode: 0644]
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbTreeLabelProvider.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java

index 987039d74f15e05ab6f0251344860da97598e62f..fdab3e1a9b3a80c767a345670b44393ca316e09c 100644 (file)
@@ -1,6 +1,5 @@
 package org.argeo.slc.akb.ui;
 
-import org.argeo.slc.akb.ui.views.AkbDefaultView;
 import org.argeo.slc.akb.ui.views.EnvironmentsTreeView;
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
@@ -19,6 +18,6 @@ public class AkbEnvPerspective implements IPerspectiveFactory {
                IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT,
                                0.3f, editorArea);
                left.addView(EnvironmentsTreeView.ID);
-               left.addView(AkbDefaultView.ID);
+               // left.addView(AkbDefaultView.ID);
        }
 }
index e2cefacd75516d91c32609cf9ff5c160a37b895e..cf3963377fd4f89fe72ad5cfe5dec4510e9d4edf 100644 (file)
@@ -20,6 +20,12 @@ public class AkbImages {
        public final static Image ITEM_FOLDER = AkbUiPlugin.getImageDescriptor(
                        "icons/itemFolder.gif").createImage();
        
+       public final static Image CONNECTOR_ALIAS = AkbUiPlugin.getImageDescriptor(
+                       "icons/addConnector.gif").createImage();
+
+       public final static Image DEFAULT_CONNECTOR = AkbUiPlugin.getImageDescriptor(
+                       "icons/addConnector.gif").createImage();
+       
        public final static Image JDBC_CONNECTOR = AkbUiPlugin.getImageDescriptor(
                        "icons/jdbcConnector.gif").createImage();
        public final static Image JDBC_QUERY = AkbUiPlugin.getImageDescriptor(
diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java
new file mode 100644 (file)
index 0000000..d2da579
--- /dev/null
@@ -0,0 +1,356 @@
+package org.argeo.slc.akb.ui.composites;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.query.QueryManager;
+import javax.jcr.query.QueryResult;
+import javax.jcr.query.qom.Constraint;
+import javax.jcr.query.qom.Ordering;
+import javax.jcr.query.qom.QueryObjectModel;
+import javax.jcr.query.qom.QueryObjectModelFactory;
+import javax.jcr.query.qom.Selector;
+import javax.jcr.query.qom.StaticOperand;
+
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.jcr.JcrUiUtils;
+import org.argeo.eclipse.ui.jcr.lists.ColumnDefinition;
+import org.argeo.eclipse.ui.jcr.lists.NodeViewerComparator;
+import org.argeo.eclipse.ui.jcr.lists.SimpleJcrNodeLabelProvider;
+import org.argeo.eclipse.ui.specific.EclipseUiSpecificUtils;
+import org.argeo.eclipse.ui.utils.ViewerUtils;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.akb.AkbException;
+import org.argeo.slc.akb.AkbNames;
+import org.argeo.slc.akb.ui.providers.AkbImageProvider;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+
+public class AkbItemsTableComposite extends Composite implements ArgeoNames {
+       // private final static Log log =
+       // LogFactory.getLog(UserTableComposite.class);
+
+       private TableViewer usersViewer;
+       private Text filterTxt;
+       private final static String FILTER_HELP_MSG = "Type filter criterion "
+                       + "separated by a space";
+       private Session session;
+
+       private Font italic;
+       private Font bold;
+
+       private boolean hasFilter;
+       private boolean hasSelectionColumn;
+
+       // private List<Node> selectedItems = new ArrayList<Node>();
+
+       /**
+        * Overwrite to display other columns
+        */
+       public List<ColumnDefinition> getColumnsDef() {
+               List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+               // Name
+               columnDefs.add(new ColumnDefinition(null, Property.JCR_TITLE,
+                               PropertyType.STRING, "Name", 150));
+
+               return columnDefs;
+       }
+
+       public AkbItemsTableComposite(Composite parent, int style, Session session) {
+               super(parent, style);
+               this.session = session;
+       }
+
+       /**
+        * 
+        * @param addFilter
+        *            choose to add a field to filter results or not
+        * @param addSelection
+        *            choose to add a column to select some of the displayed results
+        *            or not
+        */
+       public void populate(boolean addFilter, boolean addSelection) {
+               // initialization
+               Composite parent = this;
+               italic = EclipseUiUtils.getItalicFont(parent);
+               bold = EclipseUiUtils.getBoldFont(parent);
+               hasFilter = addFilter;
+               hasSelectionColumn = addSelection;
+
+               // Main Layout
+               this.setLayout(new GridLayout(1, false));
+               if (hasFilter)
+                       createFilterPart(parent);
+               usersViewer = createTableViewer(parent);
+               EclipseUiSpecificUtils.enableToolTipSupport(usersViewer);
+               usersViewer.setContentProvider(new UsersContentProvider());
+               refreshFilteredList();
+       }
+
+       /** Returns the User table viewer, typically to add doubleclick listener */
+       public TableViewer getTableViewer() {
+               return usersViewer;
+       }
+
+       private TableViewer createTableViewer(final Composite parent) {
+               int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
+               if (hasSelectionColumn)
+                       style = style | SWT.CHECK;
+
+               Table table = new Table(parent, style);
+               table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               TableViewer viewer;
+               if (hasSelectionColumn)
+                       viewer = new CheckboxTableViewer(table);
+               else
+                       viewer = new TableViewer(table);
+               table.setLinesVisible(true);
+               table.setHeaderVisible(true);
+
+               // pass a mapping between col index and property name to the comparator.
+               // List<String> propertiesList = new ArrayList<String>();
+
+               TableViewerColumn column;
+               int offset = 0;
+               // if (hasSelectionColumn) {
+               if (hasSelectionColumn) {
+                       offset++;
+                       column = ViewerUtils.createTableViewerColumn(viewer, "", SWT.NONE,
+                                       25);
+                       // column.setEditingSupport(new SelectedEditingSupport(viewer));
+                       column.setLabelProvider(new ColumnLabelProvider() {
+                               @Override
+                               public String getText(Object element) {
+                                       return null;
+                               }
+                       });
+                       SelectionAdapter selectionAdapter = new SelectionAdapter() {
+                               boolean allSelected = false;
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       allSelected = !allSelected;
+                                       ((CheckboxTableViewer) usersViewer)
+                                                       .setAllChecked(allSelected);
+                               }
+                       };
+                       column.getColumn().addSelectionListener(selectionAdapter);
+               }
+
+               // Image column
+               offset++;
+               column = ViewerUtils.createTableViewerColumn(viewer, "", SWT.NONE, 25);
+               // column.setEditingSupport(new SelectedEditingSupport(viewer));
+               column.setLabelProvider(new ColumnLabelProvider() {
+                       private AkbImageProvider imageProvider = new AkbImageProvider();
+
+                       @Override
+                       public String getText(Object element) {
+                               return null;
+                       }
+
+                       @Override
+                       public Image getImage(Object element) {
+                               return imageProvider.getImage(element);
+                       }
+
+               });
+
+               // Create other columns
+               List<ColumnDefinition> colDefs = getColumnsDef();
+
+               NodeViewerComparator comparator = new NodeViewerComparator();
+               int i = offset;
+               for (ColumnDefinition colDef : colDefs) {
+                       column = ViewerUtils.createTableViewerColumn(viewer,
+                                       colDef.getHeaderLabel(), SWT.NONE, colDef.getColumnSize());
+                       column.setLabelProvider(new CLProvider(colDef.getPropertyName()));
+                       column.getColumn().addSelectionListener(
+                                       JcrUiUtils.getNodeSelectionAdapter(i,
+                                                       colDef.getPropertyType(), colDef.getPropertyName(),
+                                                       comparator, viewer));
+                       i++;
+               }
+
+               // IMPORTANT: initialize comparator before setting it
+               ColumnDefinition firstCol = colDefs.get(0);
+               comparator.setColumn(firstCol.getPropertyType(),
+                               firstCol.getPropertyName());
+               viewer.setComparator(comparator);
+
+               return viewer;
+       }
+
+       private class CLProvider extends SimpleJcrNodeLabelProvider {
+
+               public CLProvider(String propertyName) {
+                       super(propertyName);
+               }
+
+               public String getToolTipText(Object element) {
+                       return getText(element);
+               }
+
+               @Override
+               public Font getFont(Object elem) {
+                       return null;
+                       // // self
+                       // String username = getProperty(elem, ARGEO_USER_ID);
+                       // if (username.equals(session.getUserID()))
+                       // return bold;
+                       //
+                       // // disabled
+                       // try {
+                       // Node userProfile = (Node) elem;
+                       // // Node userProfile = userHome.getNode(ARGEO_PROFILE);
+                       // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
+                       // return italic;
+                       // else
+                       // return null;
+                       // } catch (RepositoryException e) {
+                       // throw new AkbException("Cannot get font for " + username, e);
+                       // }
+               }
+       }
+
+       @Override
+       public boolean setFocus() {
+               usersViewer.getTable().setFocus();
+               return true;
+       }
+
+       @Override
+       public void dispose() {
+               super.dispose();
+       }
+
+       public void refresh() {
+               refreshFilteredList();
+       }
+
+       private String getProperty(Object element, String name) {
+               try {
+                       Node node = (Node) element;
+                       return node.hasProperty(name) ? node.getProperty(name).getString()
+                                       : "";
+               } catch (RepositoryException e) {
+                       throw new AkbException("Cannot get property " + name, e);
+               }
+       }
+
+       private class UsersContentProvider implements IStructuredContentProvider {
+
+               public Object[] getElements(Object inputElement) {
+                       return (Object[]) inputElement;
+               }
+
+               public void dispose() {
+               }
+
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               }
+       }
+
+       /* MANAGE FILTER */
+       private void createFilterPart(Composite parent) {
+               // Text Area for the filter
+               filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH
+                               | SWT.ICON_CANCEL);
+               filterTxt.setMessage(FILTER_HELP_MSG);
+               filterTxt.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+                               | GridData.HORIZONTAL_ALIGN_FILL));
+               filterTxt.addModifyListener(new ModifyListener() {
+
+                       public void modifyText(ModifyEvent event) {
+                               refreshFilteredList();
+                       }
+               });
+       }
+
+       /**
+        * Refresh the user list: caller might overwrite in order to display a
+        * subset of all users
+        */
+       protected void refreshFilteredList() {
+               List<Node> nodes;
+               try {
+                       nodes = JcrUtils.nodeIteratorToList(listFilteredElements(session,
+                                       hasFilter ? filterTxt.getText() : null));
+                       usersViewer.setInput(nodes.toArray());
+               } catch (RepositoryException e) {
+                       throw new AkbException("Unable to items", e);
+               }
+       }
+
+       /**
+        * Build repository request : caller might overwrite in order to display a
+        * subset of all users
+        */
+       protected NodeIterator listFilteredElements(Session session, String filter)
+                       throws RepositoryException {
+               QueryManager queryManager = session.getWorkspace().getQueryManager();
+               QueryObjectModelFactory factory = queryManager.getQOMFactory();
+
+               Selector source = factory.selector(NodeType.MIX_TITLE,
+                               NodeType.MIX_TITLE);
+
+               // Default Constraint: in correct sub tree
+               Constraint defaultC = factory.descendantNode(source.getSelectorName(),
+                               AkbNames.AKB_TEMPLATES_BASE_PATH);
+
+               // FIXME: workaround to display only legal nodes
+               defaultC = factory.and(defaultC, factory.propertyExistence(
+                               source.getSelectorName(), Property.JCR_TITLE));
+
+               // Build constraints based the textArea content
+               if (filter != null && !"".equals(filter.trim())) {
+                       // Parse the String
+                       String[] strs = filter.trim().split(" ");
+                       for (String token : strs) {
+                               StaticOperand so = factory.literal(session.getValueFactory()
+                                               .createValue("*" + token + "*"));
+                               Constraint currC = factory.fullTextSearch(
+                                               source.getSelectorName(), null, so);
+                               if (defaultC == null)
+                                       defaultC = currC;
+                               else
+                                       defaultC = factory.and(defaultC, currC);
+                       }
+               }
+
+               Ordering order = factory.ascending(factory.propertyValue(
+                               source.getSelectorName(), Property.JCR_TITLE));
+               Ordering[] orderings = { order };
+
+               QueryObjectModel query = factory.createQuery(source, defaultC,
+                               orderings, null);
+
+               QueryResult result = query.execute();
+               return result.getNodes();
+       }
+}
\ No newline at end of file
diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java
new file mode 100644 (file)
index 0000000..d25e719
--- /dev/null
@@ -0,0 +1,48 @@
+package org.argeo.slc.akb.ui.providers;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.slc.akb.AkbException;
+import org.argeo.slc.akb.AkbTypes;
+import org.argeo.slc.akb.ui.AkbImages;
+import org.eclipse.swt.graphics.Image;
+
+public class AkbImageProvider {
+       public Image getImage(Object element) {
+               try {
+                       if (element instanceof ActiveTreeItem)
+                               element = ((ActiveTreeItem) element).getNode();
+
+                       if (element instanceof Node) {
+                               Node node = (Node) element;
+                               if (node.isNodeType(AkbTypes.AKB_ITEM_FOLDER))
+                                       return AkbImages.ITEM_FOLDER;
+                               else if (node.isNodeType(AkbTypes.AKB_SSH_CONNECTOR))
+                                       return AkbImages.SSH_CONNECTOR;
+                               else if (node.isNodeType(AkbTypes.AKB_SSH_COMMAND))
+                                       return AkbImages.SSH_COMMAND;
+                               else if (node.isNodeType(AkbTypes.AKB_SSH_FILE))
+                                       return AkbImages.SSH_FILE;
+                               else if (node.isNodeType(AkbTypes.AKB_JDBC_CONNECTOR))
+                                       return AkbImages.JDBC_CONNECTOR;
+                               else if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY))
+                                       return AkbImages.JDBC_QUERY;
+                               else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE))
+                                       return AkbImages.TEMPLATE;
+                               else if (node.isNodeType(AkbTypes.AKB_ENV))
+                                       return AkbImages.ACTIVE_ENV;
+                               else if (node.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER))
+                                       return AkbImages.CONNECTOR_FOLDER;
+                               else if (node.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS))
+                                       return AkbImages.CONNECTOR_ALIAS;
+                               else if (node.isNodeType(AkbTypes.AKB_CONNECTOR))
+                                       return AkbImages.DEFAULT_CONNECTOR;
+                       }
+               } catch (RepositoryException e) {
+                       throw new AkbException("Unexpected error while getting "
+                                       + "Custom node label", e);
+               }
+               return null;
+       }
+}
index 3c6b43fac9040bc351074601c0136b709dfc1595..0f3993f876bad7a1fd353fac92c20466a30487c3 100644 (file)
@@ -7,8 +7,6 @@ import javax.jcr.nodetype.NodeType;
 
 import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.slc.akb.AkbException;
-import org.argeo.slc.akb.AkbTypes;
-import org.argeo.slc.akb.ui.AkbImages;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
 
@@ -17,6 +15,8 @@ public class AkbTreeLabelProvider extends LabelProvider {
        // private final static Log log = LogFactory
        // .getLog(ResultTreeLabelProvider.class);
 
+       AkbImageProvider imageProvider = new AkbImageProvider();
+
        @Override
        public String getText(Object element) {
                try {
@@ -41,35 +41,6 @@ public class AkbTreeLabelProvider extends LabelProvider {
        }
 
        public Image getImage(Object element) {
-               try {
-                       if (element instanceof ActiveTreeItem)
-                               element = ((ActiveTreeItem) element).getNode();
-
-                       if (element instanceof Node) {
-                               Node node = (Node) element;
-                               if (node.isNodeType(AkbTypes.AKB_ITEM_FOLDER))
-                                       return AkbImages.ITEM_FOLDER;
-                               else if (node.isNodeType(AkbTypes.AKB_SSH_CONNECTOR))
-                                       return AkbImages.SSH_CONNECTOR;
-                               else if (node.isNodeType(AkbTypes.AKB_SSH_COMMAND))
-                                       return AkbImages.SSH_COMMAND;
-                               else if (node.isNodeType(AkbTypes.AKB_SSH_FILE))
-                                       return AkbImages.SSH_FILE;
-                               else if (node.isNodeType(AkbTypes.AKB_JDBC_CONNECTOR))
-                                       return AkbImages.JDBC_CONNECTOR;
-                               else if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY))
-                                       return AkbImages.JDBC_QUERY;
-                               else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE))
-                                       return AkbImages.TEMPLATE;
-                               else if (node.isNodeType(AkbTypes.AKB_ENV))
-                                       return AkbImages.ACTIVE_ENV;
-                               else if (node.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER))
-                                       return AkbImages.CONNECTOR_FOLDER;
-                       }
-               } catch (RepositoryException e) {
-                       throw new AkbException("Unexpected error while getting "
-                                       + "Custom node label", e);
-               }
-               return null;
+               return imageProvider.getImage(element);
        }
 }
\ No newline at end of file
index ac3e5a49d9aa656fac60395452f180afe0c75372..03cfabab4456d3ff28e2b52ab5d59b04ae962514 100644 (file)
@@ -1,17 +1,27 @@
 package org.argeo.slc.akb.ui.views;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.Node;
 import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.argeo.eclipse.ui.utils.CommandUtils;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.akb.AkbException;
 import org.argeo.slc.akb.ui.AkbUiPlugin;
-import org.eclipse.jface.viewers.TableViewer;
+import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;
+import org.argeo.slc.akb.ui.composites.AkbItemsTableComposite;
+import org.argeo.slc.akb.utils.AkbJcrUtils;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.part.ViewPart;
 
 /** Basic view that display a list of items with a quick search field. */
@@ -24,9 +34,7 @@ public class AkbDefaultView extends ViewPart {
        private Session session;
 
        // This page widgets
-       private TableViewer itemViewer;
-       private Text filterTxt;
-       private final static String FILTER_HELP_MSG = "Search...";
+       private AkbItemsTableComposite userTableCmp;
 
        @Override
        public void createPartControl(Composite parent) {
@@ -34,39 +42,72 @@ public class AkbDefaultView extends ViewPart {
                gl.horizontalSpacing = gl.verticalSpacing = gl.marginWidth = 0;
                parent.setLayout(gl);
 
-               // Filter
-               Composite cmp = new Composite(parent, SWT.NO_FOCUS);
-               cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
-               createFilterPart(cmp);
-
+               // Create the composite that displays the list and a filter
+               AkbItemsTableComposite userTableCmp = new AkbItemsTableComposite(
+                               parent, SWT.NO_FOCUS, session);
+               userTableCmp.populate(true, false);
+               userTableCmp
+                               .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               // Configure
+               userTableCmp.getTableViewer().addDoubleClickListener(
+                               new ViewDoubleClickListener());
+               getViewSite().setSelectionProvider(userTableCmp.getTableViewer());
+
+               // // Filter
+               // Composite cmp = new Composite(parent, SWT.NO_FOCUS);
+               // cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+               // createFilterPart(cmp);
+               //
                // // Table
                // cmp = new Composite(parent, SWT.NO_FOCUS);
                // cmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-               // itemViewer = createListPart(cmp, new EntitySingleColumnLabelProvider(
-               // peopleService));
+               // itemViewer = createListPart(cmp);
                //
-               // refreshFilteredList();
+               // // refreshFilteredList();
        }
 
-       private void createFilterPart(Composite parent) {
-               parent.setLayout(new GridLayout());
-               // Text Area for the filter
-               filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH
-                               | SWT.ICON_CANCEL);
-               filterTxt.setMessage(FILTER_HELP_MSG);
-               filterTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
-               filterTxt.addModifyListener(new ModifyListener() {
-
-                       public void modifyText(ModifyEvent event) {
-                               // refreshFilteredList();
+       class ViewDoubleClickListener implements IDoubleClickListener {
+               public void doubleClick(DoubleClickEvent evt) {
+                       Object obj = ((IStructuredSelection) evt.getSelection())
+                                       .getFirstElement();
+                       try {
+                               if (obj instanceof Node) {
+                                       Node node = (Node) obj;
+                                       Node currEnv = AkbJcrUtils.getCurrentTemplate(node);
+
+                                       // Add Connector Alias
+                                       Map<String, String> params = new HashMap<String, String>();
+                                       params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID,
+                                                       node.getIdentifier());
+                                       params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,
+                                                       currEnv.getIdentifier());
+
+                                       CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);
+                               }
+                       } catch (RepositoryException e) {
+                               throw new AkbException("Cannot open " + obj, e);
                        }
-               });
+               }
        }
 
-       // protected TableViewer createListPart(Composite parent,
-       // ILabelProvider labelProvider) {
+       // private void createFilterPart(Composite parent) {
+       // parent.setLayout(new GridLayout());
+       // // Text Area for the filter
+       // filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH
+       // | SWT.ICON_CANCEL);
+       // filterTxt.setMessage(FILTER_HELP_MSG);
+       // filterTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+       // filterTxt.addModifyListener(new ModifyListener() {
+       //
+       // public void modifyText(ModifyEvent event) {
+       // refreshFilteredList();
+       // }
+       // });
+       // }
+       //
+       // protected TableViewer createListPart(Composite parent) {
        // TableViewer v = new TableViewer(parent);
-       // v.setLabelProvider(labelProvider);
        //
        // TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL);
        // TableColumnLayout tableColumnLayout = new TableColumnLayout();
@@ -86,7 +127,8 @@ public class AkbDefaultView extends ViewPart {
 
        @Override
        public void dispose() {
-               // JcrUtils.logoutQuietly(session);
+               userTableCmp.dispose();
+               JcrUtils.logoutQuietly(session);
                super.dispose();
        }
 
@@ -164,11 +206,11 @@ public class AkbDefaultView extends ViewPart {
 
        /* DEPENDENCY INJECTION */
        public void setRepository(Repository repository) {
-               // try {
-               // session = repository.login();
-               // } catch (RepositoryException e) {
-               // throw new PeopleException("Unable to initialize "
-               // + "session for view " + ID, e);
-               // }
+               try {
+                       session = repository.login();
+               } catch (RepositoryException e) {
+                       throw new AkbException("Unable to initialize "
+                                       + "session for view " + ID, e);
+               }
        }
 }
\ No newline at end of file