- // Create filtered changes
- List<ChangeFilter> combined = new ArrayList<>(filters);
- combined.addAll(userFilters);
- GraphChanges filteredChanges = getSession().syncRequest(new FilterChangesRead(changes, combined));
- UpdateTree updateTreeF = getUpdateTree(filteredChanges);
- UpdateList updateListF = getUpdateList(filteredChanges);
- // hide changes that are not contained within the filtered changes.
- applyVisibleFlags(updateTree.getRootNode(), updateTreeF.getRootNode());
- applyVisibleFlags(updateList.getChanges(), updateListF.getChanges());
- }
- }
-
- private void applyVisibleFlags(UpdateNode l, UpdateNode r) {
- BijectionMap<UpdateNode, UpdateNode> comparable = new BijectionMap<>();
- for (UpdateNode lc : l.getChildren()) {
- for (UpdateNode rc : r.getChildren()) {
- if (comparable.containsRight(rc))
- continue;
- if (lc.getResource() != null) {
- if (lc.getResource().equals(rc.getResource())) {
-
- comparable.map(lc, rc);
- break;
- }
- } else if (rc.getResource() == null){
- UpdateOp lop = lc.getOp();
- UpdateOp rop = rc.getOp();
- if (lop.getStatement() != null && lop.getStatement().equals(rop.getStatement())) {
- comparable.map(lc, rc);
- break;
- }
- }
- }
- }
- for (UpdateNode lc : l.getChildren()) {
- if (!comparable.containsLeft(lc))
- lc.setVisible(false);
- }
- for (Entry<UpdateNode, UpdateNode> entry : comparable.getEntries()) {
- applyVisibleFlags(entry.getKey(), entry.getValue());
- }
- }
-
- private void applyVisibleFlags(Collection<PropertyChange> l, Collection<PropertyChange> r) {
- BijectionMap<PropertyChange, PropertyChange> comparable = new BijectionMap<>();
- for (PropertyChange lc : l) {
- for (PropertyChange rc : r) {
- if (comparable.containsRight(rc))
- continue;
- if (lc.getFirst().equals(rc.getFirst())) {
- comparable.map(lc, rc);
- break;
- }
- }
+ if (changes2 != null && changes3 != null) {
+ getUpdateTree3();
+ }
+ getSession().syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ for (PropertyChange change : updateList.getChanges()) {
+ boolean visible = true;
+ for (ChangeFilter2 filter : userFilters) {
+ if (!filter.accept(graph, change)) {
+ visible = false;
+ break;
+ }
+ }
+ change.setVisible(visible);
+ }
+ if (updateTree3 != null) {
+ Deque<UpdateNode3> stack = new ArrayDeque<>();
+ stack.add(getUpdateNode3());
+ while (!stack.isEmpty()) {
+ UpdateNode3 n = stack.pop();
+ boolean visible = true;
+ for (ChangeFilter2 filter : userFilters) {
+ if (!filter.accept(graph, n)) {
+ visible = false;
+ break;
+ }
+ }
+ n.setVisible(visible);
+ for (UpdateNode3 c : n.getChildren())
+ stack.push(c);
+ }
+ } else {
+
+ Deque<UpdateNode> stack = new ArrayDeque<>();
+ stack.add(updateTree.getRootNode());
+ while (!stack.isEmpty()) {
+ UpdateNode n = stack.pop();
+ boolean visible = true;
+ for (ChangeFilter2 filter : userFilters) {
+ if (!filter.accept(graph, n)) {
+ visible = false;
+ break;
+ }
+ }
+ n.setVisible(visible);
+ for (UpdateNode c : n.getChildren())
+ stack.push(c);
+ }
+ }
+ }
+ });