1
24 package net.sf.jasperreports.components.table;
25
26 import java.awt.Rectangle;
27 import java.util.List;
28 import java.util.Map;
29
30 import net.sf.jasperreports.components.table.util.TableUtil;
31 import net.sf.jasperreports.engine.JRChild;
32 import net.sf.jasperreports.engine.JRComponentElement;
33 import net.sf.jasperreports.engine.JRPrintElement;
34 import net.sf.jasperreports.engine.base.JRBasePrintFrame;
35 import net.sf.jasperreports.engine.component.ComponentDesignConverter;
36 import net.sf.jasperreports.engine.convert.ConvertVisitor;
37 import net.sf.jasperreports.engine.convert.ReportConverter;
38
39
44 public class TableDesignConverter implements ComponentDesignConverter
45 {
46
47 @Override
48 public JRPrintElement convert(ReportConverter reportConverter,
49 JRComponentElement element)
50 {
51 TableComponent table = (TableComponent) element.getComponent();
52 if (table == null)
53 {
54 return null;
55 }
56
57 JRBasePrintFrame frame = new JRBasePrintFrame(
58 reportConverter.getDefaultStyleProvider());
59 reportConverter.copyBaseAttributes(element, frame);
60
61 TableUtil tableManager =
62 new TableUtil(
63 table,
64 reportConverter.getReport()
65 );
66
67 Map<Cell, Rectangle> cellBounds = tableManager.getCellBounds();
68
69 for (Map.Entry<Cell, Rectangle> pair : cellBounds.entrySet())
70 {
71 Cell cell = pair.getKey();
72 Rectangle rectangle = pair.getValue();
73
74 JRBasePrintFrame cellFrame =
75 new JRBasePrintFrame(
76 reportConverter.getDefaultStyleProvider()
77 );
78 cellFrame.setX((int)rectangle.getX());
79 cellFrame.setY((int)rectangle.getY());
80 cellFrame.setWidth((int)rectangle.getWidth());
81 cellFrame.setHeight((int)rectangle.getHeight());
82 cellFrame.setStyle(reportConverter.resolveStyle(cell));
83
84 if (cell.getLineBox() != null)
85 {
86 cellFrame.copyBox(cell.getLineBox());
87 }
88
89 List<JRChild> children = cell.getChildren();
90 if (children != null && children.size() > 0)
91 {
92 ConvertVisitor convertVisitor = new ConvertVisitor(reportConverter, cellFrame);
93 for(int i = 0; i < children.size(); i++)
94 {
95 (children.get(i)).visit(convertVisitor);
96 }
97 }
98
99 frame.addElement(cellFrame);
100 }
101
102 return frame;
103 }
104
105 }
106