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 moved

Legend:

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

    r498 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.tasktrees.treeifc.InteractionTask; 
    12 import de.ugoe.cs.quest.tasktrees.treeifc.Sequence; 
    13 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder; 
    14 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode; 
    15 import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory; 
     9import de.ugoe.cs.quest.eventcore.IEventTarget; 
     10import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask; 
     11import de.ugoe.cs.quest.tasktrees.treeifc.ISequence; 
     12import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder; 
     13import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode; 
     14import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory; 
    1615 
    17 //------------------------------------------------------------------------------------------------- 
    1816/** 
    1917 * TODO comment 
     
    2220 * @author 2012, last modified by $Author: patrick$ 
    2321 */ 
    24 //------------------------------------------------------------------------------------------------- 
    25 public class DefaultGUIElementSequenceDetectionRule implements TemporalRelationshipRule 
    26 { 
     22public class DefaultEventTargetSequenceDetectionRule implements TemporalRelationshipRule { 
    2723 
    28   //----------------------------------------------------------------------------------------------- 
    29   /* (non-Javadoc) 
    30    * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory) 
    31    */ 
    32   //----------------------------------------------------------------------------------------------- 
    33   @Override 
    34   public RuleApplicationResult apply(TaskTreeNode        parent, 
    35                                      TaskTreeBuilder     builder, 
    36                                      TaskTreeNodeFactory nodeFactory, 
    37                                      boolean             finalize) 
    38   { 
    39     if (!(parent instanceof Sequence)) 
     24    /* 
     25     * (non-Javadoc) 
     26     *  
     27     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, 
     28     * TaskTreeBuilder, TaskTreeNodeFactory) 
     29     */ 
     30    @Override 
     31    public RuleApplicationResult apply(ITaskTreeNode        parent, 
     32                                       ITaskTreeBuilder     builder, 
     33                                       ITaskTreeNodeFactory nodeFactory, 
     34                                       boolean              finalize) 
    4035    { 
    41       return null; 
     36        if (!(parent instanceof ISequence)) { 
     37            return null; 
     38        } 
     39 
     40        RuleApplicationResult result = new RuleApplicationResult(); 
     41 
     42        IEventTarget currentEventTarget = null; 
     43        int startingIndex = -1; 
     44 
     45        int index = 0; 
     46        while (index < parent.getChildren().size()) { 
     47            ITaskTreeNode child = parent.getChildren().get(index); 
     48 
     49            IEventTarget eventTarget = determineEventTarget(child); 
     50 
     51            if ((eventTarget != null) && (!eventTarget.equals(currentEventTarget))) { 
     52                if (startingIndex < 0) { 
     53                    startingIndex = index; 
     54                    currentEventTarget = eventTarget; 
     55                } 
     56                else { 
     57                    handleEventTargetSequence(parent, startingIndex, index - 1, builder, 
     58                                              nodeFactory, result); 
     59 
     60                    return result; 
     61                } 
     62            } 
     63 
     64            index++; 
     65        } 
     66 
     67        if (startingIndex > -1) { 
     68            if (finalize && (startingIndex > 0)) { 
     69                handleEventTargetSequence(parent, startingIndex, parent.getChildren().size() - 1, 
     70                                          builder, nodeFactory, result); 
     71            } 
     72            else { 
     73                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE); 
     74            } 
     75        } 
     76 
     77        return result; 
    4278    } 
    43      
    44     RuleApplicationResult result = new RuleApplicationResult(); 
    45      
    46     GUIElement currentGUIElement = null; 
    47     int startingIndex = -1; 
    48      
    49     int index = 0; 
    50     while (index < parent.getChildren().size()) 
     79 
     80    /** 
     81     * TODO: comment 
     82     *  
     83     * @param child 
     84     * @return 
     85     */ 
     86    private IEventTarget determineEventTarget(ITaskTreeNode node) { 
     87        if (node instanceof IEventTask) { 
     88            return ((IEventTask) node).getEventTarget(); 
     89        } 
     90        else { 
     91            return null; 
     92        } 
     93    } 
     94 
     95    /** 
     96     * TODO: comment 
     97     *  
     98     */ 
     99    private void handleEventTargetSequence(ITaskTreeNode         parent, 
     100                                           int                   startIndex, 
     101                                           int                   endIndex, 
     102                                           ITaskTreeBuilder      builder, 
     103                                           ITaskTreeNodeFactory  nodeFactory, 
     104                                           RuleApplicationResult result) 
    51105    { 
    52       TaskTreeNode child = parent.getChildren().get(index); 
    53        
    54       GUIElement guiElement = determineGUIElement(child); 
    55        
    56       if ((guiElement != null) && (!guiElement.equals(currentGUIElement))) 
    57       { 
    58         if (startingIndex < 0) 
    59         { 
    60           startingIndex = index; 
    61           currentGUIElement = guiElement; 
     106        ISequence sequence = nodeFactory.createNewSequence(); 
     107 
     108        for (int i = startIndex; i <= endIndex; i++) { 
     109            builder.addChild(sequence, parent.getChildren().get(startIndex)); 
     110            builder.removeChild((ISequence) parent, startIndex); 
    62111        } 
    63         else 
    64         { 
    65           handleGuiElementSequence(parent, startingIndex, index - 1, builder, nodeFactory, result); 
    66112 
    67           return result; 
    68         } 
    69       } 
    70        
    71       index++; 
     113        builder.addChild((ISequence) parent, startIndex, sequence); 
     114 
     115        result.addNewlyCreatedParentNode(sequence); 
     116        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED); 
    72117    } 
    73      
    74     if (startingIndex > -1) 
    75     { 
    76       if (finalize && (startingIndex > 0)) 
    77       { 
    78         handleGuiElementSequence 
    79           (parent, startingIndex, parent.getChildren().size() - 1, builder, nodeFactory, result); 
    80       } 
    81       else 
    82       { 
    83         result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE); 
    84       } 
    85     } 
    86      
    87     return result; 
    88   } 
    89  
    90   //----------------------------------------------------------------------------------------------- 
    91   /** 
    92    * TODO: comment 
    93    * 
    94    * @param child 
    95    * @return 
    96    */ 
    97   //----------------------------------------------------------------------------------------------- 
    98   private GUIElement determineGUIElement(TaskTreeNode node) 
    99   { 
    100     if (node instanceof InteractionTask) 
    101     { 
    102       return ((InteractionTask) node).getGUIElement(); 
    103     } 
    104     else 
    105     { 
    106       return null; 
    107     } 
    108   } 
    109  
    110   //----------------------------------------------------------------------------------------------- 
    111   /** 
    112    * TODO: comment 
    113    * 
    114    */ 
    115   //----------------------------------------------------------------------------------------------- 
    116   private void handleGuiElementSequence(TaskTreeNode          parent, 
    117                                         int                   startIndex, 
    118                                         int                   endIndex, 
    119                                         TaskTreeBuilder       builder, 
    120                                         TaskTreeNodeFactory   nodeFactory, 
    121                                         RuleApplicationResult result) 
    122   { 
    123     Sequence sequence = nodeFactory.createNewSequence(); 
    124      
    125     for (int i = startIndex; i <= endIndex; i++) 
    126     { 
    127       builder.addChild(sequence, parent.getChildren().get(startIndex)); 
    128       builder.removeChild((Sequence) parent, startIndex); 
    129     } 
    130      
    131     builder.addChild((Sequence) parent, startIndex, sequence); 
    132      
    133     result.addNewlyCreatedParentNode(sequence); 
    134     result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED); 
    135   } 
    136118 
    137119} 
Note: See TracChangeset for help on using the changeset viewer.