From 91ba500dcfe75cde313a513e341b7f9f57d64d75 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 14 May 2018 13:11:26 +0200 Subject: [PATCH] Browser navigation --- .../suite/e4/rap/ArgeoOfficeRapE4App.java | 1 + .../e4/rap/ArgeoSuiteLoginLifecycle.java | 66 +++++++++++++++++++ .../OSGI-INF/systemE4Service.xml | 2 +- .../e4/parts/AbstractSuiteDashboard.java | 31 ++++++--- .../e4/parts/DefaultDashboardEditor.java | 5 -- 5 files changed, 91 insertions(+), 14 deletions(-) create mode 100644 org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java diff --git a/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java index 473406f..92fcfa3 100644 --- a/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java +++ b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java @@ -8,6 +8,7 @@ public class ArgeoOfficeRapE4App extends AbstractRapE4App { setPageTitle("Argeo Office"); setE4Xmi("org.argeo.suite.e4/e4xmi/argeo-office.e4xmi"); setPath("/office"); + setLifeCycleUri("bundleclass://org.argeo.suite.e4.rap/org.argeo.suite.e4.rap.ArgeoSuiteLoginLifecycle"); } } diff --git a/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java new file mode 100644 index 0000000..3262311 --- /dev/null +++ b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java @@ -0,0 +1,66 @@ +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() { + + @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); + } + } + } +} diff --git a/org.argeo.suite.e4/OSGI-INF/systemE4Service.xml b/org.argeo.suite.e4/OSGI-INF/systemE4Service.xml index 1d758e2..c5be2de 100644 --- a/org.argeo.suite.e4/OSGI-INF/systemE4Service.xml +++ b/org.argeo.suite.e4/OSGI-INF/systemE4Service.xml @@ -1,6 +1,6 @@ - + diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java index 88067aa..521c1fc 100644 --- a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java +++ b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java @@ -5,8 +5,11 @@ import javax.annotation.PreDestroy; 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; @@ -17,6 +20,9 @@ import org.argeo.connect.ui.SystemWorkbenchService; 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; @@ -29,6 +35,7 @@ import org.eclipse.swt.widgets.Link; /** Generic dashboard for Argeo Suite applications */ public abstract class AbstractSuiteDashboard { + private final static Log log = LogFactory.getLog(AbstractSuiteDashboard.class); // DEPENDENCY INJECTION @Inject @@ -45,17 +52,20 @@ public abstract class AbstractSuiteDashboard { // 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 @@ -65,6 +75,7 @@ public abstract class AbstractSuiteDashboard { public void createPartControl(Composite parent) { toolkit = new FormToolkit(Display.getCurrent()); init(); + browserNavigation = RWT.getClient().getService(BrowserNavigation.class); } // UTILS @@ -125,6 +136,10 @@ public abstract class AbstractSuiteDashboard { JcrUtils.logoutQuietly(session); } + @Focus + public void setFocus() { + browserNavigation.pushState("~", "Dashboard"); + } // Expose to implementing classes protected Session getSession() { diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java index 1e2be9a..abf77ad 100644 --- a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java +++ b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java @@ -363,11 +363,6 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re } } - @Focus - public void setFocus() { - // refreshDocListGadget(); - } - public void setActivitiesService(ActivitiesService activitiesService) { this.activitiesService = activitiesService; } -- 2.30.2