1 package org.kuali.student.common.ui.client.widgets.table.scroll;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7 import com.google.gwt.event.dom.client.ClickEvent;
8 import com.google.gwt.event.dom.client.ClickHandler;
9 import com.google.gwt.user.client.DOM;
10 import com.google.gwt.user.client.ui.CheckBox;
11
12 public class DefaultTableModel extends AbstractTableModel {
13 private ArrayList<Column> columnList = new ArrayList<Column>();
14 private ArrayList<Row> rowList = new ArrayList<Row>();
15 private ArrayList<Column> sortedColumnList = new ArrayList<Column>();
16 private int sortableColumnCount = 1;
17 private boolean moreData = true;
18 private boolean multipleSelectable = true;
19
20 Column rowHeader = new Column();
21 public void installCheckBoxRowHeaderColumn(){
22 columnList.remove(rowHeader);
23
24 rowHeader.setId("RowHeader");
25 rowHeader.setName("RowHeader");
26 final CheckBox checkBox = new CheckBox();
27 DOM.setStyleAttribute(checkBox.getElement(), "style", "padding-right: 0.8em");
28 checkBox.addClickHandler(new ClickHandler(){
29 @Override
30 public void onClick(ClickEvent event) {
31 int count = getRowCount();
32 for(int i=0;i<count;i++){
33 getRow(i).setSelected(checkBox.getValue());
34 }
35 fireTableDataChanged();
36 }
37 });
38 rowHeader.setColumnTitleWidget(checkBox);
39 rowHeader.setWidth("40px");
40 rowHeader.setVisible(true);
41
42 columnList.add(0,rowHeader);
43 }
44 public void addRow(Row row){
45 rowList.add(row);
46 }
47 public void insertRow(int index,Row row){
48 rowList.add(index,row);
49 }
50
51 public void addColumn(Column col){
52 columnList.add(col);
53 }
54 public void insertColumn(int index, Column col){
55 columnList.add(index, col);
56 }
57 public boolean isMultipleSelectable(){
58 return multipleSelectable;
59 }
60 public void setMultipleSelectable(boolean value){
61 multipleSelectable = value;
62 }
63 public void setMoreData(boolean hasMoreData){
64 moreData = hasMoreData;
65 }
66 public boolean getMoreData(){
67 return moreData;
68 }
69
70 public int getRowCount() {
71 return rowList.size();
72 }
73
74 public void sort(Column column) {
75 if(column.isSortable() == false){
76 return;
77 }
78 if(sortedColumnList.contains(column) == false){
79 if(sortedColumnList.size()>=sortableColumnCount){
80 Column removed = sortedColumnList.remove(0);
81 removed.setSortDirection(Column.NotOrdered);
82 }
83 sortedColumnList.add(column);
84
85 }
86
87 column.changeSortDirection();
88 RowComparator comparator = column.getComparator();
89 if(comparator != null){
90 Collections.sort(rowList,comparator);
91 }
92 super.fireTableStructureChanged();
93 }
94
95 public Row getRow(int rowIndex) {
96 return rowList.get(rowIndex);
97 }
98
99 public List<Row> getSelectedRows() {
100 ArrayList<Row> selectedRows = new ArrayList<Row>();
101 for (Row row: rowList) {
102 if (row.isSelected()) {
103 selectedRows.add(row);
104 }
105 }
106 return selectedRows;
107 }
108
109 public Column getColumn(int columnIndex) {
110 ArrayList<Column> list = new ArrayList<Column>();
111 for(Column col:columnList){
112 if(col.isVisible()){
113 list.add(col);
114 }
115 }
116 return list.get(columnIndex);
117 }
118 public int getColumnCount(){
119 int count = 0;
120 for(Column col:columnList){
121 if(col.isVisible()){
122 count++;
123 }
124 }
125 return count;
126 }
127
128 public void clearRows(){
129 rowList = new ArrayList<Row>();
130 super.fireTableDataChanged();
131 }
132 }