Ignore:
Timestamp:
06/01/15 10:18:50 (9 years ago)
Author:
dmay
Message:

command that generates jacareto indices for a gui model without requiring the parser anymore

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-plugin-jfc/src/main/java/de/ugoe/cs/autoquest/plugin/jfc/commands/CMDgenerateAltIndex.java

    r1946 r1956  
    1515package de.ugoe.cs.autoquest.plugin.jfc.commands; 
    1616 
    17 import java.io.File; 
    1817import java.nio.charset.Charset; 
    1918import java.nio.file.Files; 
     
    2120import java.util.Collection; 
    2221import java.util.HashMap; 
     22import java.util.Iterator; 
    2323import java.util.List; 
    24 import java.util.logging.Level; 
    2524 
    2625import de.ugoe.cs.autoquest.CommandHelpers; 
     26import de.ugoe.cs.autoquest.SequenceInstanceOf; 
    2727import de.ugoe.cs.autoquest.eventcore.Event; 
    2828import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel; 
    2929import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement; 
    30 import de.ugoe.cs.autoquest.plugin.jfc.JFCSimplifiedLogParser; 
    3130import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCGUIElement; 
    3231import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCGUIElementSpec; 
     
    3433import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCMenuButton; 
    3534import de.ugoe.cs.util.console.Command; 
    36 import de.ugoe.cs.util.console.Console; 
    3735import de.ugoe.cs.util.console.GlobalDataContainer; 
    3836 
     
    4240 * </p> 
    4341 *  
    44  * @author Steffen Herbold 
     42 * @author Daniel May 
    4543 */ 
    46 public class CMDparseJFCDirwithJacaretoIndices implements Command { 
     44public class CMDgenerateAltIndex implements Command { 
    4745 
    4846    private List<String> menuList; 
     
    5351     * @see de.ugoe.cs.util.console.Command#run(java.util.List) 
    5452     */ 
     53    @SuppressWarnings("unchecked") 
    5554    @Override 
    5655    public void run(List<Object> parameters) { 
    57         String path; 
    5856        String sequencesName = "sequences"; 
    5957 
    6058        try { 
    61             path = (String) parameters.get(0); 
     59            sequencesName = (String) parameters.get(0); 
    6260            if (parameters.size() >= 2) { 
    63                 sequencesName = (String) parameters.get(1); 
    64             } 
    65             if (parameters.size() >= 3) { 
    6661                menuList = 
    67                     Files.readAllLines(Paths.get((String) parameters.get(2)), 
     62                    Files.readAllLines(Paths.get((String) parameters.get(1)), 
    6863                                       Charset.defaultCharset()); 
    6964            } 
    70  
    7165        } 
    7266        catch (Exception e) { 
     
    7468        } 
    7569 
    76         File folder = new File(path); 
    77         if (!folder.isDirectory()) { 
    78             Console.printerrln(path + " is not a directory"); 
     70        Collection<List<Event>> sequences = null; 
     71        Object dataObject = GlobalDataContainer.getInstance().getData(sequencesName); 
     72        if (dataObject == null) { 
     73            CommandHelpers.objectNotFoundMessage(sequencesName); 
    7974            return; 
    8075        } 
    81  
    82         JFCSimplifiedLogParser parser = new JFCSimplifiedLogParser(); 
    83  
    84         String absolutPath = folder.getAbsolutePath(); 
    85         for (String filename : folder.list()) { 
    86             String source = absolutPath + File.separator + filename; 
    87             Console.traceln(Level.INFO, "Processing file: " + source); 
    88  
    89             try { 
    90                 parser.parseFile(source); 
    91             } 
    92             catch (Exception e) { 
    93                 Console.printerrln("Could not parse " + source + ": " + e.getMessage()); 
    94             } 
    95         } 
    96  
    97         Collection<List<Event>> sequences = parser.getSequences(); 
    98  
    99         GUIModel targets = parser.getGuiModel(); 
    100         targets.condenseModel(); 
    101  
    102         // TODO: throw our stuff before this 
    103          
    104         generateJacaretoIndices(targets.getRootElements(), targets); 
    105          
    106         // TODO: iterate over all sequences 
    107         // TODO: iterate over all events in the sequences 
    108         // TODO: for each event: find representing node in GUI element 
    109         // TODO: then update altIndex 
    110  
    111         if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 
    112             CommandHelpers.dataOverwritten(sequencesName); 
    113         } 
    114  
    115         if (GlobalDataContainer.getInstance().addData(sequencesName + "_targets", targets)) { 
    116             CommandHelpers.dataOverwritten(sequencesName + "_targets"); 
     76        if (!SequenceInstanceOf.isCollectionOfSequences(dataObject)) { 
     77            CommandHelpers.objectNotType(sequencesName, "Collection<List<Event<?>>>"); 
     78            return; 
     79        } 
     80        sequences = (Collection<List<Event>>) dataObject; 
     81        GUIModel model = null; 
     82 
     83        for (List<Event> sequence : sequences) { 
     84            if (model == null) { 
     85                // generate jacareto indices for the GUI model of this sequence 
     86                JFCGUIElement element = (JFCGUIElement) sequence.get(0).getTarget(); 
     87                model = element.getGUIModel(); 
     88                generateJacaretoIndices(model.getRootElements(), model); 
     89            } 
     90            else { 
     91                for (Iterator<Event> eventIter = sequence.iterator(); eventIter.hasNext();) { 
     92                    // find and set the alt index for every target 
     93                    IGUIElement target = (IGUIElement) eventIter.next().getTarget(); 
     94                    findAltIndex(target, model.getRootElements(), model); 
     95                } 
     96            } 
     97        } 
     98    } 
     99 
     100    private void findAltIndex(IGUIElement target, List<IGUIElement> elements, GUIModel model) { 
     101        int altIndex = ((JFCGUIElementSpec) target.getSpecification()).getAltIndex(); 
     102 
     103        if (altIndex < 0) { 
     104            for (IGUIElement child : elements) { 
     105                if (target.equals(child)) { 
     106                    int childAltIndex = 
     107                        ((JFCGUIElementSpec) child.getSpecification()).getAltIndex(); 
     108 
     109                    if (childAltIndex > -1) { 
     110                        ((JFCGUIElementSpec) target.getSpecification()).setAltIndex(childAltIndex); 
     111                    } 
     112                    else { 
     113                        findAltIndex(target, model.getChildren(child), model); 
     114                    } 
     115                } 
     116                else { 
     117                    findAltIndex(target, model.getChildren(child), model); 
     118                } 
     119            } 
    117120        } 
    118121    } 
Note: See TracChangeset for help on using the changeset viewer.