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=3ee8df1ef76c27a9b44a672c16354d4b3fe0cf8a;hb=af817c9bebfa3187f9a64c3e6aadb933dac148c8;hp=615a98117f0b49fb5ba047b5af7ff875210d090f;hpb=8267fad4498b78552b784dcbcb7f9e03a53ee4ba;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 615a98117..3ee8df1ef 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 @@ -1,6 +1,7 @@ package org.argeo.cms.e4.rap; import java.security.AccessController; +import java.util.UUID; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; @@ -8,29 +9,62 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.cms.CmsException; +import org.argeo.api.NodeConstants; +import org.argeo.api.cms.CmsImageManager; +import org.argeo.api.cms.CmsView; +import org.argeo.api.cms.UxContext; 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.util.SimpleUxContext; -import org.argeo.cms.widgets.auth.CmsLoginShell; -import org.argeo.node.NodeConstants; +import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.swt.SimpleSwtUxContext; +import org.argeo.cms.swt.auth.CmsLoginShell; +import org.argeo.cms.swt.dialogs.CmsFeedback; +import org.argeo.cms.ui.util.SimpleImageManager; +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; + private String uid; @PostContextCreate - boolean login() { + boolean login(final IEventBroker eventBroker) { + uid = UUID.randomUUID().toString(); + 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); + CmsSwtUtils.registerCmsView(loginShell.getShell(), this); loginShell.setSubject(subject); try { // try pre-auth @@ -47,7 +81,16 @@ public class CmsLoginLifecycle implements CmsView { } if (CurrentUser.getUsername(getSubject()) == null) return false; - uxContext = new SimpleUxContext(); + uxContext = new SimpleSwtUxContext(); + 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 +98,7 @@ public class CmsLoginLifecycle implements CmsView { @PreSave void destroy() { - //logout(); + // logout(); } @Override @@ -65,14 +108,13 @@ public class CmsLoginLifecycle implements CmsView { @Override public void navigateTo(String state) { - // TODO Auto-generated method stub - + browserNavigation.pushState(state, state); } @Override public void authChange(LoginContext loginContext) { if (loginContext == null) - throw new CmsException("Login context cannot be null"); + throw new IllegalArgumentException("Login context cannot be null"); // logout previous login context // if (this.loginContext != null) // try { @@ -86,24 +128,25 @@ public class CmsLoginLifecycle implements CmsView { @Override public void logout() { if (loginContext == null) - throw new CmsException("Login context should not bet null"); + throw new IllegalStateException("Login context should not be null"); try { CurrentUser.logoutCmsSession(loginContext.getSubject()); loginContext.logout(); } catch (LoginException e) { - throw new CmsException("Cannot log out", e); + throw new IllegalStateException("Cannot log out", e); } } @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 +158,26 @@ public class CmsLoginLifecycle implements CmsView { return CurrentUser.isAnonymous(getSubject()); } + @Override + public String getUid() { + return uid; + } + + // CALLBACKS + protected void startupComplete() { + } + + protected void stateChanged() { + + } + + // GETTERS + protected BrowserNavigation getBrowserNavigation() { + return browserNavigation; + } + + protected String getState() { + return state; + } + }