X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Frap%2FCmsLoginLifecycle.java;h=a062bea6bd013d062d0ea598907a76168a4e84f4;hb=21171ced2bce875e64db47d95bf4a00a0e141a9a;hp=ed5c20985683cae6897f6dbe098dfa9f9701e17f;hpb=06ec86e90b88db589d8928b80cbc236f1ea3b230;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 ed5c20985..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 @@ -6,26 +6,61 @@ import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; 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.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 { @@ -44,11 +79,25 @@ public class CmsLoginLifecycle implements CmsView { if (CurrentUser.getUsername(getSubject()) == null) return false; uxContext = new SimpleUxContext(); - - //lcs.changeApplicationLocale(Locale.FRENCH); + 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; } + @PreSave + void destroy() { + // logout(); + } + @Override public UxContext getUxContext() { return uxContext; @@ -56,8 +105,7 @@ public class CmsLoginLifecycle implements CmsView { @Override public void navigateTo(String state) { - // TODO Auto-generated method stub - + browserNavigation.pushState(state, state); } @Override @@ -77,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(); @@ -88,14 +136,14 @@ public class CmsLoginLifecycle implements CmsView { @Override public void exception(Throwable e) { - // TODO Auto-generated method stub - + 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() { @@ -107,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; + } + }