1 package org
.argeo
.cms
.e4
.rap
;
3 import java
.security
.AccessController
;
5 import java
.util
.concurrent
.Callable
;
7 import javax
.inject
.Inject
;
8 import javax
.security
.auth
.Subject
;
9 import javax
.security
.auth
.login
.LoginContext
;
10 import javax
.security
.auth
.login
.LoginException
;
12 import org
.argeo
.api
.cms
.CmsAuth
;
13 import org
.argeo
.api
.cms
.CmsContext
;
14 import org
.argeo
.api
.cms
.CmsLog
;
15 import org
.argeo
.api
.cms
.ux
.CmsImageManager
;
16 import org
.argeo
.api
.cms
.ux
.CmsView
;
17 import org
.argeo
.api
.cms
.ux
.UxContext
;
18 import org
.argeo
.cms
.auth
.CurrentUser
;
19 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
20 import org
.argeo
.cms
.swt
.SimpleSwtUxContext
;
21 import org
.argeo
.cms
.swt
.acr
.AcrSwtImageManager
;
22 import org
.argeo
.cms
.swt
.auth
.CmsLoginShell
;
23 import org
.argeo
.cms
.swt
.dialogs
.CmsFeedback
;
24 import org
.eclipse
.e4
.core
.services
.events
.IEventBroker
;
25 import org
.eclipse
.e4
.ui
.workbench
.UIEvents
;
26 import org
.eclipse
.e4
.ui
.workbench
.lifecycle
.PostContextCreate
;
27 import org
.eclipse
.e4
.ui
.workbench
.lifecycle
.PreSave
;
28 import org
.eclipse
.rap
.rwt
.RWT
;
29 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigation
;
30 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigationEvent
;
31 import org
.eclipse
.rap
.rwt
.client
.service
.BrowserNavigationListener
;
32 import org
.eclipse
.swt
.widgets
.Display
;
33 import org
.osgi
.service
.event
.Event
;
34 import org
.osgi
.service
.event
.EventHandler
;
36 @SuppressWarnings("restriction")
37 public class CmsLoginLifecycle
implements CmsView
{
38 private final static CmsLog log
= CmsLog
.getLog(CmsLoginLifecycle
.class);
41 private CmsContext cmsContext
;
43 private UxContext uxContext
;
44 private CmsImageManager imageManager
;
46 private LoginContext loginContext
;
47 private BrowserNavigation browserNavigation
;
49 private String state
= null;
53 boolean login(final IEventBroker eventBroker
) {
54 uid
= UUID
.randomUUID().toString();
55 browserNavigation
= RWT
.getClient().getService(BrowserNavigation
.class);
56 if (browserNavigation
!= null)
57 browserNavigation
.addBrowserNavigationListener(new BrowserNavigationListener() {
58 private static final long serialVersionUID
= -3668136623771902865L;
61 public void navigated(BrowserNavigationEvent event
) {
62 state
= event
.getState();
63 if (uxContext
!= null)// is logged in
68 Subject subject
= Subject
.getSubject(AccessController
.getContext());
69 Display display
= Display
.getCurrent();
70 // UiContext.setData(CmsView.KEY, this);
71 CmsLoginShell loginShell
= new CmsLoginShell(this, cmsContext
);
72 CmsSwtUtils
.registerCmsView(loginShell
.getShell(), this);
73 loginShell
.setSubject(subject
);
76 loginContext
= new LoginContext(CmsAuth
.LOGIN_CONTEXT_USER
, subject
, loginShell
);
78 } catch (LoginException e
) {
79 loginShell
.createUi();
82 while (!loginShell
.getShell().isDisposed()) {
83 if (!display
.readAndDispatch())
87 if (CurrentUser
.getUsername(getSubject()) == null)
89 uxContext
= new SimpleSwtUxContext();
90 imageManager
= (CmsImageManager
) new AcrSwtImageManager();
92 eventBroker
.subscribe(UIEvents
.UILifeCycle
.APP_STARTUP_COMPLETE
, new EventHandler() {
94 public void handleEvent(Event event
) {
96 eventBroker
.unsubscribe(this);
100 // lcs.changeApplicationLocale(Locale.FRENCH);
110 public UxContext
getUxContext() {
115 public void navigateTo(String state
) {
116 browserNavigation
.pushState(state
, state
);
120 public void authChange(LoginContext loginContext
) {
121 if (loginContext
== null)
122 throw new IllegalArgumentException("Login context cannot be null");
123 // logout previous login context
124 // if (this.loginContext != null)
126 // this.loginContext.logout();
127 // } catch (LoginException e1) {
128 // System.err.println("Could not log out: " + e1);
130 this.loginContext
= loginContext
;
134 public void logout() {
135 if (loginContext
== null)
136 throw new IllegalStateException("Login context should not be null");
138 CurrentUser
.logoutCmsSession(loginContext
.getSubject());
139 loginContext
.logout();
140 } catch (LoginException e
) {
141 throw new IllegalStateException("Cannot log out", e
);
146 public void exception(Throwable e
) {
147 String msg
= "Unexpected exception in Eclipse 4 RAP";
149 CmsFeedback
.error(msg
, e
);
153 public CmsImageManager
getImageManager() {
157 protected Subject
getSubject() {
158 return loginContext
.getSubject();
162 public boolean isAnonymous() {
163 return CurrentUser
.isAnonymous(getSubject());
167 public String
getUid() {
172 protected void startupComplete() {
175 protected void stateChanged() {
180 protected BrowserNavigation
getBrowserNavigation() {
181 return browserNavigation
;
184 protected String
getState() {
189 public <T
> T
doAs(Callable
<T
> action
) {
190 throw new UnsupportedOperationException();