1 package jimm.datavision; 2 import jimm.datavision.field.Field; 3 import jimm.datavision.field.FormulaField; 4 import jimm.util.XMLWriter; 5 import java.util.*; 6 7 18 public class Section 19 extends Observable 20 implements Writeable, Observer 21 { 22 23 protected static final double DEFAULT_HEIGHT = 20; 24 25 protected Report report; 26 protected SectionArea area; 27 protected double minHeight; 28 protected ArrayList fields; 29 protected ArrayList lines; 30 protected SuppressionProc suppressionProc; 31 protected boolean pageBreak; 32 33 38 public Section(Report r) { 39 report = r; 40 minHeight = DEFAULT_HEIGHT; 41 fields = new ArrayList(); 42 lines = new ArrayList(); 43 suppressionProc = new SuppressionProc(report); 44 } 45 46 public void update(Observable o, Object arg) { 47 setChanged(); 48 notifyObservers(arg); 49 } 50 51 54 public Report getReport() { return report; } 55 56 61 public double getMinHeight() { return minHeight; } 62 63 68 public void setMinHeight(double newMinHeight) { 69 if (minHeight != newMinHeight) { 70 minHeight = newMinHeight; 71 setChanged(); 72 notifyObservers(); 73 } 74 } 75 76 84 public double getOutputHeight() { 85 double h = minHeight; 86 for (Iterator iter = fields.iterator(); iter.hasNext(); ) { 87 Field f = (Field)iter.next(); 88 double y = f.getBounds().y + f.getOutputHeight(); 89 if (y > h) h = y; 90 } 91 return h; 92 } 93 94 99 public double getWidth() { return report.getPaperFormat().getWidth(); } 100 101 106 public SectionArea getArea() { return area; } 107 108 114 public void setArea(SectionArea area) { 115 if (area != this.area) { 116 this.area = area; 117 setChanged(); 118 notifyObservers(); 119 } 120 } 121 122 127 public String getName() { return (area == null) ? null : area.getName(); } 128 129 136 public Field findField(Object id) { 137 Long lid; 138 if (id instanceof String ) 139 lid = new Long ((String )id); 140 else 141 lid = (Long )id; 142 143 for (Iterator iter = fields.iterator(); iter.hasNext(); ) { 144 Field f = (Field)iter.next(); 145 if (f.getId().equals(lid)) 146 return f; 147 } 148 return null; 149 } 150 151 156 public void addField(Field f) { 157 fields.add(f); 158 f.addObserver(this); 159 f.setSection(this); 160 setChanged(); 161 notifyObservers(); 162 } 163 164 169 public void removeField(Field f) { 170 if (fields.contains(f)) { 171 fields.remove(f); 172 f.deleteObserver(this); 173 f.setSection(null); 174 setChanged(); 175 notifyObservers(); 176 } 177 } 178 179 184 public Iterator fields() { return fields.iterator(); } 185 186 192 public Object [] fieldsSortedBy(Comparator comp) { 193 Object [] sorted = fields.toArray(); 194 Arrays.sort(sorted, comp); 195 return sorted; 196 } 197 198 203 public int numFields() { return fields.size(); } 204 205 210 public void addLine(Line l) { 211 lines.add(l); 212 setChanged(); 213 notifyObservers(); 214 } 215 216 221 public void removeLine(Line f) { 222 lines.remove(f); 223 setChanged(); 224 notifyObservers(); 225 } 226 227 232 public Iterator lines() { return lines.iterator(); } 233 234 public boolean isHidden() { 235 return suppressionProc.isHidden(); 236 } 237 238 243 public boolean isDetail() { return area.isDetail(); } 244 245 251 public boolean hasPageBreak() { return pageBreak; } 252 253 258 public void setPageBreak(boolean flag) { pageBreak = flag; } 259 260 265 public SuppressionProc getSuppressionProc() { return suppressionProc; } 266 267 273 public boolean contains(Field f) { 274 return fields.contains(f); 275 } 276 277 286 public boolean containsReferenceTo(Field f) { 287 for (Iterator iter = fields(); iter.hasNext(); ) { 288 Field field = (Field)iter.next(); 289 if (field == f || field.refersTo(f)) 290 return true; 291 } 292 return suppressionProc.refersTo(f); 293 } 294 295 304 public boolean containsReferenceTo(Formula f) { 305 for (Iterator iter = fields(); iter.hasNext(); ) { 306 Field field = (Field)iter.next(); 307 if (field.refersTo(f)) 308 return true; 309 } 310 return suppressionProc.refersTo(f); 311 } 312 313 322 public boolean containsReferenceTo(UserColumn uc) { 323 for (Iterator iter = fields(); iter.hasNext(); ) { 324 Field field = (Field)iter.next(); 325 if (field.refersTo(uc)) 326 return true; 327 } 328 return suppressionProc.refersTo(uc); 329 } 330 331 340 public boolean containsReferenceTo(Parameter p) { 341 for (Iterator iter = fields(); iter.hasNext(); ) { 342 Field field = (Field)iter.next(); 343 if (field.refersTo(p)) 344 return true; 345 } 346 return suppressionProc.refersTo(p); 347 } 348 349 356 public void evaluateFormulas() { 357 for (Iterator iter = fields(); iter.hasNext(); ) { 358 Field field = (Field)iter.next(); 359 if (field instanceof FormulaField) 360 field.getValue(); 361 } 362 } 363 364 370 public boolean isVisibleForCurrentRow() { 371 return !suppressionProc.suppress(); 372 } 373 374 379 public void writeXML(XMLWriter out) { 380 out.startElement("section"); 381 out.attr("height", minHeight); 382 if (pageBreak) out.attr("pagebreak", pageBreak); 383 384 ListWriter.writeList(out, fields); 385 ListWriter.writeList(out, lines); 386 suppressionProc.writeXML(out); 387 388 out.endElement(); 389 } 390 391 } 392 | Popular Tags |