litesoft
@ 216
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 |
package org.litesoft.GWT.forms.client; import org.litesoft.bo.*; import org.litesoft.core.util.*; public class ShowBooleanUpdateFilterTransformer implements UpdateFilterTransformer { private UpdateFilterTransformer mDelegate; private String mCtrlAttributeName, mShowBooleanAttributeName; private String mCtrlValueShowTrue, mCtrlValueShowFalse; private boolean mExternalSetCtrlValue; private String mLastInternallySetCtrlValue; private boolean mCurrentShowValue = false; private void updateCtrlValue( BoAccessorFilter pFilter, String pValue ) { mDelegate.updateFilter( pFilter, BoAccessorFilterType.Always, mCtrlAttributeName, pValue ); } private void manageCtrlValue( BoAccessorFilter pFilter ) { if ( !mExternalSetCtrlValue ) { int zCurrentCount = pFilter.activeFilters(); if ( zCurrentCount == 0 ) // We never add as the only value { return; } if ( (zCurrentCount == 1) && (mLastInternallySetCtrlValue != null) ) // Only 1 & it is the Ctrl Value { updateCtrlValue( pFilter, mLastInternallySetCtrlValue = null ); return; } // Either more than 1 or 1 is NOT the Ctrl Value String zNewInternallySetCtrlValue = mCurrentShowValue ? mCtrlValueShowTrue : mCtrlValueShowFalse; if ( !UtilsCommon.areEqual( mLastInternallySetCtrlValue, zNewInternallySetCtrlValue ) ) { updateCtrlValue( pFilter, mLastInternallySetCtrlValue = zNewInternallySetCtrlValue ); } } } private void updateShowAttributeFilter( BoAccessorFilter pFilter, boolean pValue ) { mCurrentShowValue = pValue; manageCtrlValue( pFilter ); } private void updateCtrlAttributeFilter( BoAccessorFilter pFilter, String pValue ) { mExternalSetCtrlValue = (pValue != null); // Either Removing or Setting ctrl value externally updateCtrlValue( pFilter, pValue ); manageCtrlValue( pFilter ); } private void updateOtherAttributeFilter( BoAccessorFilter pFilter, BoAccessorFilterType pFilterType, String pAttributeName, String pValue ) { mDelegate.updateFilter( pFilter, pFilterType, pAttributeName, pValue ); manageCtrlValue( pFilter ); } /** * Transform Update Filter requests to map a boolean "show attribute" into two states of the "ctrl attribute" w/ the added behavior that the "ctrl attribute" is never the only thing set! * * @param pDelegate - pass the real/final updates to this * @param pShowBooleanAttributeName - name of the boolean "show attribute" * @param pCtrlAttributeName - name of the "ctrl attribute" * @param pCtrlValueShowTrue - value to set the "ctrl attribute" to when the boolean "show attribute" is "false" * @param pCtrlValueShowFalse - value to set the "ctrl attribute" to when the boolean "show attribute" is "true" */ public ShowBooleanUpdateFilterTransformer( UpdateFilterTransformer pDelegate, String pShowBooleanAttributeName, String pCtrlAttributeName, Object pCtrlValueShowTrue, Object pCtrlValueShowFalse ) { mDelegate = UtilsCommon.assertNotNull( "Delegate", pDelegate ); mCtrlAttributeName = UtilsCommon.assertNotNullNotEmpty( "CtrlAttributeName", pCtrlAttributeName ); mShowBooleanAttributeName = UtilsCommon.assertNotNullNotEmpty( "ShowBooleanAttributeName", pShowBooleanAttributeName ); mCtrlValueShowTrue = UtilsCommon.toString( pCtrlValueShowTrue ); mCtrlValueShowFalse = UtilsCommon.toString( pCtrlValueShowFalse ); } @Override public void updateFilter( BoAccessorFilter pFilter, BoAccessorFilterType pFilterType, String pAttributeName, String pValue ) { pValue = UtilsCommon.noEmpty( pValue ); if ( mCtrlAttributeName.equals( pAttributeName ) ) { if ( BoAccessorFilterType.Always != pFilterType ) { throw new IllegalStateException( mCtrlAttributeName + " CTRL Attribute MUST be an Always Attribute!" ); } updateCtrlAttributeFilter( pFilter, pValue ); } else if ( mShowBooleanAttributeName.equals( pAttributeName ) ) { updateShowAttributeFilter( pFilter, Boolean.TRUE == UtilsCommon.toBoolean( pValue ) ); } else { updateOtherAttributeFilter( pFilter, pFilterType, pAttributeName, pValue ); } } } |