01: package jimm.datavision.field;
02:
03: import jimm.datavision.Report;
04: import jimm.datavision.Section;
05: import jimm.datavision.source.Column;
06: import jimm.util.I18N;
07:
08: /**
09: * A column field represents a data source column. The value of a column field
10: * holds the {@link Column} object.
11: *
12: * @author Jim Menard, <a href="mailto:jimm@io.com">jimm@io.com</a>
13: */
14: public class ColumnField extends Field {
15:
16: protected Column column;
17:
18: /**
19: * Constructs a column field with the specified id in the specified report
20: * section whose database {@link Column}'s id is <var>value</var>.
21: *
22: * @param id the new field's id
23: * @param report the report containing this element
24: * @param section the report section in which the field resides
25: * @param value the string id of a database column
26: * @param visible show/hide flag
27: */
28: public ColumnField(Long id, Report report, Section section,
29: Object value, boolean visible) {
30: super (id, report, section, value, visible);
31: column = report.findColumn((String) value);
32: if (column == null) {
33: String errorMsg = I18N.get("UnknownColumn.the_column")
34: + ' ' + (String) value + ' '
35: + I18N.get("UnknownColumn.column_unknown");
36: throw new IllegalArgumentException(errorMsg);
37: }
38: }
39:
40: public String dragString() {
41: return typeString() + ":" + column.getId();
42: }
43:
44: /**
45: * Returns the database column.
46: *
47: * @return the database column
48: */
49: public Column getColumn() {
50: return column;
51: }
52:
53: /**
54: * Sets the database column.
55: *
56: * @param newColumn the new database column
57: */
58: public void setColumn(Column newColumn) {
59: if (column != newColumn) {
60: column = newColumn;
61: setChanged();
62: notifyObservers();
63: }
64: }
65:
66: public String typeString() {
67: return "column";
68: }
69:
70: public String formulaString() {
71: return "{" + value + "}";
72: }
73:
74: /**
75: * Returns the value of this field. For column fields, this is the current
76: * value of the database column.
77: *
78: * @return the value string
79: */
80: public Object getValue() {
81: return getReport().columnValue(column);
82: }
83:
84: /**
85: * This override returns <code>true</code> if this column is in a detail
86: * section and holds a numeric type.
87: *
88: * @return <code>true</code> if this field can be aggregated
89: */
90: public boolean canBeAggregated() {
91: // Section can be null during dragging.
92: return section != null && section.isDetail()
93: && getColumn().isNumeric();
94: }
95:
96: }
|