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;
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.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.workbench.SuiteWorkbenchException;
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;
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. */
// 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) {
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();
public void setResourcesService(ResourcesService resourcesService) {
this.resourcesService = resourcesService;
}
-
+
public void setActivitiesService(ActivitiesService activitiesService) {
this.activitiesService = activitiesService;
}
-
+
public void setPeopleService(PeopleService peopleService) {
this.peopleService = peopleService;
}