Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/GWT_Sandbox/NAS-Video/src/org/litesoft/nasvideo/server/CurrentUserAccessor.java

Diff revisions: vs.
  @@ -1,171 +1,142 @@
1 - package org.litesoft.nasvideo.server;
2 -
3 - import org.litesoft.bo.views.*;
4 - import org.litesoft.changemanagement.*;
5 - import org.litesoft.core.*;
6 - import org.litesoft.core.typeutils.*;
7 - import org.litesoft.nasvideo.client.boviews.*;
8 - import org.litesoft.nasvideo.server.boviews.podataproviders.*;
9 - import org.litesoft.nasvideo.server.pos.*;
10 -
11 - public class CurrentUserAccessor implements ServerStateChangedListener
12 - {
13 - public static synchronized CurrentUserAccessor get()
14 - {
15 - ServerStore zStore = ServerContext.get().getServerStore();
16 - CurrentUserAccessor zAccessor = zStore.get( CurrentUserAccessor.class );
17 - if ( zAccessor == null )
18 - {
19 - zStore.set( CurrentUserAccessor.class, zAccessor = new CurrentUserAccessor() );
20 - }
21 - return zAccessor;
22 - }
23 -
24 - private boolean mViewStale;
25 - private ChangeListenerManager mRegisteredWithCLM;
26 - private User mPO;
27 -
28 - public User getRequiredUser()
29 - {
30 - User zUser = getOptionalUser( null );
31 - if ( zUser == null )
32 - {
33 - throw new SessionExpiredException( "No Current User" );
34 - }
35 - return zUser;
36 - }
37 -
38 - public User getOptionalUser( String pDefaultUserLoginEmail )
39 - {
40 - Pair zPair = getPair( pDefaultUserLoginEmail );
41 - if ( zPair.getVO() == null )
42 - {
43 - return null;
44 - }
45 - if ( (zPair.getPO() == null) || !zPair.inSync() )
46 - {
47 - zPair = refresh( zPair );
48 - }
49 - return zPair.getPO();
50 - }
51 -
52 - public UserView getUserView( String pDefaultUserLoginEmail )
53 - {
54 - Pair zPair = getPair( pDefaultUserLoginEmail );
55 - if ( zPair.isStale() )
56 - {
57 - zPair = refresh( zPair );
58 - }
59 - return zPair.getVO();
60 - }
61 -
62 - public void logout()
63 - {
64 - update( null, null );
65 - }
66 -
67 - public UserView updateUser( User pPO )
68 - {
69 - UserView zView = getDataProvider().createView( pPO, false );
70 - update( zView, pPO );
71 - return zView;
72 - }
73 -
74 - private Pair refresh( Pair pPair )
75 - {
76 - UserViewPoServerVoDataProvider zDP = getDataProvider();
77 - User zPO = (User) zDP.getPO( pPair.getVO().getID() );
78 - return update( zDP.createView( zPO, false ), zPO );
79 - }
80 -
81 - private Pair update( UserView pView, User pPO )
82 - {
83 - Pair rv;
84 - User zOld, zNew;
85 - synchronized ( this )
86 - {
87 - rv = new Pair( mViewStale = false, pView, pPO );
88 - ServerContext.get().getServerSession().setAttribute( UserView.class, pView );
89 - zOld = mPO;
90 - zNew = mPO = pPO;
91 - }
92 - if ( !Objects.areNonArraysEqual( zOld, zNew ) )
93 - {
94 - if ( zOld != null )
95 - {
96 - mRegisteredWithCLM.removeListener( this );
97 - mRegisteredWithCLM = null;
98 - }
99 - if ( zNew != null )
100 - {
101 - (mRegisteredWithCLM = ChangeListenerManager.get()).addListener( this, User.class, zNew.getPersistentObjectUniqueKey() );
102 - }
103 - }
104 - return rv;
105 - }
106 -
107 - private Pair getPair( String pDefaultUserLoginEmail )
108 - {
109 - synchronized ( this )
110 - {
111 - UserView zView = ServerContext.get().getServerSession().getAttribute( UserView.class );
112 - if ( (zView != null) || (pDefaultUserLoginEmail == null) )
113 - {
114 - return new Pair( mViewStale, zView, mPO );
115 - }
116 - }
117 - getDataProvider().loginDefaultUser( pDefaultUserLoginEmail );
118 - synchronized ( this )
119 - {
120 - UserView zView = ServerContext.get().getServerSession().getAttribute( UserView.class );
121 - return new Pair( mViewStale, zView, mPO );
122 - }
123 - }
124 -
125 - @Override
126 - public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet )
127 - {
128 - mViewStale = true;
129 - }
130 -
131 - private UserViewPoServerVoDataProvider getDataProvider()
132 - {
133 - return (UserViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class ).get( UserView.class );
134 - }
135 -
136 - private static class Pair
137 - {
138 - private boolean mStale;
139 - private UserView mVO;
140 - private User mPO;
141 -
142 - private Pair( boolean pStale, UserView pVO, User pPO )
143 - {
144 - mStale = (pVO != null) && pStale;
145 - mVO = pVO;
146 - mPO = pPO;
147 - }
148 -
149 - public boolean isStale()
150 - {
151 - return mStale;
152 - }
153 -
154 - public UserView getVO()
155 - {
156 - return mVO;
157 - }
158 -
159 - public User getPO()
160 - {
161 - return mPO;
162 - }
163 -
164 - public boolean inSync() // Only called when Both are !null
165 - {
166 - return !mStale && //
167 - Objects.areNonArraysEqual( mPO.getID(), mVO.getID() ) && //
168 - Objects.areNonArraysEqual( mPO.getRecordVersion(), mVO.getRecordVersion() );
169 - }
170 - }
171 - }
1 + package org.litesoft.nasvideo.server;
2 +
3 + import org.litesoft.bo.views.*;
4 + import org.litesoft.changemanagement.*;
5 + import org.litesoft.commonfoundation.base.*;
6 + import org.litesoft.core.*;
7 + import org.litesoft.initfrom.client.boviews.*;
8 + import org.litesoft.initfrom.server.boviews.podataproviders.*;
9 + import org.litesoft.initfrom.server.pos.*;
10 +
11 + public class CurrentUserAccessor implements ServerStateChangedListener {
12 + public static synchronized CurrentUserAccessor get() {
13 + ServerStore zStore = ServerContext.get().getServerStore();
14 + CurrentUserAccessor zAccessor = zStore.get( CurrentUserAccessor.class );
15 + if ( zAccessor == null ) {
16 + zStore.set( CurrentUserAccessor.class, zAccessor = new CurrentUserAccessor() );
17 + }
18 + return zAccessor;
19 + }
20 +
21 + private boolean mViewStale;
22 + private ChangeListenerManager mRegisteredWithCLM;
23 + private User mPO;
24 +
25 + public User getRequiredUser() {
26 + User zUser = getOptionalUser( null );
27 + if ( zUser == null ) {
28 + throw new SessionExpiredException( "No Current User" );
29 + }
30 + return zUser;
31 + }
32 +
33 + public User getOptionalUser( String pDefaultUserLoginEmail ) {
34 + Pair zPair = getPair( pDefaultUserLoginEmail );
35 + if ( zPair.getVO() == null ) {
36 + return null;
37 + }
38 + if ( (zPair.getPO() == null) || !zPair.inSync() ) {
39 + zPair = refresh( zPair );
40 + }
41 + return zPair.getPO();
42 + }
43 +
44 + public UserView getUserView( String pDefaultUserLoginEmail ) {
45 + Pair zPair = getPair( pDefaultUserLoginEmail );
46 + if ( zPair.isStale() ) {
47 + zPair = refresh( zPair );
48 + }
49 + return zPair.getVO();
50 + }
51 +
52 + public void logout() {
53 + update( null, null );
54 + }
55 +
56 + public UserView updateUser( User pPO ) {
57 + UserView zView = getDataProvider().createView( pPO, false );
58 + update( zView, pPO );
59 + return zView;
60 + }
61 +
62 + private Pair refresh( Pair pPair ) {
63 + UserViewPoServerVoDataProvider zDP = getDataProvider();
64 + User zPO = (User) zDP.getPO( pPair.getVO().getID() );
65 + return update( zDP.createView( zPO, false ), zPO );
66 + }
67 +
68 + private Pair update( UserView pView, User pPO ) {
69 + Pair rv;
70 + User zOld, zNew;
71 + synchronized ( this ) {
72 + rv = new Pair( mViewStale = false, pView, pPO );
73 + ServerContext.get().getServerSession().setAttribute( UserView.class, pView );
74 + zOld = mPO;
75 + zNew = mPO = pPO;
76 + }
77 + if ( !Currently.areEqual( zOld, zNew ) ) {
78 + if ( zOld != null ) {
79 + mRegisteredWithCLM.removeListener( this );
80 + mRegisteredWithCLM = null;
81 + }
82 + if ( zNew != null ) {
83 + (mRegisteredWithCLM = ChangeListenerManager.get()).addListener( this, User.class, zNew.getPersistentObjectUniqueKey() );
84 + }
85 + }
86 + return rv;
87 + }
88 +
89 + private Pair getPair( String pDefaultUserLoginEmail ) {
90 + synchronized ( this ) {
91 + UserView zView = ServerContext.get().getServerSession().getAttribute( UserView.class );
92 + if ( (zView != null) || (pDefaultUserLoginEmail == null) ) {
93 + return new Pair( mViewStale, zView, mPO );
94 + }
95 + }
96 + getDataProvider().loginDefaultUser( pDefaultUserLoginEmail );
97 + synchronized ( this ) {
98 + UserView zView = ServerContext.get().getServerSession().getAttribute( UserView.class );
99 + return new Pair( mViewStale, zView, mPO );
100 + }
101 + }
102 +
103 + @Override
104 + public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet ) {
105 + mViewStale = true;
106 + }
107 +
108 + private UserViewPoServerVoDataProvider getDataProvider() {
109 + return (UserViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class ).get( UserView.class );
110 + }
111 +
112 + private static class Pair {
113 + private boolean mStale;
114 + private UserView mVO;
115 + private User mPO;
116 +
117 + private Pair( boolean pStale, UserView pVO, User pPO ) {
118 + mStale = (pVO != null) && pStale;
119 + mVO = pVO;
120 + mPO = pPO;
121 + }
122 +
123 + public boolean isStale() {
124 + return mStale;
125 + }
126 +
127 + public UserView getVO() {
128 + return mVO;
129 + }
130 +
131 + public User getPO() {
132 + return mPO;
133 + }
134 +
135 + public boolean inSync() // Only called when Both are !null
136 + {
137 + return !mStale && //
138 + Currently.areEqual( mPO.getID(), mVO.getID() ) && //
139 + Currently.areEqual( mPO.getRecordVersion(), mVO.getRecordVersion() );
140 + }
141 + }
142 + }