if (filters.length > 1) {
throw new IllegalArgumentException("Filter accepts a single filter in parameter");
}
HierarchicalGraph hgraph = (HierarchicalGraph) graph;
if (filters[0] instanceof NodeFilter && ((NodeFilter) filters[0]).init(hgraph)) {
NodeFilter filter = (NodeFilter) filters[0];
GraphView hgraphView = hgraph.getView();
for (Edge e : hgraph.getEdges().toArray()) {
Node source = e.getSource().getNodeData().getNode(hgraphView.getViewId());
Node target = e.getTarget().getNodeData().getNode(hgraphView.getViewId());
boolean remove = false;
switch (option) {
case SOURCE:
remove = !filter.evaluate(hgraph, source);
break;
case TARGET:
remove = !filter.evaluate(hgraph, target);
break;
case BOTH:
remove = !filter.evaluate(hgraph, source) || !filter.evaluate(hgraph, target);
break;
case ANY:
remove = !filter.evaluate(hgraph, source) && !filter.evaluate(hgraph, target);
break;
}
if (remove) {
hgraph.removeEdge(e);
}
}
filter.finish();
}
return hgraph;
}