From 5044fd730feba048c6b6647222881f7b3eeb8a33 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 14 May 2018 13:11:05 +0200 Subject: [PATCH] Browser navigation support --- .../argeo/cms/e4/rap/AbstractRapE4App.java | 7 +- .../argeo/cms/e4/rap/CmsLoginLifecycle.java | 67 +++++++++++++++++-- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java index f79864a54..9d1f782e6 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java @@ -23,6 +23,7 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration { private String pageTitle; private String e4Xmi; private String path; + private String lifeCycleUri = "bundleclass://org.argeo.cms.e4.rap/org.argeo.cms.e4.rap.CmsLoginLifecycle"; public void configure(Application application) { application.setExceptionHandler(new ExceptionHandler() { @@ -35,8 +36,6 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration { } }); - String lifeCycleUri = "bundleclass://org.argeo.cms.e4.rap/org.argeo.cms.e4.rap.CmsLoginLifecycle"; - Map properties = new HashMap(); properties.put(WebClient.PAGE_TITLE, pageTitle); E4ApplicationConfig config = new E4ApplicationConfig(e4Xmi, lifeCycleUri, null, false, true, true); @@ -90,4 +89,8 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration { this.path = path; } + public void setLifeCycleUri(String lifeCycleUri) { + this.lifeCycleUri = lifeCycleUri; + } + } diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java index 615a98117..78c4747f6 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java @@ -13,21 +13,49 @@ import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.CmsImageManager; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.UxContext; +import org.argeo.cms.ui.dialogs.CmsFeedback; import org.argeo.cms.util.SimpleUxContext; import org.argeo.cms.widgets.auth.CmsLoginShell; import org.argeo.node.NodeConstants; +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.e4.ui.workbench.UIEvents; import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate; import org.eclipse.e4.ui.workbench.lifecycle.PreSave; +import org.eclipse.rap.rwt.RWT; +import org.eclipse.rap.rwt.client.service.BrowserNavigation; +import org.eclipse.rap.rwt.client.service.BrowserNavigationEvent; +import org.eclipse.rap.rwt.client.service.BrowserNavigationListener; import org.eclipse.swt.widgets.Display; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; @SuppressWarnings("restriction") public class CmsLoginLifecycle implements CmsView { private final static Log log = LogFactory.getLog(CmsLoginLifecycle.class); + private UxContext uxContext; + private LoginContext loginContext; + private BrowserNavigation browserNavigation; + + private String state = null; @PostContextCreate - boolean login() { + boolean login(final IEventBroker eventBroker) { + browserNavigation = RWT.getClient().getService(BrowserNavigation.class); + if (browserNavigation != null) + browserNavigation.addBrowserNavigationListener(new BrowserNavigationListener() { + private static final long serialVersionUID = -3668136623771902865L; + + @Override + public void navigated(BrowserNavigationEvent event) { + state = event.getState(); + System.out.println("state=" + state); + if (uxContext != null)// is logged in + stateChanged(); + } + }); + Subject subject = Subject.getSubject(AccessController.getContext()); Display display = Display.getCurrent(); CmsLoginShell loginShell = new CmsLoginShell(this); @@ -49,13 +77,21 @@ public class CmsLoginLifecycle implements CmsView { return false; uxContext = new SimpleUxContext(); + eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler() { + @Override + public void handleEvent(Event event) { + startupComplete(); + eventBroker.unsubscribe(this); + } + }); + // lcs.changeApplicationLocale(Locale.FRENCH); return true; } @PreSave void destroy() { - //logout(); + // logout(); } @Override @@ -65,8 +101,7 @@ public class CmsLoginLifecycle implements CmsView { @Override public void navigateTo(String state) { - // TODO Auto-generated method stub - + browserNavigation.pushState(state, state); } @Override @@ -97,13 +132,14 @@ public class CmsLoginLifecycle implements CmsView { @Override public void exception(Throwable e) { - log.error("Unexpected exception in Eclipse 4 RAP", e); + String msg = "Unexpected exception in Eclipse 4 RAP"; + log.error(msg, e); + CmsFeedback.show(msg, e); } @Override public CmsImageManager getImageManager() { - // TODO Auto-generated method stub - return null; + throw new UnsupportedOperationException(); } protected Subject getSubject() { @@ -115,4 +151,21 @@ public class CmsLoginLifecycle implements CmsView { return CurrentUser.isAnonymous(getSubject()); } + // CALLBACKS + protected void startupComplete() { + } + + protected void stateChanged() { + + } + + // GETTERS + protected BrowserNavigation getBrowserNavigation() { + return browserNavigation; + } + + protected String getState() { + return state; + } + } -- 2.30.2