Ignore:
Timestamp:
08/17/12 08:33:29 (12 years ago)
Author:
pharms
Message:
  • adapted task tree creation stuff to more general event handling
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRule.java

    r451 r557  
    1 //------------------------------------------------------------------------------------------------- 
    21// Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $ 
    32// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $ 
     
    54// Creation  : 2012 by patrick 
    65// Copyright : Patrick Harms, 2012 
    7 //------------------------------------------------------------------------------------------------- 
     6 
    87package de.ugoe.cs.quest.tasktrees.temporalrelation; 
    98 
    10 import de.ugoe.cs.quest.eventcore.guimodel.GUIElement; 
    11 import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonDown; 
    12 import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonInteraction; 
    13 import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonUp; 
    14 import de.ugoe.cs.quest.eventcore.userinteraction.MouseClick; 
    15 import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask; 
    16 import de.ugoe.cs.quest.tasktrees.treeifc.Sequence; 
    17 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder; 
    18 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode; 
    19 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory; 
     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; 
    2019 
    21 //------------------------------------------------------------------------------------------------- 
    2220/** 
    2321 * TODO comment 
     
    2624 * @author 2012, last modified by $Author: patrick$ 
    2725 */ 
    28 //------------------------------------------------------------------------------------------------- 
    29 public class DefaultMouseClickReductionRule implements TemporalRelationshipRule 
    30 { 
     26public class DefaultMouseClickReductionRule implements TemporalRelationshipRule { 
    3127 
    32   //----------------------------------------------------------------------------------------------- 
    33   /* (non-Javadoc) 
    34    * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory) 
    35    */ 
    36   //----------------------------------------------------------------------------------------------- 
    37   @Override 
    38   public RuleApplicationResult apply(TaskTreeNode        parent, 
    39                                      TaskTreeBuilder     builder, 
    40                                      TaskTreeNodeFactory nodeFactory, 
    41                                      boolean             finalize) 
    42   { 
    43     if (!(parent instanceof Sequence)) 
     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) 
    4439    { 
    45       return null; 
     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; 
    4674    } 
    47      
    48     RuleApplicationResult result = new RuleApplicationResult(); 
    49      
    50     int index = 0; 
    51     while (index < parent.getChildren().size() - 2) // -2 because we don't need to go to the end 
    52     { 
    53       if (mouseClickSequenceFound(parent.getChildren().get(index), 
    54                                   parent.getChildren().get(index + 1), 
    55                                   parent.getChildren().get(index + 2))) 
    56       { 
    57          builder.removeChild((Sequence) parent, index); 
    58          builder.removeChild((Sequence) parent, index); 
    59          result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED); 
    60          return result; 
    61       } 
    62       else if ((parent.getChildren().get(index) instanceof Sequence) && 
    63                (parent.getChildren().get(index).getChildren().size() == 2) && 
    64                (mouseClickSequenceFound(parent.getChildren().get(index).getChildren().get(0), 
    65                                         parent.getChildren().get(index).getChildren().get(1), 
    66                                         parent.getChildren().get(index + 1)))) 
    67       { 
    68         builder.removeChild((Sequence) parent, index); 
    69         result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED); 
    70         return result; 
    71       } 
    72        
    73       index++; 
    74     } 
    75      
    76     return result; 
    77   } 
    7875 
    79   //----------------------------------------------------------------------------------------------- 
    80   /** 
     76    /** 
    8177   *  
    8278   */ 
    83   //----------------------------------------------------------------------------------------------- 
    84   private boolean mouseClickSequenceFound(TaskTreeNode mouseButtonDown, 
    85                                           TaskTreeNode mouseButtonUp, 
    86                                           TaskTreeNode mouseClick) 
    87   { 
    88     // check the first in a row of three for validity 
    89     if (!(mouseButtonDown instanceof InteractionTask)) 
     79    private boolean mouseClickSequenceFound(ITaskTreeNode mouseButtonDown, 
     80                                            ITaskTreeNode mouseButtonUp, 
     81                                            ITaskTreeNode mouseClick) 
    9082    { 
    91       return false; 
     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; 
    92134    } 
    93      
    94     GUIElement guiElement = ((InteractionTask) mouseButtonDown).getGUIElement(); 
    95      
    96     if (!(((InteractionTask) mouseButtonDown).getInteraction() instanceof MouseButtonDown)) 
    97     { 
    98       return false; 
    99     } 
    100      
    101     MouseButtonInteraction.Button button = 
    102       ((MouseButtonDown) ((InteractionTask) mouseButtonDown).getInteraction()).getButton(); 
    103      
    104      
    105     // check the second node for validity 
    106     if (!(mouseButtonUp instanceof InteractionTask)) 
    107     { 
    108       return false; 
    109     } 
    110      
    111     if (!guiElement.equals(((InteractionTask) mouseButtonUp).getGUIElement())) 
    112     { 
    113       return false; 
    114     } 
    115      
    116     if (!(((InteractionTask) mouseButtonUp).getInteraction() instanceof MouseButtonUp)) 
    117     { 
    118       return false; 
    119     } 
    120      
    121     if (!button.equals 
    122           (((MouseButtonUp) ((InteractionTask) mouseButtonUp).getInteraction()).getButton())) 
    123     { 
    124       return false; 
    125     } 
    126      
    127      
    128     // check the third node for validity 
    129     if (!(mouseClick instanceof InteractionTask)) 
    130     { 
    131       return false; 
    132     } 
    133      
    134     if (!guiElement.equals(((InteractionTask) mouseClick).getGUIElement())) 
    135     { 
    136       return false; 
    137     } 
    138      
    139     if (!(((InteractionTask) mouseClick).getInteraction() instanceof MouseClick)) 
    140     { 
    141       return false; 
    142     } 
    143      
    144     if (!button.equals(((MouseClick) ((InteractionTask) mouseClick).getInteraction()).getButton())) 
    145     { 
    146       return false; 
    147     } 
    148      
    149     return true; 
    150   } 
    151135 
    152136} 
Note: See TracChangeset for help on using the changeset viewer.