Clover Coverage Report - KS LUM UI Common 1.2.1-SNAPSHOT
Coverage timestamp: Wed Dec 31 1969 19:00:00 EST
../../../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
73   206   34   5.21
38   160   0.47   14
14     2.43  
1    
 
  SwitchSection       Line # 22 73 0% 34 125 0% 0.0
 
No Tests
 
1    package org.kuali.student.lum.common.client.widgets;
2   
3    import java.util.ArrayList;
4    import java.util.HashMap;
5    import java.util.Iterator;
6    import java.util.List;
7   
8    import org.kuali.student.common.ui.client.application.Application;
9    import org.kuali.student.common.ui.client.configurable.mvc.sections.BaseSection;
10    import org.kuali.student.common.ui.client.configurable.mvc.sections.Section;
11    import org.kuali.student.common.ui.client.configurable.mvc.sections.SwapSection;
12    import org.kuali.student.common.ui.client.event.SectionUpdateEvent;
13    import org.kuali.student.common.ui.client.widgets.dialog.ConfirmationDialog;
14    import org.kuali.student.common.ui.client.widgets.field.layout.layouts.VerticalFieldLayout;
15    import org.kuali.student.common.ui.client.widgets.list.KSSelectItemWidgetAbstract;
16    import org.kuali.student.common.ui.client.widgets.list.SelectionChangeEvent;
17    import org.kuali.student.common.ui.client.widgets.list.SelectionChangeHandler;
18   
19    import com.google.gwt.event.dom.client.ClickEvent;
20    import com.google.gwt.event.dom.client.ClickHandler;
21   
 
