1 | package de.dass_it.vanhelsing.gui;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 | import java.util.Enumeration;
|
---|
5 | import java.util.HashMap;
|
---|
6 |
|
---|
7 | import javax.faces.model.SelectItem;
|
---|
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;
|
---|
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 | */
|
---|
17 | //TODO: labeling schema for header nodes
|
---|
18 | public class DataTree {
|
---|
19 | private DefaultTreeModel tree;
|
---|
20 | private DefaultMutableTreeNode root;
|
---|
21 | private HashMap<String, SelectItem[]> keyValueList;
|
---|
22 |
|
---|
23 | public DataTree() {}
|
---|
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 | */
|
---|
28 | public void setTree(String name){
|
---|
29 | setRoot(new DefaultMutableTreeNode());
|
---|
30 | setTree(new DefaultTreeModel(getRoot()));
|
---|
31 | UserObjectItemType userType = new UserObjectItemType(getRoot());
|
---|
32 | ConcreteUserObjectItem obj = new ConcreteUserObjectItem();
|
---|
33 | getRoot().setUserObject(userType);
|
---|
34 | userType.setUserObject(obj);
|
---|
35 | userType.setLeaf(false);
|
---|
36 | obj.setResName(name);
|
---|
37 | }
|
---|
38 |
|
---|
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 | */
|
---|
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 | }
|
---|
54 |
|
---|
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 | */
|
---|
60 | public void updateNode(DefaultMutableTreeNode node, UserObjectItem userObject){
|
---|
61 | ((UserObjectItemType)node.getUserObject()).setUserObject(userObject);
|
---|
62 | }
|
---|
63 |
|
---|
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 | */
|
---|
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 | }
|
---|
83 |
|
---|
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 | */
|
---|
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 | }
|
---|
102 |
|
---|
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 | */
|
---|
109 | public DefaultMutableTreeNode deleteNode(DefaultMutableTreeNode node) throws ConstraintViolationException{
|
---|
110 | if (node.getChildCount()>0) throw new ConstraintViolationException();
|
---|
111 | DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
|
---|
112 | parent.remove(node);
|
---|
113 | return node;
|
---|
114 | }
|
---|
115 | /**
|
---|
116 | * creates all key-Value-lists by traversing the data tree object
|
---|
117 | */
|
---|
118 | public void createKeyValueLists(){
|
---|
119 | DefaultMutableTreeNode parent;
|
---|
120 | DefaultMutableTreeNode node;
|
---|
121 | ConcreteUserObjectItem userObject;
|
---|
122 | SelectItem[] selItems;
|
---|
123 | String key;
|
---|
124 | keyValueList = new HashMap<String, SelectItem[]>();
|
---|
125 | parent = (DefaultMutableTreeNode)tree.getRoot();
|
---|
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 |
|
---|
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++){
|
---|
137 | userObject = (ConcreteUserObjectItem)((UserObjectItemType)((DefaultMutableTreeNode)node.getChildAt(j)).getUserObject()).getUserObject();
|
---|
138 | selItems[j] = new SelectItem(userObject.getResName(), userObject.getResName());
|
---|
139 | }
|
---|
140 | if (selItems.length > 0){
|
---|
141 | key = ((ConcreteUserObjectItem)((UserObjectItemType)node.getUserObject()).getUserObject()).getResName();
|
---|
142 | keyValueList.put(key.toLowerCase(), selItems);
|
---|
143 | }
|
---|
144 | }
|
---|
145 | }
|
---|
146 | public SelectItem[] getSelectItem(String type){
|
---|
147 | return keyValueList.get(type);
|
---|
148 | }
|
---|
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 | }
|
---|
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 |
|
---|
169 | public void updateUserObjects(){
|
---|
170 |
|
---|
171 | DefaultMutableTreeNode parent;
|
---|
172 | DefaultMutableTreeNode node;
|
---|
173 | parent = (DefaultMutableTreeNode)tree.getRoot();
|
---|
174 | ArrayList<ViewItem> viList;
|
---|
175 |
|
---|
176 | for(int i = 0; i < parent.getChildCount(); i++){
|
---|
177 | node = (DefaultMutableTreeNode)parent.getChildAt(i);
|
---|
178 | for (int j = 0; j < node.getChildCount(); j++){
|
---|
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 | }
|
---|
190 | }
|
---|
191 | }
|
---|
192 | }
|
---|
193 | }
|
---|
194 | }
|
---|
195 |
|
---|
196 | }
|
---|