Java tutorial
// Copyright (C) 2018 The Android Open Source Project // // Licensed 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 com.googlesource.gerrit.plugins.auditsl4j; import com.google.common.base.Stopwatch; import java.time.Duration; import java.util.function.Supplier; public interface WaitForCondition { public default Duration waitTimeout() { return Duration.ofSeconds(5); } public default Duration waitInterval() { return Duration.ofMillis(100); } public default boolean waitFor(Supplier<Boolean> condition) { Stopwatch stopwatch = Stopwatch.createStarted(); try { Duration maxWait = waitTimeout(); Duration sleep = waitInterval(); boolean conditionSucceeded = condition.get(); while (!conditionSucceeded && stopwatch.elapsed().compareTo(maxWait) < 0) { try { Thread.sleep(sleep.toMillis()); } catch (InterruptedException e) { } conditionSucceeded = condition.get(); } return conditionSucceeded; } finally { stopwatch.stop(); } } }