1 18 19 package de.gulden.framework.amoda.generic.data; 20 21 import de.gulden.framework.amoda.generic.behaviour.*; 22 import de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract; 23 import de.gulden.framework.amoda.model.data.*; 24 import de.gulden.framework.amoda.model.data.CompositeGroup; 25 import java.lang.*; 26 import java.util.*; 27 28 34 public class GenericCompositeGroup extends GenericApplicationMemberAbstract implements CompositeGroup { 35 36 40 public Map all = new de.gulden.util.OrderedHashMap(); 41 42 43 47 public void add(CompositeMember member) { 48 member.setParent(this); 49 all.put(member.getId(),member); 50 } 51 52 public void clear() { 53 for (Iterator it=all.values().iterator();it.hasNext();) { 54 CompositeMember m=(CompositeMember)it.next(); 55 m.setParent(null); 56 } 57 all.clear(); 58 } 59 60 public CompositeMember get(String id) { 61 CompositeMember result = get(id,true); 62 if (result == null) { 63 if (id.indexOf('.')!=-1) { 64 result = getAbsolute(id); 65 } 66 } 67 return result; 68 } 69 70 public CompositeMember get(String id, boolean deep) { 71 CompositeMember m=(CompositeMember)getAll().get(id); if ((m==null)&&(deep)) { 73 for (Iterator it=getGroups().values().iterator();it.hasNext();) { 74 CompositeGroup g=(CompositeGroup)it.next(); 75 m=g.get(id,true); 76 if (m!=null) { 77 return m; 78 } 79 } 80 } 81 return m; 82 } 83 84 public Map getAll(Class type, boolean deep) { 85 de.gulden.util.OrderedHashMap all=(de.gulden.util.OrderedHashMap)getAll(); Map map=(Map)all.clone(); 88 if (type!=null) { 89 for (Iterator it=all.values().iterator();it.hasNext();) { 90 Object o=it.next(); 91 if (!type.isAssignableFrom(o.getClass())) { 92 map.remove(((CompositeMember)o).getId()); 93 } 94 } 95 } 96 if (deep) { 97 Map groups=getGroups(); 98 for (Iterator it=groups.values().iterator();it.hasNext();) { 99 CompositeGroup g=(CompositeGroup)it.next(); 100 map.putAll(g.getAll(type,true)); 101 } 102 } 103 return map; 104 } 105 106 public Map getEntries() { 107 Map map=(Map)((de.gulden.util.OrderedHashMap)all).clone(); 108 for (Iterator it=all.values().iterator();it.hasNext();) { 109 Object o=it.next(); 110 if (o instanceof CompositeGroup) { 111 map.remove(((CompositeMember)o).getId()); 112 } 113 } 114 return map; 115 } 116 117 public Map getGroups() { 118 Map map=(Map)((de.gulden.util.OrderedHashMap)all).clone(); 119 for (Iterator it=all.values().iterator();it.hasNext();) { 120 Object o=it.next(); 121 if (!(o instanceof CompositeGroup)) { 122 map.remove(((CompositeMember)o).getId()); 123 } 124 } 125 return map; 126 } 127 128 public Map getAll() { 129 return all; 130 } 131 132 public void setAll(Map _all) { 133 clear(); 134 addAll(_all.values()); 135 } 136 137 public void addAll(Collection members) { 138 for (Iterator it=members.iterator();it.hasNext();) { 139 CompositeMember member=(CompositeMember)it.next(); 140 this.add(member); 141 } 142 } 143 144 public int countMaxDepth() { 145 de.gulden.framework.amoda.generic.behaviour.GenericCondition cond=new de.gulden.framework.amoda.generic.behaviour.GenericCondition() { 146 public boolean test() { 147 return true; 148 } 149 }; 150 return countMaxDepth(cond); 151 } 152 153 public int countMaxDepth(GenericCondition cond) { 154 int depth=0; 155 Map subGroups=getGroups(); 156 for (Iterator it=subGroups.values().iterator();it.hasNext();) { 157 GenericCompositeGroup g=(GenericCompositeGroup)it.next(); 158 if (cond.test(g)) { 159 int gDepth=g.countMaxDepth(cond); 160 if ((gDepth>0)&&((gDepth+1)>depth)) { 161 depth=gDepth+1; 162 } 163 } 164 } 165 if (depth==0) { Map m=getEntries(); 167 for (Iterator it=m.values().iterator();(depth==0)&&it.hasNext();) { 168 if (cond.test(it.next())) { 169 depth=1; } 171 } 172 } 173 return depth; 174 } 175 176 protected CompositeMember getAbsolute(String id) { 177 StringTokenizer st=new StringTokenizer(id,".",false); 178 String tok=st.nextToken(); 179 CompositeGroup g=this; 180 while (st.hasMoreTokens()) { Object member=g.get(tok,false); 182 if (member instanceof CompositeGroup) { 183 g=(CompositeGroup)member; } else { return null; 186 } 187 tok=st.nextToken(); 188 } 189 return g.get(tok); 190 } 191 192 } | Popular Tags |