/******************************************************************************* * Copyright (c) 2009 Tasktop Technologies and others. * 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.tests.ui.util; import org.eclipse.swtbot.swt.finder.SWTBot; import org.eclipse.swtbot.swt.finder.waits.ICondition; /** * a condition that dispatches to multiple delegates. * * @author David Green */ public class CompoundCondition implements ICondition { private ICondition[] conditions; private boolean and; private boolean[] results; public static CompoundCondition and(ICondition... conditions) { return new CompoundCondition(conditions, true); } public static CompoundCondition or(ICondition... conditions) { return new CompoundCondition(conditions, false); } protected CompoundCondition(ICondition[] conditions, boolean and) { if (conditions == null || conditions.length == 0) { throw new IllegalArgumentException(); } this.conditions = conditions; results = new boolean[conditions.length]; this.and = and; } public String getFailureMessage() { String message = ""; for (ICondition c : conditions) { if (message.length() == 0) { message += ", "; message += and ? "AND " : "OR "; } message += c.getFailureMessage(); } return message; } public void init(SWTBot bot) { for (ICondition c : conditions) { c.init(bot); } } public boolean test() throws Exception { int success = 0; for (int x = 0; x < conditions.length; ++x) { ICondition c = conditions[x]; if (c.test()) { results[x] = true; if (!and) { return true; } ++success; } else { results[x] = false; if (and) { return false; } } } return success == conditions.length; } public boolean[] getResults() { return results; } }