import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.api.NodeConstants;
-import org.argeo.api.NodeUtils;
import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.jcr.Jcr;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
-/** The {@link CmsView} for the work ergonomics of Argeo Suite. */
+/** The view for the default ergonomics of Argeo Suite. */
class SuiteUi extends Composite {
private static final long serialVersionUID = 6207018859086689108L;
-
+ private final static Log log = LogFactory.getLog(SuiteUi.class);
private Composite header;
private Composite belowHeader;
private Composite leadPane;
private Composite dynamicArea;
private Session sysSession;
- private Session homeSession;
- private Node userHome;
+// private Session homeSession;
+ private Node userDir;
private Map<String, SuiteLayer> layers = new HashMap<>();
private Map<String, Composite> workAreas = new HashMap<>();
return workAreas.get(id);
}
- Composite switchToLayer(String layer, Node context) {
+ Composite switchToLayer(String layerId, Node context) {
if (currentLayerId != null) {
Composite current = getCurrentWorkArea();
- if (currentLayerId.equals(layer))
+ if (currentLayerId.equals(layerId))
return current;
}
if (context == null) {
if (!cmsView.isAnonymous())
- context = userHome;
+ context = userDir;
}
- Composite toShow = getLayer(layer, context);
- getDisplay().syncExec(() -> {
- toShow.moveAbove(null);
- dynamicArea.layout(true, true);
- });
- currentLayerId = layer;
+ Composite toShow = getLayer(layerId, context);
+ currentLayerId = layerId;
+ if (!isDisposed())
+ getDisplay().syncExec(() -> {
+ if (!toShow.isDisposed())
+ toShow.moveAbove(null);
+ else
+ log.warn("Cannot show work area because it is disposed.");
+ dynamicArea.layout(true, true);
+ });
return toShow;
}
+ Composite switchToLayer(SuiteLayer layer, Node context) {
+ // TODO make it more robust
+ for (String layerId : layers.keySet()) {
+ SuiteLayer l = layers.get(layerId);
+ if (layer == l) {
+ return switchToLayer(layerId, context);
+ }
+ }
+ throw new IllegalArgumentException("Layer is not registered.");
+ }
+
void addLayer(String id, SuiteLayer layer) {
layers.put(id, layer);
}
return workArea;
}
+ synchronized void logout() {
+ userDir = null;
+ Jcr.logout(sysSession);
+// Jcr.logout(homeSession);
+ currentLayerId = null;
+ workAreas.clear();
+ }
+
/*
* GETTERS / SETTERS
*/
// return sysSession;
// }
//
- void initSessions(Repository repository) throws RepositoryException {
+ synchronized void initSessions(Repository repository, String userDirPath) throws RepositoryException {
this.sysSession = repository.login();
- this.homeSession = repository.login(NodeConstants.HOME_WORKSPACE);
- userHome = NodeUtils.getUserHome(homeSession);
+// this.homeSession = repository.login(NodeConstants.HOME_WORKSPACE);
+ userDir = sysSession.getNode(userDirPath);
addDisposeListener((e) -> {
Jcr.logout(sysSession);
- Jcr.logout(homeSession);
+// Jcr.logout(homeSession);
});
}
- Node getUserHome() {
- return userHome;
+ Node getUserDir() {
+ return userDir;
}
Session getSysSession() {
return sysSession;
if (NodeConstants.SYS_WORKSPACE.equals(workspaceName))
return sysSession;
- else if (NodeConstants.HOME_WORKSPACE.equals(workspaceName))
- return homeSession;
+// else if (NodeConstants.HOME_WORKSPACE.equals(workspaceName))
+// return homeSession;
else
throw new IllegalArgumentException("Unknown workspace " + workspaceName);
}
+ public CmsView getCmsView() {
+ return cmsView;
+ }
+
}