source: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRule.java @ 711

Last change on this file since 711 was 711, checked in by pharms, 12 years ago
  • formatting
File size: 4.6 KB
Line 
1package de.ugoe.cs.quest.tasktrees.temporalrelation;
2
3import de.ugoe.cs.quest.eventcore.IEventTarget;
4import de.ugoe.cs.quest.eventcore.gui.MouseButtonDown;
5import de.ugoe.cs.quest.eventcore.gui.MouseButtonInteraction;
6import de.ugoe.cs.quest.eventcore.gui.MouseButtonUp;
7import de.ugoe.cs.quest.eventcore.gui.MouseClick;
8import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
9import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
10import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
11import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
12import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
13
14/**
15 * TODO comment
16 *
17 * @version $Revision: $ $Date: 18.03.2012$
18 * @author 2012, last modified by $Author: patrick$
19 */
20public class DefaultMouseClickReductionRule implements TemporalRelationshipRule {
21
22    /*
23     * (non-Javadoc)
24     *
25     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode,
26     * TaskTreeBuilder, TaskTreeNodeFactory)
27     */
28    @Override
29    public RuleApplicationResult apply(ITaskTreeNode        parent,
30                                       ITaskTreeBuilder     builder,
31                                       ITaskTreeNodeFactory nodeFactory,
32                                       boolean              finalize)
33    {
34        if (!(parent instanceof ISequence)) {
35            return null;
36        }
37
38        RuleApplicationResult result = new RuleApplicationResult();
39
40        int index = 0;
41        while (index < parent.getChildren().size() - 2) // -2 because we don't need to go to the end
42        {
43            if (mouseClickSequenceFound(parent.getChildren().get(index),
44                                        parent.getChildren().get(index + 1),
45                                        parent.getChildren().get(index + 2)))
46            {
47                builder.removeChild((ISequence) parent, index);
48                builder.removeChild((ISequence) parent, index);
49                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
50                return result;
51            }
52            else if
53                ((parent.getChildren().get(index) instanceof ISequence) &&
54                 (parent.getChildren().get(index).getChildren().size() == 2) &&
55                 (mouseClickSequenceFound(parent.getChildren().get(index).getChildren().get(0),
56                                          parent.getChildren().get(index).getChildren().get(1),
57                                          parent.getChildren().get(index + 1))))
58            {
59                builder.removeChild((ISequence) parent, index);
60                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
61                return result;
62            }
63
64            index++;
65        }
66
67        return result;
68    }
69
70    /**
71     *
72     */
73    private boolean mouseClickSequenceFound(ITaskTreeNode mouseButtonDown,
74                                            ITaskTreeNode mouseButtonUp,
75                                            ITaskTreeNode mouseClick)
76    {
77        // check the first in a row of three for validity
78        if (!(mouseButtonDown instanceof IEventTask)) {
79            return false;
80        }
81
82        if (!(((IEventTask) mouseButtonDown).getEventType() instanceof MouseButtonDown)) {
83            return false;
84        }
85
86        // check the second node for validity
87        if (!(mouseButtonUp instanceof IEventTask)) {
88            return false;
89        }
90
91        IEventTarget eventTarget = ((IEventTask) mouseButtonDown).getEventTarget();
92
93        if (!eventTarget.equals(((IEventTask) mouseButtonUp).getEventTarget())) {
94            return false;
95        }
96
97        if (!(((IEventTask) mouseButtonUp).getEventType() instanceof MouseButtonUp)) {
98            return false;
99        }
100
101        MouseButtonInteraction.Button button =
102                ((MouseButtonDown) ((IEventTask) mouseButtonDown).getEventType()).getButton();
103
104        if (!button.equals(((MouseButtonUp) ((IEventTask) mouseButtonUp).getEventType())
105            .getButton()))
106        {
107            return false;
108        }
109
110        // check the third node for validity
111        if (!(mouseClick instanceof IEventTask)) {
112            return false;
113        }
114
115        if (!eventTarget.equals(((IEventTask) mouseClick).getEventTarget())) {
116            return false;
117        }
118
119        if (!(((IEventTask) mouseClick).getEventType() instanceof MouseClick)) {
120            return false;
121        }
122
123        if (!button.equals(((MouseClick) ((IEventTask) mouseClick).getEventType()).getButton())) {
124            return false;
125        }
126
127        return true;
128    }
129
130}
Note: See TracBrowser for help on using the repository browser.