| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with this |
| * work for additional information regarding copyright ownership. The ASF |
| * 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.apache.sling.testing.clients.util.poller; |
| |
| /** |
| * @deprecated use {@link Polling} instead. |
| * @see Polling for a better way to implement polling |
| */ |
| @Deprecated |
| public abstract class AbstractPoller implements Poller { |
| |
| private final long waitInterval; |
| private final long waitCount; |
| |
| /** |
| * Convenience method to execute a generic call and do polling until a condition is met |
| * The user must implement the {@link Poller#call()} and {@link Poller#condition()} methods |
| * @param waitInterval Number of milliseconds to wait between polls |
| * @param waitCount Number of wait intervals |
| */ |
| public AbstractPoller(long waitInterval, long waitCount) { |
| this.waitInterval = waitInterval; |
| this.waitCount = waitCount; |
| } |
| |
| /** |
| * Calls the {@link Poller#call()} once and then calls {@link Poller#condition()} until it returns true |
| * The method waits AbstractPoller#waitInterval milliseconds between calls to {@link Poller#condition()} |
| * A maximum of AbstractPoller#waitCount intervals are checked |
| * @return true if the condition is met after waiting a maximum of AbstractPoller#waitCount intervals, false otherwise |
| * @throws InterruptedException to mark this operation as "waiting" |
| */ |
| public boolean callAndWait() throws InterruptedException { |
| if (!call()) return false; |
| for (int i=0; i<waitCount; i++) { |
| if (condition()) return true; |
| Thread.sleep(waitInterval); |
| } |
| return false; |
| } |
| |
| /** |
| * Calls the @see: Poller#call() and then calls {@link Poller#condition()} until it returns true |
| * The Poller#call() method is called in each wait interval, before the Poller#condition(). |
| * The method waits AbstractPoller#waitInterval milliseconds between calls to {@link Poller#condition()} |
| * A maximum of AbstractPoller#waitCount intervals are checked |
| * @return true if the condition is met after waiting a maximum of AbstractPoller#waitCount intervals, false otherwise |
| * @throws InterruptedException to mark this operation as "waiting" |
| */ |
| public boolean callUntilCondition() throws InterruptedException { |
| if (!call()) return false; |
| if (condition()) return true; |
| for (int i = 0; i < waitCount; i++) { |
| Thread.sleep(waitInterval); |
| if (!call()) return false; |
| if (condition()) return true; |
| } |
| return false; |
| } |
| } |