package org.ovirt.engine.core.bll;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.dao.VdsDao;
/**
* Returns true if
* <li>all hosts in cluster has overridden console addresses
* <li>no hosts in cluster has overridden console addresses
* <li>there are no hosts in cluster
* <p>
* Otherwise returns false
*/
public class IsDisplayAddressConsistentInClusterQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private VdsDao vdsDao;
public IsDisplayAddressConsistentInClusterQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
List<VDS> hosts = vdsDao.getAllForCluster(getParameters().getId(), getUserID(), getParameters().isFiltered());
getQueryReturnValue().setReturnValue(!isDisplayAddressPartiallyOverridden(hosts));
}
boolean isDisplayAddressPartiallyOverridden(List<VDS> hosts) {
if (hosts == null) {
return false;
}
boolean foundOverridden = false;
boolean foundDefault = false;
for (VDS host : hosts) {
if (host.getConsoleAddress() == null) {
if (foundOverridden) {
// found both, it means that some are overridden and some not
return true;
}
foundDefault = true;
} else {
if (foundDefault) {
// found both, it means that some are overridden and some not
return true;
}
foundOverridden = true;
}
}
// ok, no conflict found
return false;
}
}