| 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 | |
} |