1 16 17 package org.apache.jetspeed.om.registry.base; 18 19 import java.util.Iterator ; 20 import java.util.SortedMap ; 21 import java.util.HashMap ; 22 23 import java.util.NoSuchElementException ; 24 import java.lang.UnsupportedOperationException ; 25 import java.lang.IllegalStateException ; 26 27 import org.apache.jetspeed.om.registry.*; 28 29 30 37 public class CategoryIterator implements Iterator 38 { 39 protected SortedMap map = null; 40 protected String key; 41 protected Iterator mapIterator = null; 42 protected Iterator bucketIterator = null; 43 protected boolean iteratingMaps = true; 44 protected HashMap bucket = null; 45 protected PortletEntry portlet = null; 46 protected boolean findall = false; 47 protected String category = ""; 48 protected String group = ""; 49 50 public String getCategory() 51 { 52 return category; 53 } 54 55 public String getGroup() 56 { 57 return group; 58 } 59 60 public CategoryIterator(SortedMap map, String key) 61 { 62 this.map = map; 63 this.key = key; 64 findall = (this.key == null || this.key.equals("")); 65 if (findall) 66 this.map = map; 67 else 68 this.map = map.tailMap(key); 69 this.mapIterator = this.map.entrySet().iterator(); 70 this.bucketIterator = null; 71 this.bucket = null; 72 } 73 74 private CategoryIterator() 75 {} 76 77 public boolean hasNext() 78 { 79 if (iteratingMaps) 80 { 81 if (mapIterator.hasNext() == false) 82 return false; 83 return filter(); 84 } 85 86 if (bucketIterator.hasNext()) 87 return getPortletEntry(); 88 89 if (mapIterator.hasNext()) 91 { 92 return filter(); 93 } 94 return false; } 96 97 protected boolean filter() 98 { 99 java.util.Map.Entry entry = (java.util.Map.Entry)mapIterator.next(); 100 String entryKey = (String )entry.getKey(); 101 int pos = entryKey.indexOf('.'); 102 this.category = ""; 103 if (-1 == pos) 104 { 105 this.group = entryKey; 106 } 107 else 108 { 109 this.group = entryKey.substring(0, pos); 110 int length = entryKey.length(); 111 if (length > pos + 1) 112 this.category = entryKey.substring(pos + 1, length); 113 } 114 115 if (!findall && !entryKey.startsWith(this.key)) 116 return false; 118 bucket = (HashMap )entry.getValue(); 119 120 bucketIterator = bucket.entrySet().iterator(); 121 iteratingMaps = false; 122 if (bucketIterator.hasNext() == false) 123 return false; 124 return getPortletEntry(); 125 } 126 127 128 protected boolean getPortletEntry() 129 { 130 java.util.Map.Entry entry = (java.util.Map.Entry)bucketIterator.next(); 131 if (null == entry) 132 return false; 133 134 this.portlet = (PortletEntry)entry.getValue(); 135 136 return true; 137 } 138 139 public void remove() throws IllegalStateException , UnsupportedOperationException 140 { 141 throw new UnsupportedOperationException ("The remove() method is not supported"); 142 } 143 144 145 public Object next() throws NoSuchElementException 146 { 147 return portlet; 148 } 149 150 } 151 | Popular Tags |