source: trunk/autoquest-plugin-alignment/src/main/java/misc/AlignmentHelpers.java @ 1446

Last change on this file since 1446 was 1329, checked in by rkrimmel, 11 years ago

New Class Alignment Helpers with methods to calculate distance of two nodes in the GuiModel?-Tree

File size: 2.9 KB
Line 
1package misc;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
7import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
8
9
10public class AlignmentHelpers extends GUIModel {
11       
12
13       
14        /**
15         *
16         */
17        private static final long serialVersionUID = -2593092958275693133L;
18
19        /**
20         * <p>
21         * return a common denominator for the provided list of GUI elements, i.e. a
22         * GUI element, that is part of the parent GUI hiearchy of all GUI elements
23         * in the list. If there is no common denominator, the method returns null.
24         * </p>
25         */
26        private static IGUIElement getCommonDenominator(List<IGUIElement> guiElements) {
27                IGUIElement commonDenominator = null;
28
29                if (guiElements.size() > 0) {
30                        List<IGUIElement> commonDenominatorPath = new ArrayList<IGUIElement>();
31
32                        // create a reference list using the first GUI element
33                        IGUIElement guiElement = guiElements.get(0);
34                        while (guiElement != null) {
35                                // We can use every type
36                                // if (guiElementMatchesConsideredTypes(guiElement)) {
37                                commonDenominatorPath.add(0, guiElement);
38                                // }
39                                guiElement = guiElement.getParent();
40                        }
41
42                        if (commonDenominatorPath.size() == 0) {
43                                return null;
44                        }
45
46                        // for each other GUI element, check the reference list for the
47                        // first element in the
48                        // path, that is not common to the current one, and delete it as
49                        // well as it subsequent
50                        // siblings
51                        List<IGUIElement> currentPath = new ArrayList<IGUIElement>();
52                        for (int i = 1; i < guiElements.size(); i++) {
53                                currentPath.clear();
54                                guiElement = guiElements.get(i);
55                                while (guiElement != null) {
56                                        // if (guiElementMatchesConsideredTypes(guiElement)) {
57                                    currentPath.add(0, guiElement);
58                                        // }
59                                        guiElement = guiElement.getParent();
60                                }
61
62                                // determine the index of the first unequal path element
63                                int index = 0;
64                                while ((index < commonDenominatorPath.size())
65                                                && (index < currentPath.size())
66                                                && commonDenominatorPath.get(index).equals(
67                                                                currentPath.get(index))) {
68                                        index++;
69                                }
70
71                                // remove all elements from the common denonimator path, that do
72                                // not match
73                                while (index < commonDenominatorPath.size()) {
74                                        commonDenominatorPath.remove(index);
75                                }
76                        }
77
78                        if (commonDenominatorPath.size() > 0) {
79                                commonDenominator = commonDenominatorPath
80                                                .get(commonDenominatorPath.size() - 1);
81                        }
82                }
83                return commonDenominator;
84        }
85
86        public static int distanceBetween(IGUIElement first, IGUIElement second) {
87
88                int hopcount1 = 0;
89                int hopcount2 = 0;
90                List<IGUIElement> tmp = new ArrayList<IGUIElement>();
91                tmp.add(first);
92                tmp.add(second);
93                IGUIElement commonDenominator = getCommonDenominator(tmp);
94               
95                while(!(first.equals(commonDenominator))) {
96                        first = first.getParent();
97                        hopcount1++;
98                }
99               
100                while(!(second.equals(commonDenominator))) {
101                        second = second.getParent();
102                        hopcount2++;
103                }
104
105                return hopcount1 + hopcount2;
106        }
107
108}
Note: See TracBrowser for help on using the repository browser.