001 package hep.aida.ref.sql;
002
003 // AIDA
004 import hep.aida.IBaseTupleColumn;
005
006 // FreeHEP
007 import hep.aida.ref.tuple.FTupleColumn;
008 import org.freehep.util.Value;
009
010 // Log4J
011 import org.apache.log4j.Logger;
012
013 /** <code>SQLTupleColumn</code> extends {@link FTupleColumn}
014 * with SQL backend.
015 * <p><font color="#880088">
016 * <pre>
017 * $Log: SQLTupleColumn.java,v $
018 * Revision 1.8 2007/05/23 16:38:44 hrivnac
019 * logical connections for Plotter; better UML
020 *
021 * Revision 1.7 2005/09/02 14:10:31 hrivnac
022 * moved to JAS3 0.8.2
023 *
024 * Revision 1.6 2004/10/13 12:25:39 hrivnac
025 * defaults work fine
026 *
027 * Revision 1.5 2004/10/13 09:21:21 hrivnac
028 * defaults used
029 *
030 * Revision 1.4 2004/10/12 19:26:59 hrivnac
031 * MySQL Connector 3.0.14
032 *
033 * Revision 1.3 2004/05/22 15:12:59 hrivnac
034 * class id reformated
035 *
036 * Revision 1.2 2004/05/04 08:50:33 hrivnac
037 * can run with JAS3
038 *
039 * Revision 1.1 2004/05/03 19:22:30 hrivnac
040 * basic support for JAS3
041 *
042 * </pre>
043 * </font></p>
044 * @opt attributes
045 * @opt operations
046 * @opt types
047 * @opt visibility
048 * @version $Id: SQLTupleColumn.java,v 1.8 2007/05/23 16:38:44 hrivnac Exp $
049 * @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */
050 public class SQLTupleColumn implements IBaseTupleColumn, FTupleColumn {
051
052 /** Create with reference to {@link SQLTuple}.
053 * @param tuple The {@link SQLTuple} containing requested column.
054 * @param column The requested column number. */
055 public SQLTupleColumn(SQLTuple tuple, int column) {
056 _tuple = tuple;
057 _column = column;
058 }
059
060 /** Give the name of che column.
061 * @return The column's name. */
062 public String name() {
063 return _tuple.columnName(_column);
064 }
065
066 /** Give the type of the column.
067 * @return The column's type. */
068 public Class type() {
069 return _tuple.columnType(_column);
070 }
071
072 /** Give the mean value stored in the column.
073 * @return The mean value. */
074 public double mean() {
075 return _tuple.columnMean(_column);
076 }
077
078 /** Give the rms value stored in the column.
079 * @return The rms value. */
080 public double rms() {
081 return _tuple.columnRms(_column);
082 }
083
084 /** Give the minimum value stored in the column.
085 * @return The minimum value. */
086 public double minimum() {
087 return _tuple.columnMin(_column);
088 }
089
090 /** Give the maximum value stored in the column.
091 * @return The maximum value. */
092 public double maximum() {
093 return _tuple.columnMax(_column);
094 }
095
096 /** Give the minimum value stored in the column.
097 * @param value The {@link Value} object in which the minimum value is passed. */
098 public void minValue(Value value) {
099 value.set(_tuple.columnMin(_column));
100 }
101
102 /** Give the maximum value stored in the column.
103 * @param value The {@link Value} object in which the maximum value is passed. */
104 public void maxValue(Value value) {
105 value.set(_tuple.columnMax(_column));
106 }
107
108 /** Give the mean value stored in the column.
109 * @param value The {@link Value} object in which the mean value is passed. */
110 public void meanValue(Value value) {
111 value.set(_tuple.columnMean(_column));
112 }
113
114 /** Give the rms value stored in the column.
115 * @param value The {@link Value} object in which the rms value is passed. */
116 public void rmsValue(Value value) {
117 value.set(_tuple.columnRms(_column));
118 }
119
120 /** Give the default value stored in the column.
121 * @param value The {@link Value} object in which the default value is passed. */
122 public void defaultValue(Value value) {
123 String defaultValue = _tuple.columnDefault(_column);
124 boolean isNotSet = (defaultValue == null);
125 if (_tuple.columnType(_column) == Integer.TYPE ) value.set(isNotSet ? (int )0 : Integer.parseInt( defaultValue));
126 else if (_tuple.columnType(_column) == Short.TYPE ) value.set(isNotSet ? (short )0 : Short.parseShort( defaultValue));
127 else if (_tuple.columnType(_column) == Long.TYPE ) value.set(isNotSet ? (long )0 : Long.parseLong( defaultValue));
128 else if (_tuple.columnType(_column) == Float.TYPE ) value.set(isNotSet ? (float )0 : Float.parseFloat( defaultValue));
129 else if (_tuple.columnType(_column) == Double.TYPE ) value.set(isNotSet ? (double)0 : Double.parseDouble(defaultValue));
130 else if (_tuple.columnType(_column) == Boolean.TYPE ) value.set(isNotSet ? false : Boolean.valueOf( defaultValue).booleanValue());
131 else if (_tuple.columnType(_column) == Byte.TYPE ) value.set(isNotSet ? (byte )0 : Byte.parseByte( defaultValue));
132 else if (_tuple.columnType(_column) == Character.TYPE) value.set(isNotSet ? (char )0 : defaultValue.charAt(0));
133 else value.set(isNotSet ? "" : defaultValue);
134 }
135
136 /** Check if the columns have default values.
137 * @return true. */
138 public boolean hasDefaultValue() {
139 return true;
140 }
141
142 private SQLTuple _tuple;
143
144 private int _column;
145
146 /** Logging . */
147 private static Logger log = Logger.getLogger(SQLTupleColumn.class);
148
149 }