View Javadoc

1   /*
2    * File:    DataTable.java
3    * Created: 12.4.2007 7:31:24
4    *
5    * Copyright 2007 Michal Burda.
6    *
7    * This program is free software; you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation; either version 2 of the License, or
10   * (at your option) any later version.
11   *
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   *
17   * You should have received a copy of the GNU General Public License
18   * along with this program; if not, write to the Free Software
19   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
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   * @author Michal Burda
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       * Constructs the DataTable.
64       *
65       * @param query
66       */
67      public DataTable() {
68          super();
69          this.columns = new ArrayList<IDataTableColumn>(); // for the field to be never null
70      }
71  
72      /**
73       * @param columns
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       * @param builder
91       * @param result
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      * @param builder
103      * @param result
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      * @see net.sf.webmancer.db.IRestrictor#restrict(net.sf.webmancer.db.IQuery, net.sf.webmancer.db.RestrictionType)
119      */
120     @Override
121     public void restrict(IRestrictable query, RestrictionType restriction) {
122     }
123 
124 }