Coverage Report - org.kuali.student.lum.common.client.lo.TreeStringBinding
 
Classes in this File Line Coverage Branch Coverage Complexity
TreeStringBinding
0%
0/51
0%
0/20
1.684
TreeStringBinding$StringTreeStructure
0%
0/30
0%
0/6
1.684
TreeStringBinding$StringTreeStructure$1
0%
0/2
N/A
1.684
 
 1  
 package org.kuali.student.lum.common.client.lo;
 2  
 
 3  
 import com.google.gwt.user.client.ui.Label;
 4  
 import org.kuali.student.common.ui.client.configurable.mvc.binding.ModelWidgetBindingSupport;
 5  
 import org.kuali.student.common.ui.client.mvc.DataModel;
 6  
 import org.kuali.student.common.ui.client.widgets.menus.KSListPanel;
 7  
 import org.kuali.student.core.assembly.data.Data;
 8  
 
 9  
 import java.util.*;
 10  
 
 11  
 /**
 12  
  * @author Igor
 13  
  */
 14  0
 public class TreeStringBinding extends ModelWidgetBindingSupport<KSListPanel> {
 15  
 
 16  
     @Override
 17  
     public void setModelValue(KSListPanel widget, DataModel model, String path) {
 18  0
         throw new UnsupportedOperationException("Method is not supported");
 19  
     }
 20  
 
 21  
     @Override
 22  
     public void setWidgetValue(KSListPanel listPanel, DataModel model, String path) {
 23  0
         listPanel.clear();
 24  0
         Data loData = model.get(path);
 25  0
         if (loData != null) {
 26  0
             StringTreeStructure rootModel = new StringTreeStructure();
 27  0
             transform(loData, rootModel);
 28  0
             bind(rootModel, listPanel);
 29  
         }
 30  0
     }
 31  
 
 32  
     private void transform(Data loData, StringTreeStructure rootModel) {
 33  0
         for (Data.Property property : loData) {
 34  0
             Data loDisplayInfoData = property.getValue();
 35  0
             LoDisplayInfoHelper loDisplayInfoHelper = new LoDisplayInfoHelper(loDisplayInfoData);
 36  0
             LoInfoHelper loInfoHelper = new LoInfoHelper(loDisplayInfoHelper.getLoInfo());
 37  0
             RichTextHelper descriptionHelper = new RichTextHelper(loInfoHelper.getDesc());
 38  0
             Data categoriesData = loDisplayInfoHelper.getCategoryInfoList();
 39  0
             List<String> categories = new ArrayList<String>();
 40  
 
 41  0
             if (null != categoriesData) {
 42  0
                 Iterator<Data.Property> itr = categoriesData.realPropertyIterator();
 43  
 
 44  0
                 while (itr.hasNext()) {
 45  0
                     Data.Property catProp = itr.next();
 46  0
                     Data catData = catProp.getValue();
 47  0
                     LoCategoryInfoHelper category = new LoCategoryInfoHelper(catData);
 48  0
                     categories.add(category.getName());
 49  0
                 }
 50  
             }
 51  0
             String sequence = loInfoHelper.getSequence();
 52  0
             if (sequence != null) {
 53  0
                 int index = Integer.parseInt(sequence);
 54  0
                 StringTreeStructure childModel = new StringTreeStructure(index, descriptionHelper.getPlain(), categories);
 55  0
                 transform(loDisplayInfoHelper.getDisplayInfoList(), childModel);
 56  0
                 rootModel.addChild(childModel);
 57  
             }
 58  0
         }
 59  0
     }
 60  
 
 61  
     private void bind(StringTreeStructure stringTreeStructure, KSListPanel ksListPanel) {
 62  0
             stringTreeStructure.sortChildren();
 63  0
         List<StringTreeStructure> firstLevelChildren = stringTreeStructure.getChildren();
 64  0
         for (StringTreeStructure firstLevelChild : firstLevelChildren) {
 65  0
             addElement(firstLevelChild, ksListPanel);
 66  
         }
 67  0
     }
 68  
 
 69  
     private void addElement(StringTreeStructure element, KSListPanel listPanel) {
 70  0
         if (element.hasChildren()) {
 71  0
             KSListPanel subPanel = new KSListPanel();
 72  0
             element.sortChildren();
 73  0
             for (StringTreeStructure child : element.getChildren()) {
 74  0
                 addElement(child, subPanel);
 75  
             }
 76  0
             if (!element.getCategories().isEmpty()) {
 77  0
                 listPanel.add(subPanel, element.getValue() + element.getCategoriesString());
 78  
             } else {
 79  0
                 listPanel.add(subPanel, element.getValue());
 80  
             }
 81  0
         } else {
 82  0
             if (!element.getCategories().isEmpty()) {
 83  0
                 listPanel.add(new Label(element.getValue() + element.getCategoriesString()));
 84  
             } else {
 85  0
                 listPanel.add(new Label(element.getValue()));
 86  
             }
 87  
         }
 88  0
     }
 89  
 
 90  0
     private static class StringTreeStructure {
 91  
 
 92  
         private String value;
 93  
         private int index;
 94  
 
 95  0
         private List<StringTreeStructure> children = new ArrayList<StringTreeStructure>();
 96  0
         private List<String> categories = new LinkedList<String>();
 97  
 
 98  0
         public StringTreeStructure(int index, String value, List<String> categories) {
 99  0
             this.setIndex(index);
 100  0
             this.value = value;
 101  0
             this.categories = categories;
 102  0
         }
 103  
 
 104  
         public void sortChildren() {
 105  0
             Collections.sort(children, new Comparator<StringTreeStructure>() {
 106  
 
 107  
                 @Override
 108  
                 public int compare(StringTreeStructure o1,
 109  
                                    StringTreeStructure o2) {
 110  0
                     return o1.getIndex() - o2.getIndex();
 111  
                 }
 112  
             });
 113  0
         }
 114  
 
 115  0
         public StringTreeStructure() {
 116  0
         }
 117  
 
 118  
         public List<String> getCategories() {
 119  0
             return categories;
 120  
         }
 121  
 
 122  
         public String getValue() {
 123  0
             return value;
 124  
         }
 125  
 
 126  
         public void setValue(String value) {
 127  0
             this.value = value;
 128  0
         }
 129  
 
 130  
         public List<StringTreeStructure> getChildren() {
 131  0
             return children;
 132  
         }
 133  
 
 134  
         public void setChildren(List<StringTreeStructure> children) {
 135  0
             this.children = children;
 136  0
         }
 137  
 
 138  
         public void addChild(StringTreeStructure child) {
 139  0
             children.add(child);
 140  0
         }
 141  
 
 142  
         public boolean hasChildren() {
 143  0
             return !children.isEmpty();
 144  
         }
 145  
 
 146  
         public void setIndex(int index) {
 147  0
             this.index = index;
 148  0
         }
 149  
 
 150  
         public int getIndex() {
 151  0
             return index;
 152  
         }
 153  
 
 154  
         public String getCategoriesString() {
 155  0
             String result = " (";
 156  0
             for (int i = 0; i < categories.size(); i++) {
 157  0
                 if (i != categories.size() - 1) {
 158  0
                     result = result + categories.get(i) + ", ";
 159  
                 } else {
 160  0
                     result = result + categories.get(i) + ")";
 161  
                 }
 162  
             }
 163  0
             return result;
 164  
         }
 165  
     }
 166  
 }