Only coworkers can log in to office.
[gpl/argeo-suite.git] / org.argeo.suite.workbench.rap / src / org / argeo / suite / workbench / parts / QuickSearchView.java
index c9e9bf1e1009f2d2fb0087429a92fd17d2984c59..c8ebdb2ea693059fd719388f7a85250aca08494f 100644 (file)
@@ -6,6 +6,9 @@ import javax.jcr.NodeIterator;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryResult;
 
@@ -16,18 +19,18 @@ import org.argeo.cms.util.CmsUtils;
 import org.argeo.connect.ConnectTypes;
 import org.argeo.connect.resources.ResourcesService;
 import org.argeo.connect.ui.ConnectUiConstants;
+import org.argeo.connect.ui.Refreshable;
+import org.argeo.connect.ui.SystemWorkbenchService;
 import org.argeo.connect.ui.util.BasicNodeListContentProvider;
+import org.argeo.connect.ui.util.JcrViewerDClickListener;
 import org.argeo.connect.ui.widgets.DelayedText;
 import org.argeo.connect.util.ConnectJcrUtils;
 import org.argeo.connect.util.XPathUtils;
-import org.argeo.connect.workbench.Refreshable;
-import org.argeo.connect.workbench.SystemWorkbenchService;
-import org.argeo.connect.workbench.util.JcrViewerDClickListener;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.people.PeopleService;
-import org.argeo.suite.SuiteException;
 import org.argeo.suite.workbench.AsUiPlugin;
+import org.argeo.suite.workbench.SuiteWorkbenchException;
 import org.argeo.suite.workbench.internal.EntitySingleColumnLabelProvider;
 import org.eclipse.jface.layout.TableColumnLayout;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -45,6 +48,9 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.ViewPart;
 
 /** A table with a quick search field. */
@@ -62,7 +68,12 @@ public class QuickSearchView extends ViewPart implements Refreshable {
 
        // This page widgets
        private TableViewer entityViewer;
-       private DelayedText filterTxt;
+       private Text filterTxt;
+
+       @Override
+       public void init(IViewSite site) throws PartInitException {
+               super.init(site);
+       }
 
        @Override
        public void createPartControl(Composite parent) {
@@ -73,21 +84,36 @@ public class QuickSearchView extends ViewPart implements Refreshable {
                entityViewer = createListPart(parent, new EntitySingleColumnLabelProvider(resourcesService, activitiesService,
                                peopleService, systemWorkbenchService));
                refreshFilteredList();
+
+               try {
+                       session.getWorkspace().getObservationManager().addEventListener(new EventListener() {
+
+                               @Override
+                               public void onEvent(EventIterator events) {
+                                       parent.getDisplay().asyncExec(() -> refreshFilteredList());
+                               }
+                       }, Event.PROPERTY_CHANGED | Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED, "/", true, null,
+                                       new String[] { ConnectTypes.CONNECT_ENTITY }, true);
+               } catch (RepositoryException e) {
+                       throw new SuiteWorkbenchException("Cannot add JCR observer", e);
+               }
+
        }
 
        public void addFilterPanel(Composite parent) {
                // Use a delayed text: the query won't be done until the user stop
                // typing for 800ms
                int style = SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL;
-               filterTxt = new DelayedText(parent, style, ConnectUiConstants.SEARCH_TEXT_DELAY);
+               DelayedText delayedText = new DelayedText(parent, style, ConnectUiConstants.SEARCH_TEXT_DELAY);
+               filterTxt = delayedText.getText();
                filterTxt.setLayoutData(EclipseUiUtils.fillWidth());
 
                final ServerPushSession pushSession = new ServerPushSession();
-               filterTxt.addDelayedModifyListener(pushSession, new ModifyListener() {
+               delayedText.addDelayedModifyListener(pushSession, new ModifyListener() {
                        private static final long serialVersionUID = 5003010530960334977L;
 
                        public void modifyText(ModifyEvent event) {
-                               filterTxt.getDisplay().asyncExec(new Runnable() {
+                               delayedText.getText().getDisplay().asyncExec(new Runnable() {
                                        @Override
                                        public void run() {
                                                refreshFilteredList();
@@ -145,7 +171,7 @@ public class QuickSearchView extends ViewPart implements Refreshable {
                CmsUtils.setItemHeight(table, 26);
 
                v.setContentProvider(new BasicNodeListContentProvider());
-               v.addDoubleClickListener(new JcrViewerDClickListener());
+               v.addDoubleClickListener(new JcrViewerDClickListener(systemWorkbenchService));
                return v;
        }
 
@@ -202,7 +228,7 @@ public class QuickSearchView extends ViewPart implements Refreshable {
                                                + " ms by executing XPath query (" + xpathQueryStr + ").");
                        }
                } catch (RepositoryException e) {
-                       throw new SuiteException("Unable to list entities", e);
+                       throw new SuiteWorkbenchException("Unable to list entities", e);
                }
        }
 
@@ -214,11 +240,11 @@ public class QuickSearchView extends ViewPart implements Refreshable {
        public void setResourcesService(ResourcesService resourcesService) {
                this.resourcesService = resourcesService;
        }
-       
+
        public void setActivitiesService(ActivitiesService activitiesService) {
                this.activitiesService = activitiesService;
        }
-       
+
        public void setPeopleService(PeopleService peopleService) {
                this.peopleService = peopleService;
        }