package misc;
import java.util.ArrayList;
import java.util.List;
import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
public class AlignmentHelpers extends GUIModel {
/**
*
*/
private static final long serialVersionUID = -2593092958275693133L;
/**
*
* return a common denominator for the provided list of GUI elements, i.e. a
* GUI element, that is part of the parent GUI hiearchy of all GUI elements
* in the list. If there is no common denominator, the method returns null.
*
*/
private static IGUIElement getCommonDenominator(List guiElements) {
IGUIElement commonDenominator = null;
if (guiElements.size() > 0) {
List commonDenominatorPath = new ArrayList();
// create a reference list using the first GUI element
IGUIElement guiElement = guiElements.get(0);
while (guiElement != null) {
// We can use every type
// if (guiElementMatchesConsideredTypes(guiElement)) {
commonDenominatorPath.add(0, guiElement);
// }
guiElement = guiElement.getParent();
}
if (commonDenominatorPath.size() == 0) {
return null;
}
// for each other GUI element, check the reference list for the
// first element in the
// path, that is not common to the current one, and delete it as
// well as it subsequent
// siblings
List currentPath = new ArrayList();
for (int i = 1; i < guiElements.size(); i++) {
currentPath.clear();
guiElement = guiElements.get(i);
while (guiElement != null) {
// if (guiElementMatchesConsideredTypes(guiElement)) {
currentPath.add(0, guiElement);
// }
guiElement = guiElement.getParent();
}
// determine the index of the first unequal path element
int index = 0;
while ((index < commonDenominatorPath.size())
&& (index < currentPath.size())
&& commonDenominatorPath.get(index).equals(
currentPath.get(index))) {
index++;
}
// remove all elements from the common denonimator path, that do
// not match
while (index < commonDenominatorPath.size()) {
commonDenominatorPath.remove(index);
}
}
if (commonDenominatorPath.size() > 0) {
commonDenominator = commonDenominatorPath
.get(commonDenominatorPath.size() - 1);
}
}
return commonDenominator;
}
public static int distanceBetween(IGUIElement first, IGUIElement second) {
int hopcount1 = 0;
int hopcount2 = 0;
List tmp = new ArrayList();
tmp.add(first);
tmp.add(second);
IGUIElement commonDenominator = getCommonDenominator(tmp);
while(!(first.equals(commonDenominator))) {
first = first.getParent();
hopcount1++;
}
while(!(second.equals(commonDenominator))) {
second = second.getParent();
hopcount2++;
}
return hopcount1 + hopcount2;
}
}