litesoft
@ 66
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 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.orsup.selection; import org.litesoft.orsup.selection.nonpublic.*; /** * An abstract representation of a SQL <i>ORDER BY</i> clause.<p> * <a href="../../Licence.txt">Licence</a><br> * <p/> * Two methods are provided to translate an <b>OrderBy</b> (with optional * sub-orderby(s)) into <b>String</b>s:<p> * <pre> * toString() ; * toSQL() ; * </pre> * <p/> * The <i>toString()</i> is intended for debuging purposes.<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 06/20/02 */ public class OrderBy { private SimpleColumnDefinition mColumnDefinition; private OrderBy mSubOrderBy = null; /** * Constructor that supports a Column Definition.<p> * * @param pColumnDefinition Column Definition (!null). */ public OrderBy( SimpleColumnDefinition pColumnDefinition ) { IllegalArgument.ifNull( "ColumnDefinition", mColumnDefinition = pColumnDefinition ); } /** * Constructor that supports a Column Definition.<p> * * @param pColumnDefinition Column Definition (!null). * @param pSubOrderBy Sub OrderBy (!null). */ public OrderBy( SimpleColumnDefinition pColumnDefinition, OrderBy pSubOrderBy ) { this( pColumnDefinition ); IllegalArgument.ifNull( "SubOrderBy", mSubOrderBy = pSubOrderBy ); } /** * Accessor to determine if the Order by is Descending.<p> * * @return True if is Descending. */ public boolean isDescending() { return false; } /** * Accessor for the Column Definition.<p> * * @return Column Definition (!null). */ public final SimpleColumnDefinition getColumnDefinition() { return mColumnDefinition; } /** * Accessor for the Sub OrderBy.<p> * * @return OrderBy (null == none). */ public final OrderBy getSubOrderBy() { return mSubOrderBy; } /** * Generate a Debug friendly representation.<p> * * @return a String for Debuging. */ @Override public final String toString() { StringBuilder sb = new StringBuilder( "OrderBy " ); toStringHelper( sb ); return sb.toString(); } /** * Generate a String that may be used in a SQL statement, where the * <b>ORDERBY</b> <i>clause</i> would go.<p> * * @return the <b>ORDERBY</b> <i>clause</i> for SQL statement as a String. */ public final String toSQL() { StringBuilder sb = new StringBuilder( "ORDER BY " ); toSqlHelper( sb ); return sb.toString(); } /** * Helper method for <b>toString()</b> that provides a more efficient * mechanism for the recursive decent of a OrderBy <i>list</i>.<p> * * @param pSB the StringBuilder to build the OrderBy into.<p> * * @see #toString() */ protected void toStringHelper( StringBuilder pSB ) { pSB.append( isDescending() ? "!^" : "^" ); pSB.append( mColumnDefinition.getName() ); if ( mSubOrderBy != null ) { pSB.append( ", " ); mSubOrderBy.toStringHelper( pSB ); } } /** * Helper method for <b>toSQL()</b> that provides a more efficient * mechanism for the recursive decent of a OrderBy <i>list</i>.<p> * * @param pSB the StringBuilder to build the OrderBy into.<p> * * @see #toSQL() */ protected void toSqlHelper( StringBuilder pSB ) { pSB.append( mColumnDefinition.getSearchColumnName() ); pSB.append( isDescending() ? " DESC" : " ASC" ); if ( mSubOrderBy != null ) { pSB.append( ", " ); mSubOrderBy.toSqlHelper( pSB ); } } } |