Ignore:
Timestamp:
08/28/12 10:42:56 (12 years ago)
Author:
sherbold
Message:
  • modified adding of assertions to work with GUI models. As a side effect, it is currently impossible to add assertions to sequences whose event targets are not based on a GUI model
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/quest-ui-swt/src/main/java/de/ugoe/cs/quest/ui/swt/InsertTextEquals.java

    r655 r659  
     1 
    12package de.ugoe.cs.quest.ui.swt; 
    23 
    3 import java.util.SortedSet; 
     4import java.util.List; 
    45 
    56import org.eclipse.swt.widgets.Composite; 
     
    1415 
    1516import de.ugoe.cs.quest.assertions.TextEqualsAssertEventType; 
     17import de.ugoe.cs.quest.assertions.TextEqualsReplay; 
    1618import de.ugoe.cs.quest.eventcore.Event; 
    17 import de.ugoe.cs.util.ArrayTools; 
     19import de.ugoe.cs.quest.eventcore.IEventTarget; 
     20import de.ugoe.cs.quest.eventcore.guimodel.GUIModel; 
     21import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement; 
    1822 
    1923import org.eclipse.swt.events.SelectionAdapter; 
     
    2226public class InsertTextEquals extends AbstractInsertEventComposite { 
    2327    private Text expectedText; 
    24     private Tree targetTree; 
    25     private Text targetText; 
     28    private Tree guiTree; 
    2629 
    2730    /** 
     
    3134     * @param style 
    3235     */ 
    33     public InsertTextEquals(Composite parent, int style, SortedSet<String> targets) { 
    34         super(parent, style, targets); 
     36    public InsertTextEquals(Composite parent, int style, GUIModel guiModel) { 
     37        super(parent, style, guiModel); 
    3538        setLayout(new GridLayout(3, false)); 
    3639 
     
    4245        expectedText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); 
    4346 
    44         Label lblTargetWidget = new Label(this, SWT.NONE); 
    45         lblTargetWidget.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 
    46         lblTargetWidget.setText("Target Widget:"); 
    47  
    48         targetText = new Text(this, SWT.BORDER); 
    49         targetText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); 
    50         new Label(this, SWT.NONE); 
    51  
    52         targetTree = new Tree(this, SWT.BORDER); 
    53         targetTree.addSelectionListener(new SelectionAdapter() { 
    54             @Override 
    55             public void widgetSelected(SelectionEvent e) { 
    56                 TreeItem[] selection = targetTree.getSelection(); 
    57                 if (selection.length == 1) { 
    58                     TreeItem item = selection[0]; 
    59                     String targetString = item.getText(); 
    60                     item = item.getParentItem(); 
    61                     while (item != null) { 
    62                         // TODO the "." is hard coded for the JFCMonitor. should be flexible 
    63                         targetString = item.getText() + "." + targetString; 
    64                         item = item.getParentItem(); 
    65                     } 
    66                     targetText.setText(targetString); 
    67                 } 
    68             } 
    69         }); 
    70         targetTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); 
    71         buildTargetTree(); 
     47        guiTree = new Tree(this, SWT.BORDER); 
     48        guiTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); 
     49        buildGuiTree(); 
    7250        new Label(this, SWT.NONE); 
    7351 
     
    7654            @Override 
    7755            public void widgetSelected(SelectionEvent e) { 
    78                 expandAll(targetTree, true); 
     56                expandAll(guiTree, true); 
    7957            } 
    8058        }); 
     
    8563            @Override 
    8664            public void widgetSelected(SelectionEvent e) { 
    87                 expandAll(targetTree, false); 
     65                expandAll(guiTree, false); 
    8866            } 
    8967        }); 
     
    9977    @Override 
    10078    public Event getEvent() { 
    101         // TODO make compatible to new event core 
    102         /* 
    103          * IEventTarget target = targetText.getText(); TextEqualsReplay replay = new 
    104          * TextEqualsReplay(expectedText.getText(), target); 
    105          */ 
    106         Event event = new Event(new TextEqualsAssertEventType()); 
    107         /* 
    108          * event.setTarget(target); event.addReplayable(replay); 
    109          */ 
     79        // TODO possibly display error if no target is selected 
     80        TreeItem[] selection = guiTree.getSelection(); 
     81        IEventTarget target = null; 
     82        TextEqualsReplay replay = null; 
     83        if (selection.length == 1) { 
     84            target = (IEventTarget) selection[0].getData(); 
     85            replay = new TextEqualsReplay(expectedText.getText(), target.toString()); 
     86        } 
     87 
     88        Event event = new Event(new TextEqualsAssertEventType(), target); 
     89 
     90        event.setTarget(target); 
     91        if (replay != null) { 
     92            event.addReplayable(replay); 
     93        } 
     94 
    11095        return event; 
    11196    } 
    11297 
    113     private void buildTargetTree() { 
    114         for (String target : targets) { 
    115             TreeItem currentParent = null; 
    116             TreeItem[] currentItems = targetTree.getItems(); 
     98    private void buildGuiTree() { 
     99        for (IGUIElement element : guiModel.getRootElements()) { 
     100            TreeItem child = new TreeItem(guiTree, SWT.NULL); 
     101            child.setText(element.toString()); 
     102            child.setData(element); 
     103            buildGuiTree(child, guiModel.getChildren(element)); 
     104        } 
     105    } 
    117106 
    118             // TODO needs rule for target splitting. currently its hard coded for JFCEvent targets. 
    119             String[] targetParts = target.split("\\.\\["); 
    120             for (String targetPart : targetParts) { 
    121                 String[] currentTexts = new String[currentItems.length]; 
    122                 for (int i = 0; i < currentItems.length; i++) { 
    123                     currentTexts[i] = currentItems[i].getText(); 
    124                 } 
    125                 if (currentParent != null) { 
    126                     targetPart = "[" + targetPart; 
    127                 } 
    128                 int index = ArrayTools.findIndex(currentTexts, targetPart); 
    129                 if (index >= 0) { 
    130                     currentParent = currentItems[index]; 
    131                 } 
    132                 else { 
    133                     if (currentParent == null) { 
    134                         currentParent = new TreeItem(targetTree, SWT.NULL); 
    135                         currentParent.setText(targetPart); 
    136                     } 
    137                     else { 
    138                         currentParent = new TreeItem(currentParent, SWT.NULL); 
    139                         currentParent.setText(targetPart); 
    140                     } 
    141                 } 
    142                 currentItems = currentParent.getItems(); 
    143             } 
     107    private void buildGuiTree(TreeItem currentParent, List<IGUIElement> elements) { 
     108        for (IGUIElement element : elements) { 
     109            TreeItem child = new TreeItem(currentParent, SWT.NULL); 
     110            child.setText(element.toString()); 
     111            child.setData(element); 
     112            buildGuiTree(child, guiModel.getChildren(element)); 
    144113        } 
    145  
    146114    } 
    147115 
Note: See TracChangeset for help on using the changeset viewer.