--- /dev/null
+package org.argeo.suite.e4.rap;
+
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import javax.inject.Inject;
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.security.auth.Subject;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.cms.e4.rap.CmsLoginLifecycle;
+import org.argeo.connect.ui.SystemWorkbenchService;
+import org.argeo.jcr.JcrUtils;
+
+public class ArgeoSuiteLoginLifecycle extends CmsLoginLifecycle {
+ private final static Log log = LogFactory.getLog(ArgeoSuiteLoginLifecycle.class);
+ @Inject
+ SystemWorkbenchService systemWorkbenchService;
+
+ @Inject
+ Repository repository;
+
+ @Override
+ protected void startupComplete() {
+ loadState();
+ }
+
+ @Override
+ protected void stateChanged() {
+ loadState();
+ }
+
+ private void loadState() {
+ String state = getState();
+ if (state != null && state.startsWith("/")) {
+ Session session = null;
+ try {
+ Subject subject = getSubject();
+ session = Subject.doAs(subject, new PrivilegedExceptionAction<Session>() {
+
+ @Override
+ public Session run() throws PrivilegedActionException {
+ try {
+ return repository.login();
+ } catch (RepositoryException e) {
+ throw new PrivilegedActionException(e);
+ }
+ }
+
+ });
+ if (state.startsWith("/")) {
+ Node node = session.getNode(state);
+ systemWorkbenchService.openEntityEditor(node);
+ }
+ } catch (RepositoryException | PrivilegedActionException e) {
+ log.error("Cannot load state " + state, e);
+ } finally {
+ JcrUtils.logoutQuietly(session);
+ }
+ }
+ }
+}
import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.cms.ui.eclipse.forms.FormToolkit;
import org.argeo.cms.util.CmsUtils;
import org.argeo.connect.SystemAppService;
import org.argeo.connect.util.ConnectJcrUtils;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.jcr.JcrUtils;
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.client.service.BrowserNavigation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
/** Generic dashboard for Argeo Suite applications */
public abstract class AbstractSuiteDashboard {
+ private final static Log log = LogFactory.getLog(AbstractSuiteDashboard.class);
// DEPENDENCY INJECTION
@Inject
// UI Objects
private FormToolkit toolkit;
- public void init() {
+ // RAP specific
+ private BrowserNavigation browserNavigation;
+
+ public void init() {
session = ConnectJcrUtils.login(repository);
-// updateTooltip(input);
+ // updateTooltip(input);
}
-// private void updateTooltip(IEditorInput input) {
-// if (input instanceof EntityEditorInput) {
-// EntityEditorInput sei = (EntityEditorInput) input;
-// sei.setTooltipText("My Dashboard");
-// }
-// }
+ // private void updateTooltip(IEditorInput input) {
+ // if (input instanceof EntityEditorInput) {
+ // EntityEditorInput sei = (EntityEditorInput) input;
+ // sei.setTooltipText("My Dashboard");
+ // }
+ // }
/**
* Implementing classes must call super in order to create the correct form
public void createPartControl(Composite parent) {
toolkit = new FormToolkit(Display.getCurrent());
init();
+ browserNavigation = RWT.getClient().getService(BrowserNavigation.class);
}
// UTILS
JcrUtils.logoutQuietly(session);
}
+ @Focus
+ public void setFocus() {
+ browserNavigation.pushState("~", "Dashboard");
+ }
// Expose to implementing classes
protected Session getSession() {