if (preserveHierarchy){
localList=new ArrayList();
parents=new Stack();
}else localList=list;
GraphicNode gnode,previous=null;
Object current;
for (Iterator i=list.iterator();i.hasNext();){
gnode=(GraphicNode)i.next();
gnode.setFiltered(false);
if (!gnode.isVoid()){
current=(composition==null)?gnode.getNode():composition.evaluate(gnode.getNode());
alreadyExcluded=false;
if (hiddenFilter!=null){
if(!hiddenFilter.evaluate(current)){
if (!gnode.isSummary() || !preserveHierarchy){
i.remove();
continue;
}
if (gnode.isSummary()&&preserveHierarchy) gnode.setFiltered(true);
alreadyExcluded=true;
}
}
if (userFilter!=null&&!alreadyExcluded){
if(!userFilter.evaluate(current)){
if (!gnode.isSummary() || !preserveHierarchy){
i.remove();
continue;
}
if (gnode.isSummary()&&preserveHierarchy) gnode.setFiltered(true);
}
}
}
if (preserveHierarchy){
//contruct a temporary tree for sorting and grouping
// if (parents==null||previous==null){
// System.out.println("null");
// }
if (gnode.getLevel()==1){
localList.add(gnode);
parents.clear();
}else{
if (previous.getLevel()<gnode.getLevel()){
parents.push(previous);
}else if (previous.getLevel()>=gnode.getLevel()){
while (parents.size()>=gnode.getLevel()) parents.pop();
}
((GraphicNode)parents.peek()).getChildren().add(gnode);
}
previous=gnode;
}