+ /*
+ * Events management
+ */
+
+ @Override
+ public void handleEvent(Event event) {
+
+ // Specific UI related events
+ SuiteUi ui = getRelatedUi(event);
+ try {
+ String currentLayerId = ui.getCurrentLayerId();
+ SuiteLayer layer = currentLayerId != null ? layers.get(currentLayerId).get() : null;
+ if (isTopic(event, SuiteEvent.refreshPart)) {
+ String nodePath = get(event, SuiteEvent.NODE_PATH);
+ String workspace = get(event, SuiteEvent.WORKSPACE);
+ Node node = Jcr.getNode(ui.getSession(workspace), nodePath);
+ CmsUiProvider uiProvider = findUiProvider(node);
+ layer.view(uiProvider, ui.getCurrentWorkArea(), node);
+ ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node));
+ } else if (isTopic(event, SuiteEvent.openNewPart)) {
+ String nodePath = get(event, SuiteEvent.NODE_PATH);
+ String workspace = get(event, SuiteEvent.WORKSPACE);
+ Node node = Jcr.getNode(ui.getSession(workspace), nodePath);
+ CmsUiProvider uiProvider = findUiProvider(node);
+ layer.open(uiProvider, ui.getCurrentWorkArea(), node);
+ ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node));
+ } else if (isTopic(event, SuiteEvent.switchLayer)) {
+ String layerId = get(event, SuiteEvent.LAYER);
+ ui.switchToLayer(layerId, Jcr.getRootNode(ui.getSession(null)));
+ }
+ } catch (Exception e) {
+ log.error("Cannot handle event " + event, e);
+// CmsView.getCmsView(ui).exception(e);
+ }
+
+ }
+
+ private String nodeToState(Node node) {
+ return '/' + Jcr.getWorkspaceName(node) + Jcr.getPath(node);
+ }
+
+ private SuiteUi getRelatedUi(Event event) {
+ return managedUis.get(get(event, CMS_VIEW_UID_PROPERTY));
+ }
+
+ private static boolean isTopic(Event event, CmsEvent cmsEvent) {
+ return event.getTopic().equals(cmsEvent.topic());
+ }
+
+ private static String get(Event event, String key) {
+ Object value = event.getProperty(key);
+ if (value == null)
+ throw new IllegalArgumentException("Property " + key + " must be set");
+ return value.toString();
+