/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.runtime.swt.internal.finder.matchers;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.widgets.Widget;
import com.windowtester.runtime.locator.IWidgetMatcher;
import com.windowtester.swt.WidgetLocatorService;
/**
* This class is deprecated pending further investigation.
*
* Use {@link SWTHierarchyMatcher} instead.
*
* @author Phil Quitslund
* @deprecated
*
*/
public class IndexMatcher2 implements IWidgetMatcher {
// public static IndexMatcher2 create(IWidgetMatcher parentCriteria, int index) {
// return new IndexMatcher2(parentCriteria, index);
// }
//TODO: refactor to use a compound matcher!
// --> new CompoundMatcher(childCrit, new CompoundMatcher(parentCrit, indexCheckingCrit));
// --> new CompoundMatcher(new HierarchyMatcher(..,..), indexCheckingCrit);
private final int _expectedIndex;
//private Object _parent;
private final IWidgetMatcher _childCriteria;
private final IWidgetMatcher _parentCriteria;
public IndexMatcher2(IWidgetMatcher childCriteria, int index, IWidgetMatcher parentCriteria) {
_childCriteria = childCriteria;
_expectedIndex = index;
_parentCriteria = parentCriteria;
}
public boolean matches(Object widget) {
if (!_childCriteria.matches(widget))
return false;
return _parentCriteria.matches(getParent(widget)) && indexMatches(widget);
}
public Object getParent(Object widget) {
return new WidgetLocatorService().getParent((Widget)widget);
}
private boolean indexMatches(Object widget) {
List matches = getMatchesInParentsChildren(widget);
int actualIndex = matches.indexOf(widget);
//TODO: handle casts elsewhere...
//int actualIndex = new WidgetLocatorService().getIndex((Widget)child, (Widget)_parent);
return actualIndex == _expectedIndex;
}
public List getMatchesInParentsChildren(Object widget) {
Widget parent = (Widget)getParent(widget);
List children = new WidgetLocatorService().getChildren(parent);
List matches = new ArrayList();
for (Iterator iter = children.iterator(); iter.hasNext();) {
Object child= iter.next();
if (_childCriteria.matches(child))
matches.add(child);
}
return matches;
}
}