Subversion Repository Public Repository

litesoft

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
124
package org.litesoft.GWT.forms.client;

import org.litesoft.bo.*;
import org.litesoft.core.typeutils.*;
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;

    @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 ( !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 = Objects.assertNotNull( "Delegate", pDelegate );
        mCtrlAttributeName = Strings.assertNotNullNotEmpty( "CtrlAttributeName", pCtrlAttributeName );
        mShowBooleanAttributeName = Strings.assertNotNullNotEmpty( "ShowBooleanAttributeName", pShowBooleanAttributeName );
        mCtrlValueShowTrue = UtilsCommon.toString( pCtrlValueShowTrue );
        mCtrlValueShowFalse = UtilsCommon.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();
        }
    }
}

Commits for litesoft/trunk/Java/GWT/Client/src/org/litesoft/GWT/forms/client/ShowBooleanUpdateFilterTransformer.java

Diff revisions: vs.
Revision Author Commited Message
821 Diff Diff GeorgeS picture GeorgeS Sun 19 Aug, 2012 00:08:41 +0000
819 Diff Diff GeorgeS picture GeorgeS Sat 18 Aug, 2012 18:09:40 +0000
804 Diff Diff GeorgeS picture GeorgeS Wed 15 Aug, 2012 12:48:51 +0000
801 Diff Diff GeorgeS picture GeorgeS Wed 15 Aug, 2012 03:59:02 +0000
222 Diff Diff GeorgeS picture GeorgeS Fri 20 May, 2011 18:04:31 +0000
221 Diff Diff GeorgeS picture GeorgeS Fri 20 May, 2011 16:39:20 +0000
216 Diff Diff GeorgeS picture GeorgeS Wed 18 May, 2011 13:44:57 +0000
211 Diff Diff GeorgeS picture GeorgeS Tue 17 May, 2011 03:44:50 +0000
200 GeorgeS picture GeorgeS Fri 13 May, 2011 21:58:18 +0000