package org.ourgrid.system.condition; import java.util.Collection; import org.ourgrid.broker.status.PeerStatusInfo; import org.ourgrid.system.units.BrokerUnit; public class BrokerSetPeersCondition implements Condition { private final BrokerUnit brokerUnit; private final int expectedNumPeers; private final boolean returnOnlyWhenPeersAlive; private int actualNumPeers; private boolean allAlive; public BrokerSetPeersCondition( BrokerUnit brokerUnit, int numPeers, boolean returnOnlyWhenPeersAlive ) { this.brokerUnit = brokerUnit; this.expectedNumPeers = numPeers; this.returnOnlyWhenPeersAlive = returnOnlyWhenPeersAlive; this.actualNumPeers = -1; this.allAlive = false; } public boolean isConditionMet() throws Exception { Collection<PeerStatusInfo> peers = brokerUnit.getPeers(); actualNumPeers = peers.size(); if ( actualNumPeers == expectedNumPeers ) { if ( returnOnlyWhenPeersAlive ) { for ( PeerStatusInfo entry : peers ) { if ( entry.isDown() ) { allAlive = false; return false; } } allAlive = true; return true; } return true; } return false; } public String detailMessage() { return "Number of peers expected: " + expectedNumPeers + ", actual: " + actualNumPeers + ", all alive: " + allAlive; } }