Subversion Repository Public Repository

litesoft

Diff Revisions 215 vs 216 for /trunk/Java/core/Anywhere/src/org/litesoft/bo/views/BoAccessorFilters.java

Diff revisions: vs.
  @@ -3,95 +3,106 @@
3 3
4 4 import java.io.*;
5 5
6 + import org.litesoft.bo.*;
6 7 import org.litesoft.core.simpletypes.*;
7 8 import org.litesoft.core.util.*;
8 9
9 10 public class BoAccessorFilters implements Serializable
10 11 {
12 + private SSMap mAlwaysFilters; // non-null
11 13 private SSMap mUniqueFilters; // non-null
12 - private SSMap mNonUniqueFilters; // non-null
14 + private SSMap mRegularFilters; // non-null
13 15
14 - private BoAccessorFilters( SSMap pUniqueFilters, SSMap pNonUniqueFilters )
16 + private BoAccessorFilters( SSMap pAlwaysFilters, SSMap pUniqueFilters, SSMap pRegularFilters )
15 17 {
18 + mAlwaysFilters = pAlwaysFilters;
16 19 mUniqueFilters = pUniqueFilters;
17 - mNonUniqueFilters = pNonUniqueFilters;
20 + mRegularFilters = pRegularFilters;
18 21 }
19 22
20 23 public BoAccessorFilters()
21 24 {
22 - this( new SSMap(), new SSMap() );
25 + this( new SSMap(), new SSMap(), new SSMap() );
23 26 }
24 27
25 28 public BoAccessorFilters copy()
26 29 {
27 - return new BoAccessorFilters( new SSMap( mUniqueFilters ), new SSMap( mNonUniqueFilters ) );
30 + return new BoAccessorFilters( new SSMap( mAlwaysFilters ), new SSMap( mUniqueFilters ), new SSMap( mRegularFilters ) );
28 31 }
29 32
30 - public SSMap getUniqueFilters()
33 + public SSMap getFilters()
31 34 {
32 - return mUniqueFilters;
35 + return mUniqueFilters.isEmpty() ? mergeAlways( mRegularFilters ) : mergeAlways( mUniqueFilters );
33 36 }
34 37
35 - public SSMap getNonUniqueFilters()
38 + public boolean isUniqueEmpty()
36 39 {
37 - return mNonUniqueFilters;
38 - }
39 -
40 - public SSMap getFilters()
41 - {
42 - return mUniqueFilters.isEmpty() ? mNonUniqueFilters : mUniqueFilters;
40 + return mUniqueFilters.isEmpty();
43 41 }
44 42
45 43 public boolean isEmpty()
46 44 {
47 - return mUniqueFilters.isEmpty() && mNonUniqueFilters.isEmpty();
45 + return mAlwaysFilters.isEmpty() && mUniqueFilters.isEmpty() && mRegularFilters.isEmpty();
48 46 }
49 47
50 48 public int activeFilters()
51 49 {
52 - return mUniqueFilters.size() + mNonUniqueFilters.size();
50 + return mAlwaysFilters.size() + mUniqueFilters.size() + mRegularFilters.size();
53 51 }
54 52
55 53 public void clear()
56 54 {
55 + mAlwaysFilters.clear();
57 56 mUniqueFilters.clear();
58 - mNonUniqueFilters.clear();
59 - }
60 -
61 - /**
62 - * @param pAttributeName !null
63 - * @param pValue (empty strings, "" or just spaces; treated as null) null == remove, !null == add/replace
64 - *
65 - * @return true if anything changed
66 - */
67 - public boolean setUniqueFilter( String pAttributeName, String pValue )
68 - {
69 - return LLsetFilter( mUniqueFilters, pAttributeName, pValue );
57 + mRegularFilters.clear();
70 58 }
71 59
72 60 /**
61 + * @param pFilterType !null
73 62 * @param pAttributeName !null
74 63 * @param pValue (empty strings, "" or just spaces; treated as null) null == remove, !null == add/replace
75 64 *
76 65 * @return true if anything changed
77 66 */
78 - public boolean setNonUniqueFilter( String pAttributeName, String pValue )
79 - {
80 - return LLsetFilter( mNonUniqueFilters, pAttributeName, pValue );
81 - }
82 -
83 - private boolean LLsetFilter( SSMap pSSMap, String pAttributeName, String pValue )
67 + public boolean setFilter( BoAccessorFilterType pFilterType, String pAttributeName, String pValue )
84 68 {
69 + SSMap zFilter;
70 + switch ( pFilterType )
71 + {
72 + default:
73 + case Always:
74 + zFilter = mAlwaysFilters;
75 + break;
76 + case Unique:
77 + zFilter = mUniqueFilters;
78 + break;
79 + case Regular:
80 + zFilter = mRegularFilters;
81 + break;
82 + }
85 83 if ( null == (pValue = UtilsCommon.noEmpty( pValue )) )
86 84 {
87 - return (null != pSSMap.remove( pAttributeName ));
85 + return (null != zFilter.remove( pAttributeName ));
88 86 }
89 - return !UtilsCommon.areNonArraysEqual( pValue, pSSMap.put( pAttributeName, pValue ) );
87 + return !UtilsCommon.areNonArraysEqual( pValue, zFilter.put( pAttributeName, pValue ) );
90 88 }
91 89
92 90 @Override
93 91 public String toString()
94 92 {
95 - return "[unique=" + mUniqueFilters + ",nonUnique=" + mNonUniqueFilters + ']';
93 + return "[always=" + mAlwaysFilters + ",unique=" + mUniqueFilters + ",regular=" + mRegularFilters + ']';
94 + }
95 +
96 + private SSMap mergeAlways( SSMap pFilters )
97 + {
98 + if ( pFilters.isEmpty() )
99 + {
100 + return mAlwaysFilters;
101 + }
102 + if ( mAlwaysFilters.isEmpty() )
103 + {
104 + return pFilters;
105 + }
106 + return pFilters.copyAddAll( mAlwaysFilters );
96 107 }
97 108 }