litesoft
@ 955
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
package org.litesoft.security; import org.litesoft.bo.views.server.*; import org.litesoft.changemanagement.*; import org.litesoft.commonfoundation.base.*; import org.litesoft.core.*; import java.lang.reflect.*; @SuppressWarnings("Convert2Diamond") public abstract class AbstractCurrentSecurityPOAccessor<PO extends SecurityPO<PO>, VO extends SecurityVO<VO>> implements ServerStateChangedListener { protected final String mWhat; protected final Class<PO> mClassPO; protected final Class<VO> mClassVO; protected final PoServerVoDataProvider<VO> mDataProvider; protected PO mPO; protected boolean mViewStale; protected ChangeListenerManager mRegisteredWithCLM; protected AbstractCurrentSecurityPOAccessor( String pWhat, Class<PO> pClassPO, Class<VO> pClassVO, PoServerVoDataProvider<VO> pDataProvider ) { mWhat = pWhat; mClassPO = pClassPO; mClassVO = pClassVO; mDataProvider = pDataProvider; } protected static <T> T getCurrentInstance( Class<T> pClass ) { ServerStore zStore = RequestContext.get().getServerStore(); T zAccessor = zStore.get( pClass ); if ( zAccessor == null ) { try { Constructor<T> c = pClass.getDeclaredConstructor(); c.setAccessible( true ); // Allow 'private' access zStore.set( pClass, zAccessor = c.newInstance() ); } catch ( Exception e ) { throw new Error( e ); // Good and Well Dorked! } } return zAccessor; } @Override public synchronized void serverStateChanged( ServerStateChangeSet pServerStateChangeSet ) { mViewStale = true; } public void logout() { update( null, null ); } protected VO getCachedInstance() { return RequestContext.get().getServerSession().getAttribute( mClassVO ); } protected synchronized Pair<PO, VO> createPair(VO pView) { return new Pair<PO, VO>( mViewStale, pView, mPO ); } @SuppressWarnings({"unchecked"}) protected Pair<PO, VO> refresh( Pair pPair ) { PO zPO = (PO) mDataProvider.getPO( pPair.getVO().getID() ); return update( mDataProvider.createView( zPO, false ), zPO ); } protected Pair<PO, VO> update( VO pVO, PO pPO ) { Pair<PO, VO> rv; PO zOld, zNew; synchronized ( this ) { rv = new Pair<PO, VO>( mViewStale = false, pVO, pPO ); RequestContext.get().getServerSession().setAttribute( mClassVO, pVO ); zOld = mPO; zNew = mPO = pPO; } if ( !Currently.areEqual( zOld, zNew ) ) { if ( zOld != null ) { mRegisteredWithCLM.removeListener( this ); mRegisteredWithCLM = null; } if ( zNew != null ) { (mRegisteredWithCLM = ChangeListenerManager.get()).addListener( this, mClassPO, zNew.getPersistentObjectUniqueKey() ); } } return rv; } protected static class Pair<PO extends SecurityPO<PO>, VO extends SecurityVO<VO>> { private boolean mStale; private VO mVO; private PO mPO; protected Pair( boolean pStale, VO pVO, PO pPO ) { mStale = (pVO != null) && pStale; mVO = pVO; mPO = pPO; } public boolean isStale() { return mStale; } public VO getVO() { return mVO; } public PO getPO() { return mPO; } public boolean inSync() // Only called when Both are !null { return !mStale && // Currently.areEqual( mPO.getID(), mVO.getID() ) && // Currently.areEqual( mPO.getRecordVersion(), mVO.getRecordVersion() ); } @Override public String toString() { return "Prioritizer: " + mStale + " PO: " + mPO + " VO: " + mVO; } } } |
Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/security/AbstractCurrentSecurityPOAccessor.java
Revision | Author | Commited | Message |
---|---|---|---|
955 Diff | GeorgeS | Sun 22 Jun, 2014 18:11:25 +0000 | Add Instance... |
954 Diff | GeorgeS | Fri 20 Jun, 2014 23:38:53 +0000 | Normalize the SecurityPOs. |
950 Diff | GeorgeS | Thu 19 Jun, 2014 17:57:04 +0000 | New Lines |
948 Diff | GeorgeS | Sat 07 Jun, 2014 23:42:39 +0000 | Jusefuls Formatter Updated to New Code Format |
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
804 Diff | GeorgeS | Wed 15 Aug, 2012 12:48:51 +0000 | |
484 | GeorgeS | Mon 05 Sep, 2011 02:03:16 +0000 |