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 {
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;
@Override
public void navigateTo(String state) {
- // TODO Auto-generated method stub
-
+ browserNavigation.pushState(state, state);
}
@Override
@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();
@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() {
return CurrentUser.isAnonymous(getSubject());
}
+ // CALLBACKS
+ protected void startupComplete() {
+ }
+
+ protected void stateChanged() {
+
+ }
+
+ // GETTERS
+ protected BrowserNavigation getBrowserNavigation() {
+ return browserNavigation;
+ }
+
+ protected String getState() {
+ return state;
+ }
+
}