import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.commons.logging.LogFactory;
import org.argeo.api.NodeUtils;
import org.argeo.cms.CmsUserManager;
+import org.argeo.cms.LocaleUtils;
import org.argeo.cms.auth.CmsSession;
import org.argeo.cms.ui.AbstractCmsApp;
import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.dialogs.CmsFeedback;
import org.argeo.cms.ui.util.CmsEvent;
import org.argeo.cms.ui.util.CmsUiUtils;
+import org.argeo.eclipse.ui.specific.UiContext;
import org.argeo.entity.EntityConstants;
import org.argeo.entity.EntityNames;
import org.argeo.entity.EntityType;
refreshPart(findUiProvider(LOGIN_SCREEN_PID), ui.getBelowHeader(), context);
ui.layout(true, true);
} else {
+ CmsSession cmsSession = cmsView.getCmsSession();
if (ui.getUserDir() == null) {
- CmsSession cmsSession = cmsView.getCmsSession();
Session adminSession = null;
try {
adminSession = NodeUtils.openDataAdminSession(getRepository(), null);
Jcr.logout(adminSession);
}
}
+ initLocale(cmsSession);
context = stateToNode(ui, state);
if (context == null)
context = ui.getUserDir();
}
}
+ private void initLocale(CmsSession cmsSession) {
+ Locale locale = cmsSession.getLocale();
+ UiContext.setLocale(locale);
+ LocaleUtils.setThreadLocale(locale);
+
+ }
+
private void refreshPart(CmsUiProvider uiProvider, Composite part, Node context) {
CmsUiUtils.clear(part);
uiProvider.createUiPart(part, context);
@Override
public void setState(Composite parent, String state) {
- if (state == null || !state.startsWith("/"))
+ if (state == null || state.equals("~"))
return;
+ if (!state.startsWith("/") && !state.equals("~")) {
+ if (parent instanceof SuiteUi) {
+ SuiteUi ui = (SuiteUi) parent;
+ String currentLayerId = ui.getCurrentLayerId();
+ if (state.equals(currentLayerId))
+ return; // does nothing
+ else {
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(SuiteEvent.LAYER, state);
+ ui.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), properties);
+ }
+ }
+ return;
+ }
SuiteUi suiteUi = (SuiteUi) parent;
Node node = stateToNode(suiteUi, state);
if (node == null) {
private Node stateToNode(SuiteUi suiteUi, String state) {
if (suiteUi == null)
return null;
- if (state == null)
+ if (state == null || !state.startsWith("/"))
return null;
String path = state.substring(1);
CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
SuiteLayer layer = findByType(layersByType, node);
ui.switchToLayer(layer, node);
- layer.view(uiProvider, ui.getCurrentWorkArea(), node);
+ ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node));
ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node));
} else if (isTopic(event, SuiteEvent.openNewPart)) {
Node node = getNode(ui, event);
CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
SuiteLayer layer = findByType(layersByType, node);
ui.switchToLayer(layer, node);
- layer.open(uiProvider, ui.getCurrentWorkArea(), node);
+ ui.getCmsView().runAs(() -> 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);
if (layerId != null) {
- ui.switchToLayer(layerId, ui.getUserDir());
- // ui.getCmsView().navigateTo("~");
+// ui.switchToLayer(layerId, ui.getUserDir());
+ ui.getCmsView().runAs(() -> ui.switchToLayer(layerId, ui.getUserDir()));
+ ui.getCmsView().navigateTo(layerId);
} else {
Node node = getNode(ui, event);
if (node != null) {
SuiteLayer layer = findByType(layersByType, node);
- ui.switchToLayer(layer, node);
+ ui.getCmsView().runAs(() -> ui.switchToLayer(layer, node));
}
}
}