[862] | 1 | package de.dass_it.vanhelsing.gui;
|
---|
| 2 |
|
---|
[868] | 3 | import java.util.ArrayList;
|
---|
[862] | 4 | import java.util.Enumeration;
|
---|
[868] | 5 | import java.util.HashMap;
|
---|
| 6 |
|
---|
| 7 | import javax.faces.model.SelectItem;
|
---|
[862] | 8 | import javax.swing.tree.DefaultMutableTreeNode;
|
---|
| 9 | import javax.swing.tree.DefaultTreeModel;
|
---|
| 10 | import de.dass_it.vanhelsing.gui.items.ConcreteUserObjectItem;
|
---|
| 11 | import de.dass_it.vanhelsing.gui.items.UserObjectItem;
|
---|
| 12 | import de.dass_it.vanhelsing.gui.items.UserObjectItemType;
|
---|
[865] | 13 | /**
|
---|
| 14 | * DataTree contains the data tree of a navigation view and the method used by the view regarding the data tree
|
---|
| 15 | * @author tgoecke
|
---|
| 16 | */
|
---|
[867] | 17 | //TODO: labeling schema for header nodes
|
---|
[862] | 18 | public class DataTree {
|
---|
| 19 | private DefaultTreeModel tree;
|
---|
| 20 | private DefaultMutableTreeNode root;
|
---|
[868] | 21 | private HashMap<String, SelectItem[]> keyValueList;
|
---|
[862] | 22 |
|
---|
| 23 | public DataTree() {}
|
---|
[865] | 24 | /**
|
---|
| 25 | * creates a new data tree and sets the name value of the root node to the value of argument name
|
---|
| 26 | * @param name label of the root node
|
---|
| 27 | */
|
---|
[862] | 28 | public void setTree(String name){
|
---|
| 29 | setRoot(new DefaultMutableTreeNode());
|
---|
[864] | 30 | setTree(new DefaultTreeModel(getRoot()));
|
---|
| 31 | UserObjectItemType userType = new UserObjectItemType(getRoot());
|
---|
[862] | 32 | ConcreteUserObjectItem obj = new ConcreteUserObjectItem();
|
---|
[864] | 33 | getRoot().setUserObject(userType);
|
---|
[862] | 34 | userType.setUserObject(obj);
|
---|
| 35 | userType.setLeaf(false);
|
---|
| 36 | obj.setResName(name);
|
---|
| 37 | }
|
---|
[868] | 38 |
|
---|
[865] | 39 | /**
|
---|
| 40 | * creates a tree node as a child to the parent node containing the given UserObectItem
|
---|
| 41 | * @param parent root node of the created tree node
|
---|
| 42 | * @param userObject a user object which implements the UserObjectItem interface, usually a resource type object
|
---|
| 43 | * @return returns the created node object
|
---|
| 44 | */
|
---|
[862] | 45 | public DefaultMutableTreeNode createNode(DefaultMutableTreeNode parent, UserObjectItem userObject){
|
---|
| 46 | DefaultMutableTreeNode node = new DefaultMutableTreeNode();
|
---|
| 47 | UserObjectItemType uoit = new UserObjectItemType(node);
|
---|
| 48 | node.setUserObject(uoit);
|
---|
| 49 | uoit.setUserObject(userObject);
|
---|
| 50 | parent.add(node);
|
---|
| 51 | ((UserObjectItemType)parent.getUserObject()).setLeaf(false);
|
---|
| 52 | return node;
|
---|
| 53 | }
|
---|
[868] | 54 |
|
---|
[865] | 55 | /**
|
---|
| 56 | * replace a tree nodes UserObject
|
---|
| 57 | * @param node node object whose userObject will be updated
|
---|
| 58 | * @param userObject new UserObject to replace the nodes current UserObject
|
---|
| 59 | */
|
---|
[862] | 60 | public void updateNode(DefaultMutableTreeNode node, UserObjectItem userObject){
|
---|
[865] | 61 | ((UserObjectItemType)node.getUserObject()).setUserObject(userObject);
|
---|
[862] | 62 | }
|
---|
[868] | 63 |
|
---|
[865] | 64 | /**
|
---|
| 65 | * retrieves a node by the value of the UserObjects resId
|
---|
| 66 | * @param id value to be matched by the returned object
|
---|
| 67 | * @return first node whose UserObject attribute resId matches the argument id
|
---|
| 68 | */
|
---|
[862] | 69 | public DefaultMutableTreeNode getNodeById(int id){
|
---|
| 70 | DefaultMutableTreeNode node;
|
---|
| 71 | int resId = new Integer(id);
|
---|
| 72 | Enumeration<DefaultMutableTreeNode> e = root.depthFirstEnumeration();
|
---|
| 73 |
|
---|
| 74 | while (e.hasMoreElements()){
|
---|
| 75 | node = e.nextElement();
|
---|
| 76 | if (resId ==((ConcreteUserObjectItem)(((UserObjectItemType)node.getUserObject()).
|
---|
| 77 | getUserObject())).getResId()) {
|
---|
| 78 | return node;
|
---|
| 79 | }
|
---|
| 80 | }
|
---|
| 81 | return null;
|
---|
| 82 | }
|
---|
[868] | 83 |
|
---|
[865] | 84 | /**
|
---|
| 85 | * retrieves a node by the value of the UserObjects resName
|
---|
| 86 | * @param name string value to be matched by the returned object
|
---|
| 87 | * @return first node whose UserObject attribute matches the argument name
|
---|
| 88 | */
|
---|
[862] | 89 | public DefaultMutableTreeNode getNodeByName(String name){
|
---|
| 90 | DefaultMutableTreeNode node;
|
---|
| 91 | Enumeration<DefaultMutableTreeNode> e = root.depthFirstEnumeration();
|
---|
| 92 |
|
---|
| 93 | while (e.hasMoreElements()){
|
---|
| 94 | node = e.nextElement();
|
---|
| 95 | if (name.equals(((ConcreteUserObjectItem)(((UserObjectItemType)node.getUserObject())
|
---|
| 96 | .getUserObject())).getResName())) {
|
---|
| 97 | return node;
|
---|
| 98 | }
|
---|
| 99 | }
|
---|
| 100 | return null;
|
---|
| 101 | }
|
---|
[868] | 102 |
|
---|
[865] | 103 | /**
|
---|
| 104 | * deletes the given node from the data tree
|
---|
| 105 | * @param node the node which is deleted by this operation
|
---|
| 106 | * @return node the deleted node
|
---|
| 107 | * @throws ConstraintViolationException if the node has child nodes
|
---|
| 108 | */
|
---|
[864] | 109 | public DefaultMutableTreeNode deleteNode(DefaultMutableTreeNode node) throws ConstraintViolationException{
|
---|
| 110 | if (node.getChildCount()>0) throw new ConstraintViolationException();
|
---|
[862] | 111 | DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
|
---|
| 112 | parent.remove(node);
|
---|
| 113 | return node;
|
---|
| 114 | }
|
---|
[871] | 115 | /**
|
---|
| 116 | * creates all key-Value-lists by traversing the data tree object
|
---|
| 117 | */
|
---|
[868] | 118 | public void createKeyValueLists(){
|
---|
| 119 | DefaultMutableTreeNode parent;
|
---|
| 120 | DefaultMutableTreeNode node;
|
---|
| 121 | ConcreteUserObjectItem userObject;
|
---|
| 122 | SelectItem[] selItems;
|
---|
| 123 | String key;
|
---|
[871] | 124 | keyValueList = new HashMap<String, SelectItem[]>();
|
---|
[868] | 125 | parent = (DefaultMutableTreeNode)tree.getRoot();
|
---|
[871] | 126 |
|
---|
| 127 | //create true false selectItem array for use with radio groups
|
---|
| 128 | selItems = new SelectItem[2];
|
---|
| 129 | selItems[0] = new SelectItem("true", "true");
|
---|
| 130 | selItems[1] = new SelectItem("false", "false");
|
---|
| 131 | keyValueList.put("trueFalse", selItems);
|
---|
| 132 |
|
---|
[868] | 133 | for (int i = 0; i < parent.getChildCount(); i++){
|
---|
| 134 | node = (DefaultMutableTreeNode)parent.getChildAt(i);
|
---|
| 135 | selItems = new SelectItem[node.getChildCount()];
|
---|
| 136 | for (int j = 0; j < node.getChildCount(); j++){
|
---|
[871] | 137 | userObject = (ConcreteUserObjectItem)((UserObjectItemType)((DefaultMutableTreeNode)node.getChildAt(j)).getUserObject()).getUserObject();
|
---|
[868] | 138 | selItems[j] = new SelectItem(userObject.getResName(), userObject.getResName());
|
---|
| 139 | }
|
---|
[871] | 140 | if (selItems.length > 0){
|
---|
| 141 | key = ((ConcreteUserObjectItem)((UserObjectItemType)node.getUserObject()).getUserObject()).getResName();
|
---|
| 142 | keyValueList.put(key.toLowerCase(), selItems);
|
---|
| 143 | }
|
---|
[868] | 144 | }
|
---|
| 145 | }
|
---|
| 146 | public SelectItem[] getSelectItem(String type){
|
---|
| 147 | return keyValueList.get(type);
|
---|
| 148 | }
|
---|
[862] | 149 | public DefaultMutableTreeNode getRoot(){
|
---|
| 150 | return root;
|
---|
| 151 | }
|
---|
| 152 | public void setRoot(DefaultMutableTreeNode root){
|
---|
| 153 | this.root = root;
|
---|
| 154 | }
|
---|
| 155 | public DefaultTreeModel getTree() {
|
---|
| 156 | return tree;
|
---|
| 157 | }
|
---|
| 158 | public void setTree(DefaultTreeModel tree) {
|
---|
| 159 | this.tree = tree;
|
---|
| 160 | }
|
---|
[871] | 161 |
|
---|
| 162 | public void setKeyValueList(HashMap<String, SelectItem[]> keyValueList){
|
---|
| 163 | this.keyValueList = keyValueList;
|
---|
| 164 | }
|
---|
| 165 | public HashMap<String, SelectItem[]> getKeyValueList(){
|
---|
| 166 | return keyValueList;
|
---|
| 167 | }
|
---|
| 168 |
|
---|
[868] | 169 | public void updateUserObjects(){
|
---|
[871] | 170 |
|
---|
[868] | 171 | DefaultMutableTreeNode parent;
|
---|
| 172 | DefaultMutableTreeNode node;
|
---|
| 173 | parent = (DefaultMutableTreeNode)tree.getRoot();
|
---|
| 174 | ArrayList<ViewItem> viList;
|
---|
[871] | 175 |
|
---|
[868] | 176 | for(int i = 0; i < parent.getChildCount(); i++){
|
---|
| 177 | node = (DefaultMutableTreeNode)parent.getChildAt(i);
|
---|
| 178 | for (int j = 0; j < node.getChildCount(); j++){
|
---|
[871] | 179 | viList = ((ConcreteUserObjectItem)((UserObjectItemType)((DefaultMutableTreeNode)node.getChildAt(j))
|
---|
| 180 | .getUserObject()).getUserObject()).getViewItemList();
|
---|
| 181 | if (viList != null) {
|
---|
| 182 | for (ViewItem vi : viList){
|
---|
| 183 | if (vi.getSelectOneMenu()){
|
---|
| 184 | vi.setKeyValueList(keyValueList.get(vi.getKey().toLowerCase()));
|
---|
| 185 | }
|
---|
| 186 | if (vi.getRadioGroup()){
|
---|
| 187 | vi.setKeyValueList(keyValueList.get("trueFalse"));
|
---|
| 188 | System.err.println("Key: " + vi.getKey() +" ");
|
---|
| 189 | }
|
---|
[868] | 190 | }
|
---|
| 191 | }
|
---|
| 192 | }
|
---|
| 193 | }
|
---|
| 194 | }
|
---|
| 195 |
|
---|
[862] | 196 | }
|
---|