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)));