001/* 002 * (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Sun Seng David TAN <stan@nuxeo.com> 016 */ 017package org.nuxeo.functionaltests; 018 019import org.apache.commons.logging.Log; 020import org.apache.commons.logging.LogFactory; 021 022public abstract class WaitUntil { 023 024 public static final Log log = LogFactory.getLog(WaitUntil.class); 025 026 long timeout; 027 028 public WaitUntil(long timeout) { 029 this.timeout = timeout; 030 } 031 032 public WaitUntil() { 033 // default value 2 secs 034 timeout = 2000; 035 } 036 037 public void waitUntil() { 038 long starttime = System.currentTimeMillis(); 039 Exception lastException = null; 040 041 while (starttime > System.currentTimeMillis() - timeout) { 042 try { 043 if (condition()) { 044 return; 045 } 046 Thread.sleep(100); 047 lastException = null; 048 } catch (Exception e) { 049 log.warn("An exception while testing condition", e); 050 lastException = e; 051 } 052 053 } 054 throw new RuntimeException("Couldn't find element", lastException); 055 } 056 057 public abstract boolean condition(); 058}