package org.ovirt.engine.core.vdsbroker.monitoring;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VDS;
public class MultipleServicesMonitoringStrategy implements MonitoringStrategy {
List<MonitoringStrategy> strategies = new ArrayList<>();
public MultipleServicesMonitoringStrategy() {
}
public void addMonitoringStrategy( MonitoringStrategy monitoringStrategy ) {
strategies.add(monitoringStrategy);
}
@Override
public void processHardwareCapabilities(VDS vds) {
for ( MonitoringStrategy monitoringStrategy : strategies ) {
monitoringStrategy.processHardwareCapabilities(vds);
}
}
@Override
public void processSoftwareCapabilities(VDS vds) {
for ( MonitoringStrategy monitoringStrategy : strategies ) {
monitoringStrategy.processSoftwareCapabilities(vds);
}
}
@Override
public boolean canMoveToMaintenance(VDS vds) {
// In this case, if all the services can move the VDS to maintenance then we return true
for ( MonitoringStrategy monitoringStrategy : strategies ) {
if (!monitoringStrategy.canMoveToMaintenance(vds)) {
return false;
}
}
return true;
}
@Override
public boolean isMonitoringNeeded(VDS vds) {
// In this case, if one of the services needs monitoring then we return true
for ( MonitoringStrategy monitoringStrategy : strategies ) {
if (monitoringStrategy.isMonitoringNeeded(vds)) {
return true;
}
}
return false;
}
@Override
public boolean processHardwareCapabilitiesNeeded(VDS oldVds, VDS newVds) {
// In this case, if one of the services needs hardware capabilities processing then we return true
for ( MonitoringStrategy monitoringStrategy : strategies ) {
if (monitoringStrategy.processHardwareCapabilitiesNeeded(oldVds, newVds)) {
return true;
}
}
return false;
}
@Override
public boolean isPowerManagementSupported() {
for (MonitoringStrategy monitoringStrategy : strategies) {
if (monitoringStrategy.isPowerManagementSupported()) {
return true;
}
}
return false;
}
}