1 package org
.argeo
.cms
.e4
.rap
;
3 import java
.security
.AccessController
;
5 import javax
.security
.auth
.Subject
;
6 import javax
.security
.auth
.login
.LoginContext
;
7 import javax
.security
.auth
.login
.LoginException
;
9 import org
.apache
.commons
.logging
.Log
;
10 import org
.apache
.commons
.logging
.LogFactory
;
11 import org
.argeo
.cms
.CmsException
;
12 import org
.argeo
.cms
.auth
.CurrentUser
;
13 import org
.argeo
.cms
.ui
.CmsImageManager
;
14 import org
.argeo
.cms
.ui
.CmsView
;
15 import org
.argeo
.cms
.ui
.UxContext
;
16 import org
.argeo
.cms
.ui
.dialogs
.CmsFeedback
;
17 import org
.argeo
.cms
.util
.SimpleImageManager
;
18 import org
.argeo
.cms
.util
.SimpleUxContext
;
19 import org
.argeo
.cms
.widgets
.auth
.CmsLoginShell
;
20 import org
.argeo
.eclipse
.ui
.specific
.UiContext
;
21 import org
.argeo
.node
.NodeConstants
;
22 import org
.eclipse
.e4
.core
.services
.events
.IEventBroker
;
23 import org
.eclipse
.e4
.ui
.workbench
.UIEvents
;
24 import org
.eclipse
.e4
.ui
.workbench
.lifecycle
.PostContextCreate
;
25 import org
.eclipse
.e4
.ui
.workbench
.lifecycle
.PreSave
;
26 import org
.eclipse
.rap
.rwt
.RWT
;
27 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigation
;
28 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigationEvent
;
29 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigationListener
;
30 import org
.eclipse
.swt
.widgets
.Display
;
31 import org
.osgi
.service
.event
.Event
;
32 import org
.osgi
.service
.event
.EventHandler
;
34 @SuppressWarnings("restriction")
35 public class CmsLoginLifecycle
implements CmsView
{
36 private final static Log log
= LogFactory
.getLog(CmsLoginLifecycle
.class);
38 private UxContext uxContext
;
39 private CmsImageManager imageManager
;
41 private LoginContext loginContext
;
42 private BrowserNavigation browserNavigation
;
44 private String state
= null;
47 boolean login(final IEventBroker eventBroker
) {
48 browserNavigation
= RWT
.getClient().getService(BrowserNavigation
.class);
49 if (browserNavigation
!= null)
50 browserNavigation
.addBrowserNavigationListener(new BrowserNavigationListener() {
51 private static final long serialVersionUID
= -3668136623771902865L;
54 public void navigated(BrowserNavigationEvent event
) {
55 state
= event
.getState();
56 if (uxContext
!= null)// is logged in
61 Subject subject
= Subject
.getSubject(AccessController
.getContext());
62 Display display
= Display
.getCurrent();
63 UiContext
.setData(CmsView
.KEY
, this);
64 CmsLoginShell loginShell
= new CmsLoginShell(this);
65 loginShell
.setSubject(subject
);
68 loginContext
= new LoginContext(NodeConstants
.LOGIN_CONTEXT_USER
, subject
, loginShell
);
70 } catch (LoginException e
) {
71 loginShell
.createUi();
74 while (!loginShell
.getShell().isDisposed()) {
75 if (!display
.readAndDispatch())
79 if (CurrentUser
.getUsername(getSubject()) == null)
81 uxContext
= new SimpleUxContext();
82 imageManager
= new SimpleImageManager();
84 eventBroker
.subscribe(UIEvents
.UILifeCycle
.APP_STARTUP_COMPLETE
, new EventHandler() {
86 public void handleEvent(Event event
) {
88 eventBroker
.unsubscribe(this);
92 // lcs.changeApplicationLocale(Locale.FRENCH);
102 public UxContext
getUxContext() {
107 public void navigateTo(String state
) {
108 browserNavigation
.pushState(state
, state
);
112 public void authChange(LoginContext loginContext
) {
113 if (loginContext
== null)
114 throw new CmsException("Login context cannot be null");
115 // logout previous login context
116 // if (this.loginContext != null)
118 // this.loginContext.logout();
119 // } catch (LoginException e1) {
120 // System.err.println("Could not log out: " + e1);
122 this.loginContext
= loginContext
;
126 public void logout() {
127 if (loginContext
== null)
128 throw new CmsException("Login context should not be null");
130 CurrentUser
.logoutCmsSession(loginContext
.getSubject());
131 loginContext
.logout();
132 } catch (LoginException e
) {
133 throw new CmsException("Cannot log out", e
);
138 public void exception(Throwable e
) {
139 String msg
= "Unexpected exception in Eclipse 4 RAP";
141 CmsFeedback
.show(msg
, e
);
145 public CmsImageManager
getImageManager() {
149 protected Subject
getSubject() {
150 return loginContext
.getSubject();
154 public boolean isAnonymous() {
155 return CurrentUser
.isAnonymous(getSubject());
159 protected void startupComplete() {
162 protected void stateChanged() {
167 protected BrowserNavigation
getBrowserNavigation() {
168 return browserNavigation
;
171 protected String
getState() {