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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt
package org.litesoft.orsup.selection.nonpublic;

import java.util.*;

import org.litesoft.orsup.selection.*;

/**
 * An abstract representation of an associative list of SQL <i>WHERE</i> clauses.<p>
 * <a href="../../../Licence.txt">Licence</a><br>
 * <p/>
 * This form of <b>WhereClause</b> is primarily used with a <i>list</i> of
 * <b>WhereClause</b>s and something to tie/relate these <b>WhereClause</b>s
 * togther, such as AND or OR.<p>
 * <p/>
 * See <a href="WhereClause.html">WhereClause</a><br>
 * See <a href="WhereClauseFactory.html">WhereClauseFactory</a><p>
 * <p/>
 * Exceptions: All problems caught when the parameter(s) are checked (as
 * indicated/implied in the @param tags) will generate an IllegalArgumentException,
 * and means the API user has a problem.  If a NullPointerException (or some
 * others, like: ClassCastException or ArrayIndexOutOfBoundsException) is thrown,
 * it means the API developer has a problem.  Any Exception that is explicitly
 * thrown in the API, but unrelated to a parameter, will be listed in the throws
 * clause (and hopefully in the tag @throws).  These may (but probably won't) be
 * checked Exceptions.
 *
 * @author George Smith
 * @version 1.0 10/07/01
 */

public abstract class AbstractWhereClauseAssociativeList extends WhereClause
{
    private List<WhereClause> mWhereClauseList;

    /**
     * Constructor that associates two <b>WhereClause</b>s with the appropriate
     * relationship.<p>
     * <p/>
     * Note: If either (or both) of the two <b>WhereClause</b>s are them selves
     * instances of this class AND it (they) has the same relationship, then
     * the <b>WhereClause</b>(s) are <i>merged</i> (collapsed to this level)
     * with this.<p>
     *
     * @param pType         the Type (AND or OR) (also know as the relationship) for this WhereClause.
     * @param pWhereClause1 1st WhereClause of the two to relate (!null).
     * @param pWhereClause2 2nd WhereClause of the two to relate (!null).
     */
    protected AbstractWhereClauseAssociativeList( WhereClauseType pType, WhereClause pWhereClause1, WhereClause pWhereClause2 )
    {
        super( pType );

        List<WhereClause> list = new ArrayList<WhereClause>();
        addWhereClause( list, pWhereClause1 );
        addWhereClause( list, pWhereClause2 );
        mWhereClauseList = Collections.unmodifiableList( list );
    }

    private void addWhereClause( List<WhereClause> pList, WhereClause pWhereClause )
    {
        if ( pWhereClause.getType() == this.getType() )
        {
            pList.addAll( ((AbstractWhereClauseAssociativeList) pWhereClause).mWhereClauseList );
        }
        else
        {
            pList.add( pWhereClause );
        }
    }

    /**
     * Get Count of the contained <b>WhereClause</b>s.<p>
     * <p/>
     * Note: There will NEVER be less than two, but because of potential
     * merging there might be more than two.<p>
     *
     * @return count of of contained <b>WhereClause</b>s.
     */
    public final int getWhereClausesCount()
    {
        return mWhereClauseList.size();
    }

    /**
     * List accessor for the contained <b>WhereClause</b>s.<p>
     * <p/>
     * Note: There will NEVER be less than two, but because of potential
     * merging there might be more than two.<p>
     *
     * @return List of contained <b>WhereClause</b>s.
     */
    public final List<WhereClause> getWhereClauseList()
    {
        return mWhereClauseList;
    }

    /**
     * Iterator accessor for the contained <b>WhereClause</b>s.<p>
     * <p/>
     * Note: There will NEVER be less than two, but because of potential
     * merging there might be more than two.<p>
     *
     * @return iteration of contained <b>WhereClause</b>s.
     */
    public final Iterator<WhereClause> getWhereClauses()
    {
        return mWhereClauseList.iterator();
    }

    /**
     * Helper method for <b>toString()</b> that provides a more efficient
     * mechanism for the recursive decent of a WhereClause <i>tree</i>.<p>
     *
     * @param pSB the StringBuilder to build the WhereClause into.<p>
     *
     * @see WhereClause#toString()
     */
    @Override
    protected final void toStringHelper( StringBuilder pSB )
    {
        Iterator<WhereClause> it = getWhereClauses();

        toStringHelperParenthesizer( pSB, it.next() );
        do
        {
            pSB.append( ' ' );
            toStringHelperParenthesizer( pSB, getType().getToStr(), it.next() );
        }
        while ( it.hasNext() );
    }

    /**
     * Helper method for <b>toSQL()</b> that provides a more efficient
     * mechanism for the recursive decent of a WhereClause <i>tree</i>.<p>
     * <p/>
     * Note: May need to override to get proper result for SQL.<p>
     *
     * @param pWCtoSqlHelper helper called on each toSQLHelper()
     * @param pSB            the StringBuilder to build the WhereClause into.<p>
     *
     * @see WhereClause#toSQL()
     */
    @Override
    protected final void toSqlHelper( WCtoSqlHelper pWCtoSqlHelper, StringBuilder pSB )
    {
        if ( !pWCtoSqlHelper.preRender( this, pSB ) )
        {
            Iterator<WhereClause> it = getWhereClauses();

            toSqlHelperParenthesizer( pWCtoSqlHelper, pSB, it.next() );
            do
            {
                pSB.append( ' ' );
                toSqlHelperParenthesizer( pWCtoSqlHelper, pSB, getType().getToSql(), it.next() );
            }
            while ( it.hasNext() );

            pWCtoSqlHelper.postRender( this, pSB );
        }
    }
}

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/orsup/selection/nonpublic/AbstractWhereClauseAssociativeList.java

Diff revisions: vs.
Revision Author Commited Message
151 Diff Diff GeorgeS picture GeorgeS Thu 17 Mar, 2011 04:16:22 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

24 Diff Diff GeorgeS picture GeorgeS Wed 24 Feb, 2010 01:51:38 +0000
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000