diff --git a/magnolia-ui-contentapp/src/main/java/info/magnolia/ui/contentapp/browser/BrowserSubApp.java b/magnolia-ui-contentapp/src/main/java/info/magnolia/ui/contentapp/browser/BrowserSubApp.java
index 161c7d1..57eddf4 100644
--- a/magnolia-ui-contentapp/src/main/java/info/magnolia/ui/contentapp/browser/BrowserSubApp.java
+++ b/magnolia-ui-contentapp/src/main/java/info/magnolia/ui/contentapp/browser/BrowserSubApp.java
@@ -49,12 +49,16 @@ import info.magnolia.ui.api.app.SubAppContext;
import info.magnolia.ui.api.app.SubAppEventBus;
import info.magnolia.ui.api.availability.AvailabilityDefinition;
import info.magnolia.ui.api.availability.AvailabilityRule;
+import info.magnolia.ui.api.event.AdmincentralEventBus;
+import info.magnolia.ui.api.event.ContentChangedEvent;
import info.magnolia.ui.api.location.Location;
import info.magnolia.ui.api.view.View;
import info.magnolia.ui.contentapp.ContentSubAppView;
import info.magnolia.ui.framework.app.BaseSubApp;
import info.magnolia.ui.vaadin.actionbar.ActionPopup;
+import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
import info.magnolia.ui.vaadin.integration.jcr.JcrItemUtil;
+import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
import info.magnolia.ui.workbench.ContentView.ViewType;
import info.magnolia.ui.workbench.definition.WorkbenchDefinition;
import info.magnolia.ui.workbench.event.ItemRightClickedEvent;
@@ -63,7 +67,9 @@ import info.magnolia.ui.workbench.event.SelectionChangedEvent;
import info.magnolia.ui.workbench.event.ViewTypeChangedEvent;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import javax.inject.Inject;
import javax.inject.Named;
@@ -116,16 +122,18 @@ public class BrowserSubApp extends BaseSubApp {
private final BrowserPresenter browser;
private final EventBus subAppEventBus;
+ private final EventBus adminCentralEventBus;
private ActionExecutor actionExecutor;
private ComponentProvider componentProvider;
@Inject
- public BrowserSubApp(ActionExecutor actionExecutor, final SubAppContext subAppContext, final ContentSubAppView view, final BrowserPresenter browser, final @Named(SubAppEventBus.NAME) EventBus subAppEventBus, ComponentProvider componentProvider) {
+ public BrowserSubApp(ActionExecutor actionExecutor, final SubAppContext subAppContext, final ContentSubAppView view, final BrowserPresenter browser, @Named(AdmincentralEventBus.NAME) EventBus adminCentralEventBus, final @Named(SubAppEventBus.NAME) EventBus subAppEventBus, ComponentProvider componentProvider) {
super(subAppContext, view);
if (subAppContext == null || view == null || browser == null || subAppEventBus == null) {
throw new IllegalArgumentException("Constructor does not allow for null args. Found SubAppContext = " + subAppContext + ", ContentSubAppView = " + view + ", BrowserPresenter = " + browser + ", EventBus = " + subAppEventBus);
}
this.browser = browser;
+ this.adminCentralEventBus = adminCentralEventBus;
this.subAppEventBus = subAppEventBus;
this.actionExecutor = actionExecutor;
this.componentProvider = componentProvider;
@@ -147,7 +155,7 @@ public class BrowserSubApp extends BaseSubApp {
super.start(l);
getView().setContentView(browser.start());
restoreBrowser(l);
- registerSubAppEventsHandlers(subAppEventBus, this);
+ bindHandlers();
return getView();
}
@@ -461,8 +469,8 @@ public class BrowserSubApp extends BaseSubApp {
*
{@link SearchEvent}
*
*/
- private void registerSubAppEventsHandlers(final EventBus subAppEventBus, final BrowserSubApp subApp) {
- final ActionbarPresenter actionbar = subApp.getBrowser().getActionbarPresenter();
+ private void bindHandlers() {
+ final ActionbarPresenter actionbar = getBrowser().getActionbarPresenter();
subAppEventBus.addHandler(SelectionChangedEvent.class, new SelectionChangedEvent.Handler() {
@Override
@@ -523,6 +531,23 @@ public class BrowserSubApp extends BaseSubApp {
updateActionbar(actionbar);
}
});
+
+ adminCentralEventBus.addHandler(ContentChangedEvent.class, new ContentChangedEvent.Handler() {
+ @Override
+ public void onContentChanged(ContentChangedEvent event) {
+ // Compare workspaces
+ if (getWorkspace().equals(event.getWorkspace())) {
+ Set itemList = new HashSet(1);
+ try {
+ Node node = MgnlContext.getJCRSession(event.getWorkspace()).getNodeByIdentifier(event.getItemId());
+ itemList.add(new JcrNodeAdapter(node));
+ subAppEventBus.fireEvent(new SelectionChangedEvent(event.getWorkspace(), itemList));
+ } catch (RepositoryException e) {
+ log.error("Error getting item from itemId [{}]", event.getItemId(), e);
+ }
+ }
+ }
+ });
}
public static List- getJcrItemsExceptOne(final String workspaceName, List ids, String itemIdToExclude) {
@@ -541,4 +566,9 @@ public class BrowserSubApp extends BaseSubApp {
}
return items;
}
+
+ protected String getWorkspace() {
+ BrowserSubAppDescriptor subAppDescriptor = (BrowserSubAppDescriptor) getSubAppContext().getSubAppDescriptor();
+ return subAppDescriptor.getWorkbench().getWorkspace();
+ }
}
diff --git a/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/ContentSubAppTest.java b/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/ContentSubAppTest.java
index 93b69c6..99635eb 100644
--- a/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/ContentSubAppTest.java
+++ b/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/ContentSubAppTest.java
@@ -62,6 +62,7 @@ public class ContentSubAppTest {
private AppContext appContext;
private ContentSubAppView view;
private BrowserPresenter workbench;
+ private EventBus adminCentralEventBus;
private EventBus subAppEventBus;
private DummyContentSubApp subApp;
private SubAppContext subAppContext;
@@ -82,14 +83,14 @@ public class ContentSubAppTest {
when(workbench.getActionbarPresenter()).thenReturn(actionbar);
subAppEventBus = mock(EventBus.class);
- this.subApp = new DummyContentSubApp(null, subAppContext, view, workbench, subAppEventBus);
+ this.subApp = new DummyContentSubApp(null, subAppContext, view, workbench, adminCentralEventBus, subAppEventBus);
}
private class DummyContentSubApp extends BrowserSubApp {
public int foo = 0;
- public DummyContentSubApp(ActionExecutor actionExecutor, SubAppContext subAppContext, ContentSubAppView view, BrowserPresenter workbench, EventBus subAppEventBus) {
- super(actionExecutor, subAppContext, view, workbench, subAppEventBus, componentProvider);
+ public DummyContentSubApp(ActionExecutor actionExecutor, SubAppContext subAppContext, ContentSubAppView view, BrowserPresenter workbench, EventBus adminCentralEventBus, EventBus subAppEventBus) {
+ super(actionExecutor, subAppContext, view, workbench, adminCentralEventBus, subAppEventBus, componentProvider);
}
@Override
diff --git a/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/browser/BrowserSubAppTest.java b/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/browser/BrowserSubAppTest.java
index fb403ea..4bc860c 100644
--- a/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/browser/BrowserSubAppTest.java
+++ b/magnolia-ui-contentapp/src/test/java/info/magnolia/ui/contentapp/browser/BrowserSubAppTest.java
@@ -109,6 +109,7 @@ public class BrowserSubAppTest extends MgnlTestCase {
private SubAppContext subAppContext;
private BrowserSubApp subApp;
private SimpleActionExecutor actionExecutor;
+ private EventBus adminCentralEventBus;
private EventBus subAppEventBus;
private ContentSubAppView view;
private BrowserPresenter browserPresenter;
@@ -158,7 +159,7 @@ public class BrowserSubAppTest extends MgnlTestCase {
// GIVEN
sectionToShow.setAvailability(sAvailabilityAlways);
initActionbar();
- subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, subAppEventBus, componentProvider);
+ subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, adminCentralEventBus, subAppEventBus, componentProvider);
// root
List ids = new ArrayList(1);
ids.add(JcrItemUtil.getItemId(session.getRootNode()));
@@ -179,7 +180,7 @@ public class BrowserSubAppTest extends MgnlTestCase {
// GIVEN
sectionToShow.setAvailability(sAvailabilityAlways);
initActionbar();
- subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, subAppEventBus, componentProvider);
+ subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, adminCentralEventBus, subAppEventBus, componentProvider);
// node
List ids = new ArrayList(1);
ids.add(JcrItemUtil.getItemId(testContentNode));
@@ -201,7 +202,7 @@ public class BrowserSubAppTest extends MgnlTestCase {
// GIVEN
sectionToShow.setAvailability(sAvailabilityAlways);
initActionbar();
- subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, subAppEventBus, componentProvider);
+ subApp = new BrowserSubApp(actionExecutor, subAppContext, view, browserPresenter, adminCentralEventBus, subAppEventBus, componentProvider);
// property
List ids = new ArrayList(1);
ids.add(JcrItemUtil.getItemId(testContentNode.getProperty(TEST_PROPERTY)));