1 21 package net.mlw.vlh.web.tag.support; 22 23 import java.util.ArrayList ; 24 import java.util.HashMap ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 import java.util.Map ; 28 29 import javax.servlet.jsp.PageContext ; 30 31 36 public class GroupingCellInterceptor implements CellInterceptor 37 { 38 41 public boolean isHidden(PageContext pageContext, String key, String name, 42 Object value) 43 { 44 if( key == null ) 45 { 46 return false; 47 } 48 49 GroupingInfo info = (GroupingInfo)pageContext.getAttribute(key + "GroupingInfo"); 50 if( info == null ) 51 { 52 pageContext.setAttribute(key + "GroupingInfo", info = new GroupingInfo()); 53 } 54 55 return info.sameAsLastValue(name, value); 56 } 57 58 private static class GroupingInfo 59 { 60 private List names = new ArrayList (); 61 private Map lastValues = new HashMap (); 62 63 public boolean sameAsLastValue(String name, Object value) 64 { 65 if(!names.contains(name)) 66 { 67 names.add(name); 68 lastValues.put(name, value); 69 return false; 70 } 71 72 Object lastValue = lastValues.get(name); 73 lastValues.put(name, value); 74 75 if(lastValue==null) 76 { 77 return false; 78 } 79 else 80 { 81 if(lastValue.equals(value)) 82 { 83 return true; 84 } 85 else 86 { 87 boolean nullOut = false; 88 for (Iterator iter = names.iterator(); iter.hasNext();) 89 { 90 String currentName = (String ) iter.next(); 91 92 if(nullOut) 93 { 94 lastValues.remove(currentName); 95 } 96 97 if( currentName.equals(name)) 98 { 99 nullOut = true; 100 } 101 } 102 return false; 103 } 104 } 105 } 106 } 107 } | Popular Tags |