22    public class SwitchSection extends BaseSection {
23    private HashMap<String, Section> swapSectionMap = new HashMap<String, Section>();
24    private KSSelectItemWidgetAbstract selectableWidget;
25    private List<Section> deleted = new ArrayList<Section>();
26    private ConfirmationDialog dialog;
27    private boolean showConfirmation = true;
28    private List<String> lastSelection = new ArrayList<String>();
29    private List<String> deletionParentKeys;
30   
31    /**
32    * Constructor for SwapSection, note that the SelectableWidget passed in is not added to the
33    * UI but is instead used as reference to show different sections. The widget must still be added
34    * to a layout as a field or a widget to show in the UI. A default confirmation dialog will be used.
35    * @param selectableWidget
36    */
 
37  0 toggle public SwitchSection(KSSelectItemWidgetAbstract selectableWidget){
38  0 this.init(selectableWidget);
39    }
40   
 
41  0 toggle public SwitchSection(KSSelectItemWidgetAbstract selectableWidget, ConfirmationDialog dialog){
42  0 this.dialog = dialog;
43  0 this.init(selectableWidget);
44    }
45   
 
46  0 toggle private void init(KSSelectItemWidgetAbstract selectableWidget){
47  0 this.selectableWidget = selectableWidget;
48   
49  0 if(dialog == null){
50  0 dialog =
51    new ConfirmationDialog(Application.getApplicationContext().getMessage("fieldDeletionTitle"),
52    Application.getApplicationContext().getMessage("fieldDeletionConfirmMessage"));
53    }
54  0 dialog.getConfirmButton().addClickHandler(new ClickHandler(){
55   
 
56  0 toggle @Override
57    public void onClick(ClickEvent event) {
58  0 handleUserSelection();
59  0 dialog.hide();
60    }
61    });
62   
63  0 selectableWidget.addSelectionChangeHandler(new SelectionChangeHandler(){
64   
 
65  0 toggle @Override
66    public void onSelectionChange(SelectionChangeEvent event) {
67  0 if(event.isUserInitiated() && showConfirmation){
68  0 if(SwitchSection.this.selectableWidget.getSelectedItems().size() < lastSelection.size()){
69  0 dialog.show();
70    }
71  0 else if(!SwitchSection.this.selectableWidget.getSelectedItems().containsAll(lastSelection)){
72    // List<String> selected = SwapSection.this.selectableWidget.getSelectedItems();
73    // for(int i = 0; i < selected.size(); i++){
74    // String key = selected.get(i);
75    // Section section = swapSectionMap.get(key);
76    // if(section!=null){
77    // if(section.getLayout().isVisible()){
78    // dialog.show();
79    // }
80    // }
81    // }
82  0 dialog.show();
83    }
84    else{
85  0 handleUserSelection();
86    }
87    }
88  0 else if(event.isUserInitiated()){
89  0 handleUserSelection();
90    }
91    else{
92  0 handleSelection();
93    }
94  0 lastSelection.clear();
95  0 lastSelection.addAll(SwitchSection.this.selectableWidget.getSelectedItems());
96    }
97    });
98  0 layout = new VerticalFieldLayout();
99  0 this.add(layout);
100    }
101   
 
102  0 toggle private void handleUserSelection(){
103  0 List<String> selected = SwitchSection.this.selectableWidget.getSelectedItems();
104  0 for(int i = 0; i < selected.size(); i++){
105  0 String key = selected.get(i);
106  0 showSwappableSection(key);
107    }
108   
109  0 Iterator<String> it = swapSectionMap.keySet().iterator();
110  0 while(it.hasNext()){
111  0 String key = it.next();
112  0 if(!selected.contains(key)){
113  0 removeSwappableSection(key);
114    }
115    }
116    }
117   
118    /**
119    * This is handled differently than handleUserSelection because it is assumed that the client
120    * is setting the correct values into the widgets, therefore no need to delete sections
121    * (also reduces chance of actually deleting data before it is even shown)
122    */
 
123  0 toggle private void handleSelection(){
124  0 List<String> selected = SwitchSection.this.selectableWidget.getSelectedItems();
125  0 for(int i = 0; i < selected.size(); i++){
126  0 String key = selected.get(i);
127  0 showSwappableSection(key);
128    }
129   
130  0 Iterator<String> it = swapSectionMap.keySet().iterator();
131  0 while(it.hasNext()){
132  0 String key = it.next();
133  0 if(!selected.contains(key)){
134  0 removeSwappableSection(key);
135    }
136    }
137    }
138   
 
139  0 toggle private void showSwappableSection(String key){
140  0 Section section = swapSectionMap.get(key);
141  0 if(section != null){
142  0 if(deleted.contains(section)){
143  0 deleted.remove(section);
144    }
145  0 if(!section.getLayout().isVisible()){
146  0 section.enableValidation(true);
147  0 section.getLayout().setVisible(true);
148    }
149    }
150    }
151   
 
152  0 toggle private void removeSwappableSection(String key){
153  0 Section section = swapSectionMap.get(key);
154  0 if(section != null){
155  0 if(!deleted.contains(section)){
156  0 deleted.add(section);
157    }
158  0 if(section.getLayout().isVisible()){
159  0 section.enableValidation(false);
160  0 section.getLayout().setVisible(false);
161    }
162   
163    }
164    }
165   
 
166  0 toggle public void enableConfirmation(boolean enable){
167  0 showConfirmation = enable;
168    }
169   
 
170  0 toggle public String addSection(Section section, String swapKey){
171  0 swapSectionMap.put(swapKey, section);
172  0 String key = layout.addLayout(section.getLayout());
173  0 section.getLayout().setVisible(false);
174  0 if(selectableWidget.getSelectedItems().contains(swapKey)){
175  0 handleSelection();
176    }
177  0 sections.add(section);
178  0 return key;
179    }
180   
 
181  0 toggle public String addSection(String key, Section section, String swapKey){
182  0 swapSectionMap.put(swapKey, section);
183  0 section.getLayout().setKey(key);
184  0 String rkey = layout.addLayout(section.getLayout());
185  0 section.getLayout().setVisible(false);
186  0 if(selectableWidget.getSelectedItems().contains(swapKey)){
187  0 handleSelection();
188    }
189  0 sections.add(section);
190  0 return rkey;
191    }
192   
193   
 
194  0 toggle @Override
195    public String addSection(Section section) {
196  0 throw new UnsupportedOperationException("Sections can be added to swappable section only through " +
197    "the addSection(Section section, String swapKey) method");
198   
199    }
200   
 
201  0 toggle @Override
202    public String addSection(String key, Section section) {
203  0 throw new UnsupportedOperationException("Sections can be added to swappable section only through " +
204    "the addSection(Section section, String swapKey) method");
205    }
206    }