source: autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/IterativeDFSFilterStrategy.java @ 1030

Last change on this file since 1030 was 1030, checked in by adeicke, 11 years ago

Initial commit.

  • Property svn:mime-type set to text/plain
File size: 2.1 KB
Line 
1package de.ugoe.cs.autoquest.usability.tasktree.filter;
2
3import java.util.Stack;
4
5import com.google.common.base.Predicate;
6
7import de.ugoe.cs.autoquest.eventcore.IEventTarget;
8import de.ugoe.cs.autoquest.eventcore.IEventType;
9import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
10import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
11
12public class IterativeDFSFilterStrategy implements TaskTreeFilterStrategy {
13   
14    private FilterStatistic filterStatistic;
15   
16    @SuppressWarnings("unchecked")
17    @Override
18    public FilterStatistic filter(ITaskTree taskTree, EventTargetFilter eventTarget) {
19        Predicate<IEventTarget> filterPredicate = eventTarget.filterPredicate();
20        this.filterStatistic = new FilterStatistic(filterPredicate);
21        traverse(taskTree);
22        return this.filterStatistic;
23    }
24
25    @SuppressWarnings("unchecked")
26    @Override
27    public FilterStatistic filter(ITaskTree taskTree, EventTypeFilter eventType) {
28        Predicate<IEventType> filterPredicate = eventType.filterPredicate();
29        this.filterStatistic = new FilterStatistic(filterPredicate);
30        traverse(taskTree);
31        return this.filterStatistic;
32    }
33   
34    private void traverse(ITaskTree taskTree) {
35        Stack<ITaskTreeNode> unvisitedNodes = new Stack<ITaskTreeNode>();
36        unvisitedNodes.push(taskTree.getRoot());
37        while(stillUnvisitedNodes(unvisitedNodes)) {
38            ITaskTreeNode node = unvisitedNodes.pop();
39            processCurrentNode(node);
40            processChildrenOfCurrentNode(unvisitedNodes, node);
41        }
42    }
43
44    private boolean stillUnvisitedNodes(Stack<ITaskTreeNode> unvisitedNodes) {
45        return !unvisitedNodes.isEmpty();
46    }
47
48    private void processCurrentNode(ITaskTreeNode node) {
49        this.filterStatistic.addNode(node);
50    }
51   
52    private void processChildrenOfCurrentNode(Stack<ITaskTreeNode> unvisitedNodes,
53                                              ITaskTreeNode node) {
54        for(ITaskTreeNode child : node.getChildren()) {
55            unvisitedNodes.push(child);
56        }
57    }
58
59}
Note: See TracBrowser for help on using the repository browser.