1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.sf.webmancer.widget;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.Map;
27
28 import net.sf.webmancer.db.IAttribute;
29 import net.sf.webmancer.db.ICell;
30 import net.sf.webmancer.db.IData;
31 import net.sf.webmancer.db.IRestrictable;
32 import net.sf.webmancer.db.RestrictionType;
33 import net.sf.webmancer.model.IModelBuilder;
34 import net.sf.webmancer.model.IModeler;
35 import net.sf.webmancer.model.ModelingException;
36 import net.sf.webmancer.util.ContractChecker;
37
38
39
40
41 public class DataTable extends AbstractDataView {
42
43
44
45 public static final String BODY_ELEMENT = "Body";
46
47
48
49
50 public static final String HEADER_ELEMENT = "Header";
51
52
53
54
55 public static final String DATA_TABLE_ELEMENT = "DataTable";
56
57
58
59
60 private List<IDataTableColumn> columns;
61
62
63
64
65
66
67 public DataTable() {
68 super();
69 this.columns = new ArrayList<IDataTableColumn>();
70 }
71
72
73
74
75 public void setColumns(List<IDataTableColumn> columns) {
76 ContractChecker.mustNotBeNull(columns, "columns");
77 this.columns = columns;
78 }
79
80 @Override
81 public void build(IModelBuilder builder) throws ModelingException {
82 IData result = this.getQuery().queryResult();
83 builder.startElement(IModeler.WEBMANCER_NAMESPACE, DATA_TABLE_ELEMENT);
84 renderHeader(builder, result);
85 renderBody(builder, result);
86 builder.endElement();
87 }
88
89
90
91
92
93 protected void renderHeader(IModelBuilder builder, IData result) {
94 builder.startElement(IModeler.WEBMANCER_NAMESPACE, HEADER_ELEMENT);
95 for (IDataTableColumn column : this.columns) {
96 builder.element(IModeler.WEBMANCER_NAMESPACE, "Cell", column.getAttribute().getName());
97 }
98 builder.endElement();
99 }
100
101
102
103
104
105 protected void renderBody(IModelBuilder builder, IData result) {
106 builder.startElement(IModeler.WEBMANCER_NAMESPACE, BODY_ELEMENT);
107 for (Map<IAttribute, ICell> row : result.getRows()) {
108 builder.startElement(IModeler.WEBMANCER_NAMESPACE, "Row");
109 for (IDataTableColumn column : this.columns) {
110 column.renderCell(builder, row);
111 }
112 builder.endElement();
113 }
114 builder.endElement();
115 }
116
117
118
119
120 @Override
121 public void restrict(IRestrictable query, RestrictionType restriction) {
122 }
123
124 }