+ String appTitle = "";
+ if (ui.getTitle() != null)
+ appTitle = ui.getTitle().lead() + " - ";
+
+// String currentLayerId = ui.getCurrentLayerId();
+// SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null;
+ if (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) {
+ Node node = getNode(ui, event);
+ if (node == null)
+ return;
+ CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
+ SuiteLayer layer = findByType(layersByType, node);
+ ui.switchToLayer(layer, node);
+ ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node));
+ ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node));
+ } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) {
+ Node node = getNode(ui, event);
+ if (node == null)
+ return;
+ CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
+ SuiteLayer layer = findByType(layersByType, node);
+ ui.switchToLayer(layer, node);
+ ui.getCmsView().runAs(() -> layer.open(uiProvider, ui.getCurrentWorkArea(), node));
+ ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node));
+ } else if (SuiteUiUtils.isTopic(event, SuiteEvent.switchLayer)) {
+ String layerId = get(event, SuiteEvent.LAYER);
+ if (layerId != null) {
+// ui.switchToLayer(layerId, ui.getUserDir());
+ SuiteLayer suiteLayer = findLayer(layerId);
+ if (suiteLayer == null)
+ throw new IllegalArgumentException("No layer '" + layerId + "' available.");
+ Localized layerTitle = suiteLayer.getTitle();
+ // FIXME make sure we don't rebuild the work area twice
+ Composite workArea = ui.getCmsView().doAs(() -> ui.switchToLayer(layerId, ui.getUserDir()));
+ String title = null;
+ if (layerTitle != null)
+ title = layerTitle.lead();
+ Node nodeFromState = getNode(ui, event);
+ if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDir().getPath())) {
+ // default layer view is forced
+ String state = defaultLayerPid.equals(layerId) ? "~" : layerId;
+ ui.getCmsView().stateChanged(state, appTitle + title);
+ suiteLayer.view(null, workArea, nodeFromState);
+ } else {
+ Node layerCurrentContext = suiteLayer.getCurrentContext(workArea);
+ if (layerCurrentContext != null) {
+ // layer was already showing a context so we set the state to it
+ ui.getCmsView().stateChanged(nodeToState(layerCurrentContext),
+ appTitle + Jcr.getTitle(layerCurrentContext));
+ } else {
+ // no context was shown
+ ui.getCmsView().stateChanged(layerId, appTitle + title);
+ }
+ }