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;
  }