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.GWT.forms.client;
import org.litesoft.bo.*;
import org.litesoft.core.typeutils.*;
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;
@Override
public void clearAllFilterValues( BoAccessorFilter pFilter )
{
mExternalSetCtrlValue = mCurrentShowValue = false;
mLastInternallySetCtrlValue = null;
mDelegate.clearAllFilterValues( pFilter );
}
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 ( !Objects.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 = Objects.assertNotNull( "Delegate", pDelegate );
mCtrlAttributeName = Strings.assertNotNullNotEmpty( "CtrlAttributeName", pCtrlAttributeName );
mShowBooleanAttributeName = Strings.assertNotNullNotEmpty( "ShowBooleanAttributeName", pShowBooleanAttributeName );
mCtrlValueShowTrue = Objects.toString( pCtrlValueShowTrue );
mCtrlValueShowFalse = Objects.toString( pCtrlValueShowFalse );
}
@Override
public void updateFilter( BoAccessorFilter pFilter, BoAccessorFilterType pFilterType, String pAttributeName, String pValue )
{
// System.out.println( "*** " + pAttributeName + " -> " + pValue );
pFilter.suppressRealtimeUpdating();
try
{
pValue = Strings.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 == Booleans.fromString( pValue ) );
}
else
{
updateOtherAttributeFilter( pFilter, pFilterType, pAttributeName, pValue );
}
}
finally
{
pFilter.releaseRealtimeUpdating();
}
}
}
|