Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/GWT_Sandbox/InitFrom/src/org/litesoft/initfrom/server/CurrentRestrictedResourceAccessor.java

Diff revisions: vs.
  @@ -1,134 +1,134 @@
1 - package org.litesoft.initfrom.server;
2 -
3 - import org.litesoft.bo.views.*;
4 - import org.litesoft.changemanagement.*;
5 - import org.litesoft.commonfoundation.typeutils.*;
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 CurrentRestrictedResourceAccessor implements ServerStateChangedListener {
12 - public static synchronized CurrentRestrictedResourceAccessor get() {
13 - ServerStore zStore = ServerContext.get().getServerStore();
14 - CurrentRestrictedResourceAccessor zAccessor = zStore.get( CurrentRestrictedResourceAccessor.class );
15 - if ( zAccessor == null ) {
16 - zStore.set( CurrentRestrictedResourceAccessor.class, zAccessor = new CurrentRestrictedResourceAccessor() );
17 - }
18 - return zAccessor;
19 - }
20 -
21 - private boolean mViewStale;
22 - private ChangeListenerManager mRegisteredWithCLM;
23 - private RestrictedResource mPO;
24 -
25 - public RestrictedResource getRequiredRestrictedResource() {
26 - RestrictedResource zRestrictedResource = getOptionalRestrictedResource();
27 - if ( zRestrictedResource == null ) {
28 - throw new SessionExpiredException( "No Current RestrictedResource" );
29 - }
30 - return zRestrictedResource;
31 - }
32 -
33 - public RestrictedResource getOptionalRestrictedResource() {
34 - Pair zPair = getPair();
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 RestrictedResourceView getRestrictedResourceView() {
45 - Pair zPair = getPair();
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 RestrictedResourceView updateRestrictedResource( RestrictedResource pPO ) {
57 - RestrictedResourceView zView = getDataProvider().createView( pPO, false );
58 - update( zView, pPO );
59 - return zView;
60 - }
61 -
62 - private Pair refresh( Pair pPair ) {
63 - RestrictedResourceViewPoServerVoDataProvider zDP = getDataProvider();
64 - RestrictedResource zRestrictedResource = (RestrictedResource) zDP.getPO( pPair.getVO().getID() );
65 - return update( zDP.createView( zRestrictedResource, false ), zRestrictedResource );
66 - }
67 -
68 - private Pair update( RestrictedResourceView pView, RestrictedResource pPO ) {
69 - Pair rv;
70 - RestrictedResource zOld, zNew;
71 - synchronized ( this ) {
72 - rv = new Pair( mViewStale = false, pView, pPO );
73 - ServerContext.get().getServerSession().setAttribute( RestrictedResourceView.class, pView );
74 - zOld = mPO;
75 - zNew = mPO = pPO;
76 - }
77 - if ( !Objects.areNonArraysEqual( zOld, zNew ) ) {
78 - if ( zOld != null ) {
79 - mRegisteredWithCLM.removeListener( this );
80 - mRegisteredWithCLM = null;
81 - }
82 - if ( zNew != null ) {
83 - (mRegisteredWithCLM = ChangeListenerManager.get()).addListener( this, RestrictedResource.class, zNew.getPersistentObjectUniqueKey() );
84 - }
85 - }
86 - return rv;
87 - }
88 -
89 - private synchronized Pair getPair() {
90 - RestrictedResourceView zRestrictedResourceView = ServerContext.get().getServerSession().getAttribute( RestrictedResourceView.class );
91 - return new Pair( mViewStale, zRestrictedResourceView, mPO );
92 - }
93 -
94 - @Override
95 - public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet ) {
96 - mViewStale = true;
97 - }
98 -
99 - private RestrictedResourceViewPoServerVoDataProvider getDataProvider() {
100 - return (RestrictedResourceViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class )
101 - .get( RestrictedResourceView.class );
102 - }
103 -
104 - private static class Pair {
105 - private boolean mStale;
106 - private RestrictedResourceView mVO;
107 - private RestrictedResource mPO;
108 -
109 - private Pair( boolean pStale, RestrictedResourceView pVO, RestrictedResource pPO ) {
110 - mStale = (pVO != null) && pStale;
111 - mVO = pVO;
112 - mPO = pPO;
113 - }
114 -
115 - public boolean isStale() {
116 - return mStale;
117 - }
118 -
119 - public RestrictedResourceView getVO() {
120 - return mVO;
121 - }
122 -
123 - public RestrictedResource getPO() {
124 - return mPO;
125 - }
126 -
127 - public boolean inSync() // Only called when Both are !null
128 - {
129 - return !mStale && //
130 - Objects.areNonArraysEqual( mPO.getID(), mVO.getID() ) && //
131 - Objects.areNonArraysEqual( mPO.getRecordVersion(), mVO.getRecordVersion() );
132 - }
133 - }
134 - }
1 + package org.litesoft.initfrom.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 CurrentRestrictedResourceAccessor implements ServerStateChangedListener {
12 + public static synchronized CurrentRestrictedResourceAccessor get() {
13 + ServerStore zStore = ServerContext.get().getServerStore();
14 + CurrentRestrictedResourceAccessor zAccessor = zStore.get( CurrentRestrictedResourceAccessor.class );
15 + if ( zAccessor == null ) {
16 + zStore.set( CurrentRestrictedResourceAccessor.class, zAccessor = new CurrentRestrictedResourceAccessor() );
17 + }
18 + return zAccessor;
19 + }
20 +
21 + private boolean mViewStale;
22 + private ChangeListenerManager mRegisteredWithCLM;
23 + private RestrictedResource mPO;
24 +
25 + public RestrictedResource getRequiredRestrictedResource() {
26 + RestrictedResource zRestrictedResource = getOptionalRestrictedResource();
27 + if ( zRestrictedResource == null ) {
28 + throw new SessionExpiredException( "No Current RestrictedResource" );
29 + }
30 + return zRestrictedResource;
31 + }
32 +
33 + public RestrictedResource getOptionalRestrictedResource() {
34 + Pair zPair = getPair();
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 RestrictedResourceView getRestrictedResourceView() {
45 + Pair zPair = getPair();
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 RestrictedResourceView updateRestrictedResource( RestrictedResource pPO ) {
57 + RestrictedResourceView zView = getDataProvider().createView( pPO, false );
58 + update( zView, pPO );
59 + return zView;
60 + }
61 +
62 + private Pair refresh( Pair pPair ) {
63 + RestrictedResourceViewPoServerVoDataProvider zDP = getDataProvider();
64 + RestrictedResource zRestrictedResource = (RestrictedResource) zDP.getPO( pPair.getVO().getID() );
65 + return update( zDP.createView( zRestrictedResource, false ), zRestrictedResource );
66 + }
67 +
68 + private Pair update( RestrictedResourceView pView, RestrictedResource pPO ) {
69 + Pair rv;
70 + RestrictedResource zOld, zNew;
71 + synchronized ( this ) {
72 + rv = new Pair( mViewStale = false, pView, pPO );
73 + ServerContext.get().getServerSession().setAttribute( RestrictedResourceView.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, RestrictedResource.class, zNew.getPersistentObjectUniqueKey() );
84 + }
85 + }
86 + return rv;
87 + }
88 +
89 + private synchronized Pair getPair() {
90 + RestrictedResourceView zRestrictedResourceView = ServerContext.get().getServerSession().getAttribute( RestrictedResourceView.class );
91 + return new Pair( mViewStale, zRestrictedResourceView, mPO );
92 + }
93 +
94 + @Override
95 + public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet ) {
96 + mViewStale = true;
97 + }
98 +
99 + private RestrictedResourceViewPoServerVoDataProvider getDataProvider() {
100 + return (RestrictedResourceViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class )
101 + .get( RestrictedResourceView.class );
102 + }
103 +
104 + private static class Pair {
105 + private boolean mStale;
106 + private RestrictedResourceView mVO;
107 + private RestrictedResource mPO;
108 +
109 + private Pair( boolean pStale, RestrictedResourceView pVO, RestrictedResource pPO ) {
110 + mStale = (pVO != null) && pStale;
111 + mVO = pVO;
112 + mPO = pPO;
113 + }
114 +
115 + public boolean isStale() {
116 + return mStale;
117 + }
118 +
119 + public RestrictedResourceView getVO() {
120 + return mVO;
121 + }
122 +
123 + public RestrictedResource getPO() {
124 + return mPO;
125 + }
126 +
127 + public boolean inSync() // Only called when Both are !null
128 + {
129 + return !mStale && //
130 + Currently.areEqual( mPO.getID(), mVO.getID() ) && //
131 + Currently.areEqual( mPO.getRecordVersion(), mVO.getRecordVersion() );
132 + }
133 + }
134 + }