01: package jimm.datavision.field;
02:
03: import jimm.datavision.Report;
04: import jimm.datavision.Section;
05: import jimm.datavision.Subreport;
06:
07: /**
08: * A subreport field represents an entire report within a field. The value
09: * of a subreport field holds a report object.
10: *
11: * @author Jim Menard, <a href="mailto:jimm@io.com">jimm@io.com</a>
12: */
13: public class SubreportField extends Field {
14:
15: protected Subreport subreport;
16:
17: /**
18: * Constructs a text field with the specified id in the specified report
19: * section whose text value is <i>value</i>.
20: *
21: * @param id the new field's id
22: * @param report the report containing this element
23: * @param section the report section in which the field resides
24: * @param value the id of a subreport
25: * @param visible show/hide flag
26: */
27: public SubreportField(Long id, Report report, Section section,
28: Object value, boolean visible) {
29: super (id, report, section, value, visible);
30: subreport = report.findSubreport(value);
31: }
32:
33: public Subreport getSubreport() {
34: return subreport;
35: }
36:
37: /**
38: * This override adds or removes the subreport from its parent report. When
39: * <var>s</var> is <code>null</code>, the subreport is removed from the
40: * report. Doing this prevents the subreport from being output as part of
41: * the report when this field has been removed from the report.
42: *
43: * @param s the new section; may be <code>null</code>
44: */
45: public void setSection(Section s) {
46: if (s == null)
47: report.removeSubreport(subreport);
48: else {
49: // The first time we are added to the report, the subreport has
50: // already been added to the report. Avoid adding it again.
51: if (report.findSubreport(subreport.getId()) == null)
52: report.addSubreport(subreport);
53: }
54: super .setSection(s);
55: }
56:
57: /**
58: * Returns a string containing a line of text for each row returned by
59: * the subreport query.
60: *
61: * @return a string with newlines separating each row of data
62: */
63: public Object getValue() {
64: return subreport.getValue();
65: }
66:
67: public String dragString() {
68: return typeString() + ":" + getId();
69: }
70:
71: public String typeString() {
72: return "subreport";
73: }
74:
75: public String formulaString() {
76: return "{|subreport " + getId() + "}";
77: }
78:
79: }
|