org.openqa.selenium.lift.find.BaseFinder Maven / Gradle / Ivy
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium.lift.find;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Base class for {@link Finder}s. These allow the creation of a specification to be applied to
* objects of type T, to identify and return a Collection of any contained objects of type S.
*/
public abstract class BaseFinder implements Finder {
protected List> matchers = new ArrayList<>();
public Collection findFrom(T context) {
Collection found = extractFrom(context);
if (matchers.isEmpty()) {
return found;
}
return allMatching(matchers, found);
}
public Finder with(Matcher matcher) {
this.matchers.add(matcher);
return this;
}
public void describeTo(Description description) {
describeTargetTo(description);
for (Matcher> matcher : matchers) {
if (matcher != null) {
description.appendText(" with ");
matcher.describeTo(description);
}
}
}
protected abstract Collection extractFrom(T context);
protected abstract void describeTargetTo(Description description);
protected Collection allMatching(List> matchers, Collection items) {
Collection temp = new ArrayList<>();
for (S item : items) {
if (allOf(matchers).matches(item)) {
temp.add(item);
}
}
return temp;
}
private Matcher allOf(final List> matcherList) {
return new TypeSafeMatcher() {
@Override
public boolean matchesSafely(S item) {
for (Matcher matcher : matcherList) {
if (!matcher.matches(item)) {
return false;
}
}
return true;
}
public void describeTo(Description description) {
for (Matcher matcher : matcherList) {
matcher.describeTo(description);
}
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy