1 | |
package org.kuali.student.common.ui.client.widgets.table.summary; |
2 | |
|
3 | |
import java.util.HashMap; |
4 | |
|
5 | |
import org.kuali.student.common.ui.client.widgets.field.layout.element.AbbrPanel; |
6 | |
|
7 | |
import com.google.gwt.user.client.Element; |
8 | |
import com.google.gwt.user.client.ui.Anchor; |
9 | |
import com.google.gwt.user.client.ui.FlexTable; |
10 | |
import com.google.gwt.user.client.ui.HasVerticalAlignment; |
11 | |
import com.google.gwt.user.client.ui.HorizontalPanel; |
12 | |
import com.google.gwt.user.client.ui.Label; |
13 | |
|
14 | |
public class SummaryTable extends FlexTable{ |
15 | 0 | private SummaryTableModel model = new SummaryTableModel(); |
16 | 0 | private int rowIndex = 0; |
17 | 0 | private HashMap<String, Integer> rowMap = new HashMap<String, Integer>(); |
18 | |
|
19 | 0 | public SummaryTable(){ |
20 | 0 | setStyleName("summaryTable"); |
21 | |
|
22 | 0 | getColumnFormatter().setStyleName(0, "rowTitleColunm"); |
23 | 0 | getColumnFormatter().setStyleName(1, "cell1Colunm"); |
24 | 0 | getColumnFormatter().setStyleName(2, "cell2Colunm"); |
25 | 0 | } |
26 | |
|
27 | |
public SummaryTableModel getModel() { |
28 | 0 | return model; |
29 | |
} |
30 | |
|
31 | |
public void setModel(SummaryTableModel model) { |
32 | 0 | this.model = model; |
33 | 0 | doLayout(); |
34 | 0 | } |
35 | |
|
36 | |
public void doLayout(){ |
37 | 0 | rowIndex = 0; |
38 | 0 | this.removeAllRows(); |
39 | 0 | if(model.getContentColumnHeader1() != null && model.getContentColumnHeader2() != null){ |
40 | 0 | super.setText(rowIndex, 1, model.getContentColumnHeader1()); |
41 | 0 | super.setText(rowIndex, 2, model.getContentColumnHeader2()); |
42 | 0 | getFlexCellFormatter().setStyleName(rowIndex,1, "columnTitle"); |
43 | 0 | getFlexCellFormatter().setStyleName(rowIndex,2, "columnTitle"); |
44 | |
|
45 | 0 | rowIndex++; |
46 | |
} |
47 | 0 | for(SummaryTableBlock section: model.getSectionList()){ |
48 | 0 | addSection(section); |
49 | |
} |
50 | |
|
51 | 0 | } |
52 | |
|
53 | |
public void markDiffs(String style){ |
54 | |
|
55 | 0 | for(int i = 1; i < rowIndex; i++){ |
56 | 0 | if(getFlexCellFormatter().getColSpan(i, 0) == 1 && getFlexCellFormatter().getColSpan(i, 1) == 1 |
57 | |
&& getFlexCellFormatter().getColSpan(i, 2) == 1){ |
58 | 0 | Element cell1 = this.getCellFormatter().getElement(i, 1); |
59 | 0 | Element cell2 = this.getCellFormatter().getElement(i, 2); |
60 | 0 | if(!cell1.getInnerText().equals(cell2.getInnerText())){ |
61 | 0 | this.getRowFormatter().addStyleName(i, style); |
62 | |
} |
63 | |
else{ |
64 | 0 | this.getRowFormatter().removeStyleName(i, style); |
65 | |
} |
66 | |
} |
67 | |
} |
68 | 0 | } |
69 | |
|
70 | |
public boolean containsKey(String key){ |
71 | 0 | return rowMap.containsKey(key); |
72 | |
} |
73 | |
|
74 | |
public void highlightRow(String rowKey, String style){ |
75 | 0 | if(rowMap.containsKey(rowKey)){ |
76 | 0 | this.getRowFormatter().setStyleName(rowMap.get(rowKey).intValue(), style); |
77 | |
} |
78 | 0 | } |
79 | |
|
80 | |
public void clearHighlightRow(String rowKey, String removeThisStyle){ |
81 | 0 | if(rowMap.containsKey(rowKey)){ |
82 | 0 | this.getRowFormatter().removeStyleName(rowMap.get(rowKey).intValue(), removeThisStyle); |
83 | |
} |
84 | 0 | } |
85 | |
|
86 | |
public void clearHighlightedRows(String removeThisStyle){ |
87 | 0 | for(int i = 0; i < rowIndex; i++){ |
88 | 0 | this.getRowFormatter().removeStyleName(i, removeThisStyle); |
89 | |
} |
90 | 0 | } |
91 | |
|
92 | |
public void highlightCell(String rowKey, int cellIndex, String style){ |
93 | 0 | if(rowMap.containsKey(rowKey)){ |
94 | 0 | this.getCellFormatter().setStyleName(rowMap.get(rowKey).intValue(),cellIndex, style); |
95 | |
} |
96 | 0 | } |
97 | |
|
98 | |
public void clearHighlightCell(String rowKey, int cellIndex){ |
99 | 0 | if(rowMap.containsKey(rowKey)){ |
100 | 0 | this.getCellFormatter().setStyleName(rowMap.get(rowKey).intValue(),cellIndex,""); |
101 | |
} |
102 | |
|
103 | 0 | } |
104 | |
private void addSection(SummaryTableBlock section){ |
105 | 0 | int topRowIndex = -1; |
106 | 0 | if(section.getTitle() != null && !section.getTitle().isEmpty()){ |
107 | 0 | getFlexCellFormatter().setStyleName(rowIndex,0, "sectionTitleRow"); |
108 | 0 | getFlexCellFormatter().setColSpan(rowIndex, 0, 3); |
109 | 0 | getFlexCellFormatter().setVerticalAlignment(rowIndex, 0, HasVerticalAlignment.ALIGN_BOTTOM); |
110 | 0 | HorizontalPanel sectionTitlePanel = new HorizontalPanel(); |
111 | 0 | Label sectionTitle = new Label(section.getTitle()); |
112 | 0 | sectionTitlePanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM); |
113 | 0 | sectionTitle.setStyleName("sectionTitle"); |
114 | 0 | sectionTitlePanel.add(sectionTitle); |
115 | |
|
116 | 0 | if(model.isEditable()){ |
117 | 0 | Anchor sectionEditLink = new Anchor("Edit"); |
118 | 0 | sectionEditLink.setStyleName("sectionEditLink"); |
119 | 0 | if(section.getEditingHandler() != null){ |
120 | 0 | sectionEditLink.addClickHandler(section.getEditingHandler()); |
121 | |
} |
122 | 0 | sectionTitlePanel.add(sectionEditLink); |
123 | |
|
124 | |
} |
125 | 0 | setWidget(rowIndex,0, sectionTitlePanel); |
126 | 0 | rowIndex++; |
127 | 0 | } |
128 | |
else{ |
129 | 0 | topRowIndex = rowIndex; |
130 | |
} |
131 | |
|
132 | 0 | for(SummaryTableRow row: section.getSectionRowList()){ |
133 | 0 | addSectionRow(row); |
134 | |
} |
135 | |
|
136 | 0 | if(topRowIndex != -1){ |
137 | 0 | this.getRowFormatter().addStyleName(topRowIndex, "firstRowInUnnamedBlock"); |
138 | |
} |
139 | |
|
140 | 0 | } |
141 | |
private void addSectionRow(SummaryTableRow row){ |
142 | 0 | if(row.isShown()){ |
143 | 0 | if(row.isRequired()){ |
144 | 0 | AbbrPanel required = new AbbrPanel("Required", "ks-form-module-elements-required", " * "); |
145 | 0 | setHTML(rowIndex,0, row.getTitle() + required.toString()); |
146 | 0 | } |
147 | |
else{ |
148 | 0 | setText(rowIndex,0, row.getTitle()); |
149 | |
} |
150 | 0 | getFlexCellFormatter().setStyleName(rowIndex,0, "rowTitle"); |
151 | 0 | if(row.getTitleCellStyleName() != null){ |
152 | 0 | getFlexCellFormatter().addStyleName(rowIndex,0, row.getTitleCellStyleName()); |
153 | |
} |
154 | 0 | if(row.getContentCellCount() == 1){ |
155 | 0 | setWidget(rowIndex,1, row.getCell1()); |
156 | 0 | getFlexCellFormatter().setStyleName(rowIndex,1, "cell1"); |
157 | 0 | getFlexCellFormatter().setColSpan(rowIndex, 1,2); |
158 | 0 | if(row.getContentCellStyleName() != null){ |
159 | 0 | getFlexCellFormatter().addStyleName(rowIndex,1, row.getContentCellStyleName()); |
160 | |
} |
161 | 0 | }else if(row.getContentCellCount() == 2){ |
162 | 0 | setWidget(rowIndex,1, row.getCell1()); |
163 | 0 | setWidget(rowIndex,2,row.getCell2()); |
164 | 0 | getFlexCellFormatter().setColSpan(rowIndex, 1,1); |
165 | 0 | getFlexCellFormatter().setColSpan(rowIndex, 2,1); |
166 | 0 | getFlexCellFormatter().setStyleName(rowIndex,1, "cell1"); |
167 | 0 | getFlexCellFormatter().setStyleName(rowIndex,2, "cell2"); |
168 | 0 | if(row.getContentCellStyleName() != null){ |
169 | 0 | getFlexCellFormatter().addStyleName(rowIndex,1, row.getContentCellStyleName()); |
170 | 0 | getFlexCellFormatter().addStyleName(rowIndex,2, row.getContentCellStyleName()); |
171 | |
} |
172 | |
} |
173 | 0 | rowMap.put(row.getKey(), rowIndex); |
174 | 0 | rowIndex++; |
175 | |
} |
176 | 0 | } |
177 | |
|
178 | |
} |