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

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