Ignore:
Timestamp:
01/15/14 16:05:34 (11 years ago)
Author:
pharms
Message:
  • further bugfix to have correct dummy text fields if required
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-test-utils/src/main/java/de/ugoe/cs/autoquest/tasktrees/TaskTreeDecoder.java

    r1325 r1327  
    1717import java.util.ArrayList; 
    1818import java.util.HashMap; 
     19import java.util.HashSet; 
    1920import java.util.LinkedList; 
    2021import java.util.List; 
    2122import java.util.Map; 
     23import java.util.Set; 
    2224import java.util.regex.Matcher; 
    2325import java.util.regex.Pattern; 
     
    99101        } 
    100102         
     103        correctTargets(taskInstanceList); 
     104         
    101105        return taskInstanceList; 
    102106    } 
     
    190194        } 
    191195        else { 
    192             Event event = !task.getInstances().isEmpty() ? 
    193                 ((IEventTaskInstance) task.getInstances().iterator().next()).getEvent() : 
    194                 createUserInteractionEvent(type, id, matcher.group(4)); 
    195                  
     196            Event event = createUserInteractionEvent(type, id, matcher.group(4)); 
    196197            instance = taskFactory.createNewTaskInstance((IEventTask) task, event); 
    197198        }   
     
    237238 
    238239    /** 
    239      * <p> 
    240      * TODO: comment 
    241      * </p> 
    242      * 
    243      * @param id 
    244      * @param type 
    245      * @param children 
    246      * @return 
     240     * 
    247241     */ 
    248242    private ITask getCreateTask(String id, String type, List<ITaskInstance> children) { 
    249         ITask task = tasks.get(id); 
     243        String effectiveId = id; 
     244        ITask task = tasks.get(effectiveId); 
    250245         
    251246        if (task == null) { 
     
    263258            } 
    264259            else { 
    265                 task = taskFactory.createNewEventTask(type + " --> " + id); 
     260                effectiveId = type + " --> " + id; 
     261                task = tasks.get(effectiveId); 
     262                 
     263                if (task == null) { 
     264                    task = taskFactory.createNewEventTask(effectiveId); 
     265                } 
    266266            }   
    267             tasks.put(id, task); 
     267            tasks.put(effectiveId, task); 
    268268 
    269269            for (ITaskInstance childInstance : children) { 
     
    332332        IEventTarget eventTarget = targets.get(targetId); 
    333333        if (eventTarget == null) { 
    334             eventTarget = determineTarget(type, targetId, furtherInfo); 
     334            eventTarget = new DummyGUIElement(targetId); 
    335335            targets.put(targetId, eventTarget); 
    336336        } 
     337         
    337338        IEventType eventType = determineType(type, furtherInfo); 
    338339         
    339340        return new Event(eventType, eventTarget); 
    340     } 
    341  
    342     /** 
    343      * <p> 
    344      * </p> 
    345      * 
    346      * @param type 
    347      * @param id 
    348      * @param enteredText 
    349      * @return 
    350      */ 
    351     private IEventTarget determineTarget(String type, String id, String enteredText) { 
    352         if ("TextInput".equals(type) && enteredText != null) { 
    353             return new DummyTextField(enteredText); 
    354         } 
    355         else { 
    356             return new DummyGUIElement(id); 
    357         } 
    358341    } 
    359342 
     
    367350     */ 
    368351    private IEventType determineType(String type, String enteredText) { 
    369         if ("TextInput".equals(type) && enteredText != null) { 
     352        if ("TextInput".equals(type)) { 
    370353            return new TextInput(enteredText, new ArrayList<Event>()); 
    371354        } 
     
    375358    } 
    376359 
     360    /** 
     361     * 
     362     */ 
     363    private void correctTargets(ITaskInstanceList taskInstanceList) { 
     364        Set<IEventTarget> textInputTargets = new HashSet<IEventTarget>(); 
     365         
     366        for (ITaskInstance instance : taskInstanceList) { 
     367            getTextInputTargets(instance, textInputTargets); 
     368        } 
     369         
     370        Map<IEventTarget, IEventTarget> replacements = new HashMap<IEventTarget, IEventTarget>(); 
     371         
     372        for (IEventTarget oldTarget : textInputTargets) { 
     373            replacements.put(oldTarget, new DummyTextField(oldTarget.toString())); 
     374        } 
     375         
     376        for (int i = 0; i < taskInstanceList.size(); i++) { 
     377            taskBuilder.setTaskInstance 
     378                (taskInstanceList, i, replaceTargets(taskInstanceList.get(i), replacements)); 
     379        } 
     380         
     381    } 
     382 
     383    /** 
     384     * 
     385     */ 
     386    private void getTextInputTargets(ITaskInstance instance, Set<IEventTarget> textInputTargets) { 
     387        if (instance instanceof ISequenceInstance) { 
     388            for (ITaskInstance child : (ISequenceInstance) instance) { 
     389                getTextInputTargets(child, textInputTargets); 
     390            } 
     391        } 
     392        else if (instance instanceof ISelectionInstance) { 
     393            getTextInputTargets(((ISelectionInstance) instance).getChild(), textInputTargets); 
     394        } 
     395        else if (instance instanceof IIterationInstance) { 
     396            for (ITaskInstance child : (IIterationInstance) instance) { 
     397                getTextInputTargets(child, textInputTargets); 
     398            } 
     399        } 
     400        else if (instance instanceof IOptionalInstance) { 
     401            getTextInputTargets(((IOptionalInstance) instance).getChild(), textInputTargets); 
     402        } 
     403        else if ((instance instanceof IEventTaskInstance) && 
     404                 (((IEventTaskInstance) instance).getEvent().getType() instanceof TextInput)) 
     405        { 
     406            textInputTargets.add(((IEventTaskInstance) instance).getEvent().getTarget()); 
     407        } 
     408    } 
     409 
     410    /** 
     411     * 
     412     */ 
     413    private ITaskInstance replaceTargets(ITaskInstance                   instance, 
     414                                         Map<IEventTarget, IEventTarget> replacements) 
     415    { 
     416        ITaskInstance replacement = instance; 
     417        if (instance instanceof ITaskInstanceList) { 
     418            for (int i = 0; i < ((ITaskInstanceList) instance).size(); i++) { 
     419                taskBuilder.setTaskInstance 
     420                    ((ITaskInstanceList) instance, i, 
     421                     replaceTargets(((ITaskInstanceList) instance).get(i), replacements)); 
     422            } 
     423        } 
     424        else if (instance instanceof ISelectionInstance) { 
     425            ISelectionInstance selInst = (ISelectionInstance) instance; 
     426            taskBuilder.setChild(selInst, replaceTargets(selInst.getChild(), replacements)); 
     427        } 
     428        else if (instance instanceof IOptionalInstance) { 
     429            IOptionalInstance optInst = (IOptionalInstance) instance; 
     430            taskBuilder.setChild(optInst, replaceTargets(optInst.getChild(), replacements)); 
     431        } 
     432        else if ((instance instanceof IEventTaskInstance) && 
     433                 (replacements.containsKey(((IEventTaskInstance) instance).getEvent().getTarget()))) 
     434        { 
     435            Event origEvent = ((IEventTaskInstance) instance).getEvent(); 
     436            replacement = taskFactory.createNewTaskInstance 
     437                (((IEventTaskInstance) instance).getEventTask(), 
     438                 new Event(origEvent.getType(), replacements.get(origEvent.getTarget()))); 
     439        } 
     440         
     441        return replacement; 
     442    } 
     443 
    377444} 
Note: See TracChangeset for help on using the changeset viewer.