| 1 20 package org.openi.menu; 21 22 import java.io.Serializable ; 23 import java.util.*; 24 25 26 33 public class Menu implements Serializable { 34 private String displayName; 35 36 40 private Collection childNodes; 41 42 46 public Menu() { 47 childNodes = new ArrayList(); 48 } 49 50 54 public Menu(String displayName) { 55 this.displayName = displayName; 56 childNodes = new ArrayList(); 57 } 58 59 62 public String getDisplayName() { 63 return displayName; 64 } 65 66 69 public void setDisplayName(String displayName) { 70 this.displayName = displayName; 71 } 72 73 77 public void addMenuItem(MenuItem menuItem) { 78 this.childNodes.add(menuItem); 79 } 80 81 85 public void addSubMenu(Menu subMenu) { 86 this.childNodes.add(subMenu); 87 } 88 89 93 public Collection getChildNodes() { 94 return this.childNodes; 95 } 96 97 101 public String toString() { 102 return String.valueOf(displayName); 103 } 104 105 public void accept(MenuVisitor visitor){ 106 this.recurse(this.getChildNodes(), visitor); 107 } 108 109 private void recurse(Collection nodes, MenuVisitor visitor){ 110 Iterator children = nodes.iterator(); 111 while(children.hasNext()){ 112 Object child = children.next(); 113 114 if(child instanceof Menu){ 115 Menu childMenu = (Menu)child; 116 visitor.visit(childMenu); 117 recurse(childMenu.getChildNodes(), visitor); 118 }else if(child instanceof MenuItem){ 119 visitor.visit((MenuItem)child); 120 } 121 } 122 } 123 124 public Menu getSubMenu(String displayName) { 125 SubmenuVisitor visitor = new SubmenuVisitor(displayName); 126 this.recurse(this.getChildNodes(), visitor); 127 return visitor.getSubmenu(); 128 } 129 130 public List getMenuDisplayNames() { 131 NameCollectionVisitor visitor = new NameCollectionVisitor(); 132 this.recurse(this.getChildNodes(), visitor); 133 return visitor.getMenuNames(); 134 } 135 } 136 137 class SubmenuVisitor implements MenuVisitor{ 138 private Menu submenu; 139 private String displayName; 140 public SubmenuVisitor(String displayName){ 141 this.displayName = displayName; 142 } 143 144 public void visit(Menu menu) { 145 if(displayName.equals(menu.getDisplayName())){ 146 submenu = menu; 147 } 148 } 149 150 public void visit(MenuItem menuItem) { 151 } 153 154 public Menu getSubmenu(){ 155 return this.submenu; 156 } 157 } 158 159 class NameCollectionVisitor implements MenuVisitor{ 160 private List menuNames; 161 162 public NameCollectionVisitor(){ 163 menuNames = new LinkedList(); 164 } 165 166 public void visit(Menu menu) { 167 if(menu!=null && menu.getDisplayName()!=null){ 168 menuNames.add(menu.getDisplayName()); 169 } 170 } 171 172 public List getMenuNames() { 173 return this.menuNames; 174 } 175 176 public void visit(MenuItem menuItem) { 177 } 179 180 } 181 182 183 | Popular Tags |