Subversion Repository Public Repository

litesoft

Diff Revisions 495 vs 496 for /trunk/Java/DATT/src/org/litesoft/datt/server/CurrentRestrictedResourceAccessor.java

Diff revisions: vs.
  @@ -1,159 +1,21 @@
1 1 package org.litesoft.datt.server;
2 2
3 3 import org.litesoft.bo.views.*;
4 - import org.litesoft.changemanagement.*;
5 4 import org.litesoft.core.*;
6 5 import org.litesoft.datt.client.boviews.*;
7 6 import org.litesoft.datt.server.boviews.podataproviders.*;
8 7 import org.litesoft.datt.server.pos.*;
9 - import org.litesoft.util.*;
8 + import org.litesoft.security.*;
10 9
11 - public class CurrentRestrictedResourceAccessor implements ServerStateChangedListener
10 + public class CurrentRestrictedResourceAccessor extends AbstractCurrentSecurityRestrictedResourceAccessor<RestrictedResource, RestrictedResourceView>
12 11 {
13 - public static synchronized CurrentRestrictedResourceAccessor get()
14 - {
15 - ServerStore zStore = ServerContext.get().getServerStore();
16 - CurrentRestrictedResourceAccessor zAccessor = zStore.get( CurrentRestrictedResourceAccessor.class );
17 - if ( zAccessor == null )
18 - {
19 - zStore.set( CurrentRestrictedResourceAccessor.class, zAccessor = new CurrentRestrictedResourceAccessor() );
20 - }
21 - return zAccessor;
22 - }
23 -
24 - private boolean mViewStale;
25 - private ChangeListenerManager mRegisteredWithCLM;
26 - private RestrictedResource mPO;
27 -
28 - public RestrictedResource getRequiredRestrictedResource()
29 - {
30 - RestrictedResource zRestrictedResource = getOptionalRestrictedResource();
31 - if ( zRestrictedResource == null )
32 - {
33 - throw new SessionExpiredException( "No Current RestrictedResource" );
34 - }
35 - return zRestrictedResource;
36 - }
37 -
38 - public RestrictedResource getOptionalRestrictedResource()
39 - {
40 - Pair zPair = getPair();
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 RestrictedResourceView getRestrictedResourceView()
53 - {
54 - Pair zPair = getPair();
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 RestrictedResourceView updateRestrictedResource( RestrictedResource pPO )
68 - {
69 - RestrictedResourceView zView = getDataProvider().createView( pPO, false );
70 - update( zView, pPO );
71 - return zView;
72 - }
73 -
74 - private Pair refresh( Pair pPair )
75 - {
76 - RestrictedResourceViewPoServerVoDataProvider zDP = getDataProvider();
77 - RestrictedResource zRestrictedResource = (RestrictedResource) zDP.getPO( pPair.getVO().getID() );
78 - return update( zDP.createView( zRestrictedResource, false ), zRestrictedResource );
79 - }
80 -
81 - private Pair update( RestrictedResourceView pView, RestrictedResource pPO )
82 - {
83 - Pair rv;
84 - RestrictedResource zOld, zNew;
85 - synchronized ( this )
86 - {
87 - rv = new Pair( mViewStale = false, pView, pPO );
88 - ServerContext.get().getServerSession().setAttribute( RestrictedResourceView.class, pView );
89 - zOld = mPO;
90 - zNew = mPO = pPO;
91 - }
92 - if ( !Utils.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, RestrictedResource.class, zNew.getPersistentObjectUniqueKey() );
102 - }
103 - }
104 - return rv;
105 - }
106 -
107 - private synchronized Pair getPair()
108 - {
109 - RestrictedResourceView zRestrictedResourceView = ServerContext.get().getServerSession().getAttribute( RestrictedResourceView.class );
110 - return new Pair( mViewStale, zRestrictedResourceView, mPO );
111 - }
112 -
113 - @Override
114 - public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet )
12 + private CurrentRestrictedResourceAccessor()
115 13 {
116 - mViewStale = true;
14 + super( RestrictedResource.class, RestrictedResourceView.class, (RestrictedResourceViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class ).get( RestrictedResourceView.class ) );
117 15 }
118 16
119 - private RestrictedResourceViewPoServerVoDataProvider getDataProvider()
120 - {
121 - return (RestrictedResourceViewPoServerVoDataProvider) ServerContext.getMasterServerStore().get( ServerVoDataProviderMap.class ).get( RestrictedResourceView.class );
122 - }
123 -
124 - private static class Pair
17 + public static synchronized CurrentRestrictedResourceAccessor get()
125 18 {
126 - private boolean mStale;
127 - private RestrictedResourceView mVO;
128 - private RestrictedResource mPO;
129 -
130 - private Pair( boolean pStale, RestrictedResourceView pVO, RestrictedResource pPO )
131 - {
132 - mStale = (pVO != null) && pStale;
133 - mVO = pVO;
134 - mPO = pPO;
135 - }
136 -
137 - public boolean isStale()
138 - {
139 - return mStale;
140 - }
141 -
142 - public RestrictedResourceView getVO()
143 - {
144 - return mVO;
145 - }
146 -
147 - public RestrictedResource getPO()
148 - {
149 - return mPO;
150 - }
151 -
152 - public boolean inSync() // Only called when Both are !null
153 - {
154 - return !mStale && //
155 - Utils.areNonArraysEqual( mPO.getID(), mVO.getID() ) && //
156 - Utils.areNonArraysEqual( mPO.getRecordVersion(), mVO.getRecordVersion() );
157 - }
19 + return getCurrentInstance( CurrentRestrictedResourceAccessor.class );
158 20 }
159 21 }