source: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/BFSTaskModelIterator.java @ 1290

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

Refactored filter mechanism.

  • Property svn:mime-type set to text/plain
File size: 1.8 KB
Line 
1package de.ugoe.cs.autoquest.usability.taskmodel.filter;
2
3import java.util.Iterator;
4import java.util.LinkedList;
5import java.util.Queue;
6
7import org.apache.commons.collections15.Closure;
8import org.apache.commons.collections15.CollectionUtils;
9
10import de.ugoe.cs.autoquest.tasktrees.treeifc.IMarkingTemporalRelationship;
11import de.ugoe.cs.autoquest.tasktrees.treeifc.IStructuringTemporalRelationship;
12import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
13import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel;
14
15public class BFSTaskModelIterator implements Iterator<ITask> {
16
17        private final Queue<ITask> unvisitedTasks = new LinkedList<ITask>();
18
19        private BFSTaskModelIterator(ITaskModel taskModel) {
20                unvisitedTasks.addAll(taskModel.getTasks());
21        }
22
23        public static BFSTaskModelIterator iterator(ITaskModel taskModel) {
24                return new BFSTaskModelIterator(taskModel);
25        }
26
27        @Override
28        public boolean hasNext() {
29                return !this.unvisitedTasks.isEmpty();
30        }
31
32        @Override
33        public ITask next() {
34                ITask task = unvisitedTasks.poll();
35                processChildrenOfCurrentTask(task);
36                return task;
37        }
38
39        private void processChildrenOfCurrentTask(ITask task) {
40                if (task instanceof IStructuringTemporalRelationship) {
41                        CollectionUtils.forAllDo(
42                                        ((IStructuringTemporalRelationship) task).getChildren(),
43                                        addToUnvisitedTasks());
44                } else if (task instanceof IMarkingTemporalRelationship) {
45                        addToUnvisitedTasks().execute(
46                                        ((IMarkingTemporalRelationship) task).getMarkedTask());
47                }
48        }
49
50        private Closure<ITask> addToUnvisitedTasks() {
51                return new Closure<ITask>() {
52
53                        @Override
54                        public void execute(ITask childTask) {
55                                unvisitedTasks.add(childTask);
56                        }
57                };
58        }
59
60        @Override
61        public void remove() {
62                // do nothing
63        }
64
65}
Note: See TracBrowser for help on using the repository browser.