public CloudOffer getOfferImmediateLowerAvailabilityOfSameProviderSimilarPerformance( String modulename, String cloudOffer) { List<CloudOffer> offers = getCloudOffersForModule(modulename); CloudOffer currentOffer = getCloudCharacteristicsFromList(offers, cloudOffer); CloudOffer potentialWorse = null; for (CloudOffer offer : offers) { // assumed that are ordered in reverse // order if (offer.getAvailability() < currentOffer.getAvailability()) { if (!(offer.getProviderName().equals(currentOffer.getProviderName()))) { if (potentialWorse == null) { // there was not found any yet potentialWorse = offer; } else { // An alternative offer was already found, now check by // its performance (the less difference) if (Math.abs(currentOffer.getPerformance() - offer.getPerformance()) < (Math.abs(currentOffer.getPerformance() - potentialWorse.getPerformance()))) { // Closest difference potentialWorse = offer; } } } } } return potentialWorse; }
public boolean existsAlternativeCloudProviderForModuleWithLowerAvailability( String modulename, String cloudOffer) { List<CloudOffer> offers = getCloudOffersForModule(modulename); CloudOffer currentOffer = getCloudCharacteristicsFromList(offers, cloudOffer); for (CloudOffer offer : offers) { // series of conditions in AND that I prefer to nest for visibility if (offer.getAvailability() < currentOffer.getAvailability()) { if (!(offer.getProviderName().equals(currentOffer.getProviderName()))) { return true; } } } return false; }