1 package org.kuali.student.common.ui.client.widgets.table.scroll;
2
3 import com.google.gwt.event.dom.client.ClickEvent;
4 import com.google.gwt.event.dom.client.ClickHandler;
5 import com.google.gwt.user.client.DOM;
6 import com.google.gwt.user.client.ui.CheckBox;
7
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.List;
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 private int currentRowIndex;
20
21
22 Column rowHeader = new Column();
23
24 public void installCheckBoxRowHeaderColumn() {
25 columnList.remove(rowHeader);
26 rowHeader.setId("RowHeader");
27 rowHeader.setName("RowHeader");
28 final CheckBox checkBox = new CheckBox();
29 checkBox.setTabIndex(-1);
30 checkBox.addClickHandler(new ClickHandler() {
31 @Override
32 public void onClick(ClickEvent event) {
33 int count = getRowCount();
34 for (int i = 0; i < count; i++) {
35 getRow(i).setSelected(checkBox.getValue());
36 }
37 fireTableDataChanged();
38 }
39 });
40 DOM.setStyleAttribute(checkBox.getElement(), "style", "padding-right: 0.8em");
41 rowHeader.setColumnTitleWidget(checkBox);
42 rowHeader.setWidth("40px");
43 rowHeader.setVisible(true);
44
45 columnList.add(0, rowHeader);
46 }
47
48 public void addRow(Row row) {
49 rowList.add(row);
50 }
51
52 public void insertRow(int index, Row row) {
53 rowList.add(index, row);
54 }
55
56 public void addColumn(Column col) {
57 columnList.add(col);
58 }
59
60 public void insertColumn(int index, Column col) {
61 columnList.add(index, col);
62 }
63
64 public boolean isMultipleSelectable() {
65 return multipleSelectable;
66 }
67
68 @Override
69 public void setCurrentIndex(int index) {
70 if (index != currentRowIndex && currentRowIndex != -1){
71 if(currentRowIndex < rowList.size()){
72 rowList.get(currentRowIndex).setHighlighted(false);
73 }
74 }
75 currentRowIndex = index;
76 }
77
78 @Override
79 public int getCurrentIndex() {
80 return currentRowIndex;
81 }
82
83 @Override
84 public void setSelectedRow(int index) {
85 for (int rowIndex = 0; rowIndex < getRowCount(); rowIndex++) {
86 Row currentRow = rowList.get(rowIndex);
87 if (rowIndex == index) {
88 currentRow.setSelected(true);
89 } else if (!isMultipleSelectable()) {
90 currentRow.setSelected(false);
91 }
92 }
93 }
94
95 public void setMultipleSelectable(boolean value) {
96 multipleSelectable = value;
97 }
98
99 public void setMoreData(boolean hasMoreData) {
100 moreData = hasMoreData;
101 }
102
103 public boolean getMoreData() {
104 return moreData;
105 }
106
107 public int getRowCount() {
108 return rowList.size();
109 }
110
111 public void sort(Column column) {
112 if (column.isSortable() == false) {
113 return;
114 }
115 if (sortedColumnList.contains(column) == false) {
116 if (sortedColumnList.size() >= sortableColumnCount) {
117 Column removed = sortedColumnList.remove(0);
118 removed.setSortDirection(Column.NotOrdered);
119 }
120 sortedColumnList.add(column);
121
122 }
123
124 column.changeSortDirection();
125 RowComparator comparator = column.getComparator();
126 if (comparator != null) {
127 Collections.sort(rowList, comparator);
128 }
129 super.fireTableStructureChanged();
130 }
131
132 public Row getRow(int rowIndex) {
133 return rowList.get(rowIndex);
134 }
135
136 public List<Row> getSelectedRows() {
137 ArrayList<Row> selectedRows = new ArrayList<Row>();
138 for (Row row : rowList) {
139 if (row.isSelected()) {
140 selectedRows.add(row);
141 }
142 }
143 return selectedRows;
144 }
145
146 public Column getColumn(int columnIndex) {
147 ArrayList<Column> list = new ArrayList<Column>();
148 for (Column col : columnList) {
149 if (col.isVisible()) {
150 list.add(col);
151 }
152 }
153 return list.get(columnIndex);
154 }
155
156 public int getColumnCount() {
157 int count = 0;
158 for (Column col : columnList) {
159 if (col.isVisible()) {
160 count++;
161 }
162 }
163 return count;
164 }
165
166 public void clearRows() {
167 rowList = new ArrayList<Row>();
168 super.fireTableDataChanged();
169 }
170
171 public void selectFirstRow() {
172 if (!rowList.isEmpty()) {
173 currentRowIndex = 0;
174
175 int firstRow = 0;
176 rowList.get(firstRow).setHighlighted(true);
177 }
178 }
179 }