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
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 );
        }
    }
}

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

Diff revisions: vs.
Revision Author Commited Message
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