1 33 34 package com.icesoft.faces.component.tree; 35 36 import javax.faces.model.DataModel; 37 import javax.faces.model.DataModelEvent; 38 import javax.faces.model.DataModelListener; 39 import javax.swing.tree.DefaultMutableTreeNode ; 40 import javax.swing.tree.TreeModel ; 41 import java.util.HashMap ; 42 import java.util.Map ; 43 44 48 public class TreeDataModel extends DataModel { 49 50 private int rowIndex = -1; 51 private TreeModel treeModel; 52 private Map rowIndexMap; 53 54 57 public TreeDataModel() { 58 this(null); 59 } 60 61 64 public TreeDataModel(TreeModel treeModel) { 65 super(); 66 setWrappedData(treeModel); 67 rowIndexMap = new HashMap (); 68 setChildCount(); 69 70 } 71 72 75 public boolean isRowAvailable() { 76 if (treeModel == null) { 77 return (false); 78 } else if ((rowIndex >= 0) && (rowIndex < childCount)) { 79 return (true); 80 } else { 81 return (false); 82 } 83 } 84 85 88 public int getRowCount() { 89 return childCount; 90 } 91 92 private int childCount = -1; 93 94 private int setChildCount(DefaultMutableTreeNode treeNode) { 95 96 int count = treeNode.getChildCount(); 97 for (int i = 0; i < count; i++) { 98 DefaultMutableTreeNode child = 99 (DefaultMutableTreeNode ) treeNode.getChildAt(i); 100 ((IceUserObject) child.getUserObject()) 101 .setRowIndex(treeNodeRowIndex++); 102 addNodeToMap(child, 103 ((IceUserObject) child.getUserObject()).getRowIndex()); 104 105 if (((IceUserObject) child.getUserObject()).isExpanded()) { 106 childCount += treeNode.getChildCount(); 107 setChildCount(child); 108 } 109 } 110 return childCount; 111 } 112 113 private int treeNodeRowIndex = -1; 114 115 private void setChildCount() { 116 DefaultMutableTreeNode root = 117 (DefaultMutableTreeNode ) treeModel.getRoot(); 118 rowIndexMap.clear(); 119 treeNodeRowIndex = 0; 120 childCount = 1; 122 ((IceUserObject) root.getUserObject()).setRowIndex(treeNodeRowIndex++); 123 addNodeToMap(root, 124 ((IceUserObject) root.getUserObject()).getRowIndex()); 125 if (((IceUserObject) root.getUserObject()).isExpanded()) { 126 childCount += root.getChildCount(); 127 128 } 129 } 130 131 private void addNodeToMap(DefaultMutableTreeNode node, 132 int treeNodeRowIndex) { 133 134 135 rowIndexMap.put(new Integer (treeNodeRowIndex), node); 136 } 137 138 141 public Object getRowData() { 142 if (treeModel == null) { 143 return (null); 144 } else if (!isRowAvailable()) { 145 throw new IllegalArgumentException (); 146 } else { 147 return (rowIndexMap.get(new Integer (rowIndex))); 148 } 149 } 150 151 154 public int getRowIndex() { 155 return rowIndex; 156 } 157 158 161 public void setRowIndex(int rowIndex) { 162 if (rowIndex < -1) { 163 throw new IllegalArgumentException (); 164 } 165 int old = this.rowIndex; 166 this.rowIndex = rowIndex; 167 if (treeModel == null) { 168 return; 169 } 170 DataModelListener[] listeners = getDataModelListeners(); 171 if ((old != this.rowIndex) && (listeners != null)) { 172 Object rowData = null; 173 if (isRowAvailable()) { 174 rowData = getRowData(); 175 } 176 DataModelEvent event = 177 new DataModelEvent(this, this.rowIndex, rowData); 178 int n = listeners.length; 179 for (int i = 0; i < n; i++) { 180 if (null != listeners[i]) { 181 listeners[i].rowSelected(event); 182 } 183 } 184 } 185 } 186 187 190 public Object getWrappedData() { 191 return treeModel; 192 } 193 194 197 public void setWrappedData(Object data) { 198 if (data == null) { 199 treeModel = null; 200 setRowIndex(-1); 201 } else { 202 treeModel = (TreeModel ) data; 203 rowIndex = -1; 204 setRowIndex(0); 205 } 206 207 } 208 209 } 210 | Popular Tags |