Changeset 589 for trunk


Ignore:
Timestamp:
08/23/12 10:42:41 (12 years ago)
Author:
sherbold
Message:
  • started changing the similarity structure of the GUI model. The equality is now absolute (i.e., boolean instead of an int indicating the degree). Also, lists of equally observed name/hash combinations are now stored. There still seem to be mistakes, however, the structural changes to the interfaces warrant a commit.
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIModel.java

    r576 r589  
    88 
    99import java.util.ArrayList; 
     10import java.util.LinkedList; 
    1011import java.util.List; 
    1112 
     
    106107        IGUIElementSpec specToIntegrateElementFor = remainingPath.remove(0); 
    107108         
    108         List<TreeNode> matchingChildren = new ArrayList<TreeNode>(); 
    109         int maximumSimilarity = 0; 
     109        List<TreeNode> matchingChildren = new LinkedList<TreeNode>(); 
    110110         
    111111        if (parentNode.children != null) { 
    112112            for (TreeNode child : parentNode.children) { 
    113                 int similarityLevel = getSimilarityLevel 
    114                     (specToIntegrateElementFor, child.guiElement.getSpecification()); 
    115                  
    116                 if (similarityLevel >= maximumSimilarity) { 
    117                     if (maximumSimilarity == 100) { 
    118                         throw new GUIModelException 
    119                           ("several children of gui element " + parentNode.guiElement + 
    120                            " pretend to fully match specification " + specToIntegrateElementFor); 
    121                     } 
    122                      
    123                     if (maximumSimilarity != similarityLevel) { 
    124                         matchingChildren.clear(); 
    125                         maximumSimilarity = similarityLevel; 
    126                     } 
    127                      
     113                if( specToIntegrateElementFor.getSimilarity(child.guiElement.getSpecification())) { 
    128114                    matchingChildren.add(child); 
    129115                } 
    130116            } 
    131         } 
    132          
    133         // we do not see something as matching if the similarity level is below 80% 
    134         if (maximumSimilarity < 80) { 
    135             matchingChildren.clear(); 
    136117        } 
    137118         
     
    150131         
    151132        if (remainingPath.size() > 0) { 
     133            // TODO update spec here matchingChildren.get(0).guiElement 
     134            matchingChildren.get(0).guiElement.updateSpecification(specToIntegrateElementFor); 
    152135            return integratePath(matchingChildren.get(0), remainingPath, guiElementFactory); 
    153136        } 
    154137        else { 
    155138            return matchingChildren.get(0).guiElement; 
    156         } 
    157     } 
    158  
    159     /** 
    160      * <p> 
    161      * TODO: comment 
    162      * </p> 
    163      * 
    164      * @param spec1 
    165      * @param spec2 
    166      * @return 
    167      * @throws GUIModelException  
    168      */ 
    169     private int getSimilarityLevel(IGUIElementSpec spec1, IGUIElementSpec spec2) 
    170         throws GUIModelException 
    171     { 
    172         if (spec1 == spec2) { 
    173             return 100; 
    174         } 
    175         else if (spec1 != null) { 
    176             int level = spec1.getSimilarity(spec2); 
    177              
    178             if ((level < 0) || (100 < level)) { 
    179                throw new GUIModelException("invalid tree node similarity provided (" + level + 
    180                                            "). Must be between 0 and 100.");  
    181             } 
    182              
    183             return level; 
    184         } 
    185         else { 
    186             return 0; 
    187139        } 
    188140    } 
  • trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElement.java

    r576 r589  
    3232     */ 
    3333    public int hashCode(); 
     34 
     35    public void updateSpecification(IGUIElementSpec specToIntegrateElementFor); 
    3436} 
  • trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElementSpec.java

    r576 r589  
    3333     * @return 
    3434     */ 
    35     public int getSimilarity(IGUIElementSpec otherParameters); 
     35    public boolean getSimilarity(IGUIElementSpec otherParameters); 
    3636 
    3737    /** 
  • trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java

    r577 r589  
    99import de.ugoe.cs.quest.eventcore.guimodel.AbstractDefaultGUIElement; 
    1010import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement; 
     11import de.ugoe.cs.quest.eventcore.guimodel.IGUIElementSpec; 
    1112 
    1213/** 
     
    5960    } 
    6061 
     62    @Override 
     63    public void updateSpecification(IGUIElementSpec specToIntegrateElementFor) { 
     64        // dummy 
     65    } 
     66 
    6167} 
  • trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/guimodel/JFCGUIElement.java

    r588 r589  
    88 
    99import de.ugoe.cs.quest.eventcore.guimodel.AbstractDefaultGUIElement; 
     10import de.ugoe.cs.quest.eventcore.guimodel.IGUIElementSpec; 
    1011 
    1112/** 
     
    7980    } 
    8081 
     82    @Override 
     83    public void updateSpecification(IGUIElementSpec updateSpecification) { 
     84        if( updateSpecification instanceof JFCGUIElementSpec ) { 
     85            specification.setName(((JFCGUIElementSpec) updateSpecification).getName()); 
     86            specification.setElementHash(((JFCGUIElementSpec) updateSpecification).getElementHash()); 
     87        } 
     88    } 
     89 
    8190} 
  • trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/guimodel/JFCGUIElementSpec.java

    r588 r589  
    55// Copyright : Patrick Harms, 2012 
    66package de.ugoe.cs.quest.plugin.jfc.guimodel; 
     7 
     8import java.util.LinkedList; 
     9import java.util.List; 
     10 
     11import org.apache.commons.collections15.CollectionUtils; 
    712 
    813import de.ugoe.cs.quest.eventcore.guimodel.IGUIElementSpec; 
     
    1924 
    2025    /** */ 
    21     private String name = null; 
     26    private List<String> name = new LinkedList<String>(); 
    2227     
    2328    /** */ 
     
    3136     
    3237    /** */ 
    33     private String elementHash = null; 
     38    private List<String> elementHash = new LinkedList<String>(); 
    3439     
    3540    /* (non-Javadoc) 
     
    3742     */ 
    3843    @Override 
    39     public int getSimilarity(IGUIElementSpec other) { 
     44    public boolean getSimilarity(IGUIElementSpec other) { 
    4045        if (this == other) 
    4146        { 
    42             return 100; 
     47            return true; 
    4348        } 
    4449         
    4550        if (!(other instanceof JFCGUIElementSpec)) 
    4651        { 
    47             return 0; 
     52            return false; 
    4853        } 
    4954         
    5055        JFCGUIElementSpec otherSpec = (JFCGUIElementSpec) other; 
    51         int result = 0; 
    52  
    53         if ((type == otherSpec.type) || ((type != null) && (type.equals(otherSpec.type)))) { 
    54             result += 50; 
    55         } 
    56  
    57         if ((icon == otherSpec.icon) || ((icon != null) && (icon.equals(otherSpec.icon)))) { 
    58             result += 10; 
    59         } 
    60  
    61         if (index == otherSpec.index) { 
    62             result += 10; 
    63         } 
    64  
    65         if ((name == otherSpec.name) || ((name != null) && (name.equals(otherSpec.name)))) { 
    66             result += 15; 
    67         } 
    68  
    69         if (elementHash == otherSpec.elementHash || ((elementHash!=null) && elementHash.equals(otherSpec.elementHash))) { 
    70             result += 15; 
     56         
     57        boolean retVal = false; 
     58         
     59        boolean titleEqual = CollectionUtils.containsAny(name, otherSpec.name); 
     60        boolean hashEqual = CollectionUtils.containsAny(elementHash, otherSpec.elementHash); 
     61         
     62        if( type.equals("Class") ) { 
     63            retVal = type.equals(otherSpec.type) && (titleEqual || hashEqual); 
     64        } else { 
     65            retVal = type.equals(otherSpec.type) && index==otherSpec.index && (titleEqual || hashEqual); 
    7166        } 
    7267         
    73         return result; 
     68        return retVal; 
    7469    } 
    7570 
     
    10297     */ 
    10398    public String getName() { 
    104         return name; 
     99        // TODO for now always returns first matched name 
     100        if( name.isEmpty() ) { 
     101            return null; 
     102        } 
     103        return name.get(0); 
    105104    } 
    106105 
     
    130129     */ 
    131130    public String getElementHash() { 
    132         return elementHash; 
     131        // TODO for now always returns the first hash value 
     132        if( elementHash.isEmpty() ) { 
     133            return null; 
     134        } 
     135        return elementHash.get(0); 
    133136    } 
    134137 
     
    137140     */ 
    138141    public void setName(String name) { 
    139         this.name = name; 
     142        if( !this.name.contains(name) && name!=null ) { 
     143            this.name.add(name); 
     144        } 
    140145    } 
    141146 
     
    165170     */ 
    166171    public void setElementHash(String elementHash) { 
    167         this.elementHash = elementHash; 
     172        if( !this.elementHash.contains(elementHash) ) { 
     173            this.elementHash.add(elementHash); 
     174        } 
    168175    } 
    169176 
Note: See TracChangeset for help on using the changeset viewer.