X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Frap%2FCmsLoginLifecycle.java;h=a062bea6bd013d062d0ea598907a76168a4e84f4;hb=08c2efb392a969f02008073f55d310c95bddade9;hp=040dd50862e0e50828bd0d7a18b0c9466b6ba269;hpb=2b13afb8406502547a911cba84fb1b8f40282e46;p=lgpl%2Fargeo-commons.git 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 040dd5086..a062bea6b 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,23 +13,54 @@ 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.SimpleImageManager; import org.argeo.cms.util.SimpleUxContext; import org.argeo.cms.widgets.auth.CmsLoginShell; +import org.argeo.eclipse.ui.specific.UiContext; 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 CmsImageManager imageManager; + 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(); + if (uxContext != null)// is logged in + stateChanged(); + } + }); + Subject subject = Subject.getSubject(AccessController.getContext()); Display display = Display.getCurrent(); + UiContext.setData(CmsView.KEY, this); CmsLoginShell loginShell = new CmsLoginShell(this); loginShell.setSubject(subject); try { @@ -48,6 +79,15 @@ public class CmsLoginLifecycle implements CmsView { if (CurrentUser.getUsername(getSubject()) == null) return false; uxContext = new SimpleUxContext(); + imageManager = new SimpleImageManager(); + + 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; @@ -55,7 +95,7 @@ public class CmsLoginLifecycle implements CmsView { @PreSave void destroy() { - logout(); + // logout(); } @Override @@ -65,8 +105,7 @@ public class CmsLoginLifecycle implements CmsView { @Override public void navigateTo(String state) { - // TODO Auto-generated method stub - + browserNavigation.pushState(state, state); } @Override @@ -86,7 +125,7 @@ public class CmsLoginLifecycle implements CmsView { @Override public void logout() { if (loginContext == null) - throw new CmsException("Login context should not bet null"); + throw new CmsException("Login context should not be null"); try { CurrentUser.logoutCmsSession(loginContext.getSubject()); loginContext.logout(); @@ -97,13 +136,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; + return imageManager; } protected Subject getSubject() { @@ -115,4 +155,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; + } + }