Optional findChargeRange()

in service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/schedule/ScheduledChargesService.java [119:146]


  Optional<ChargeRange> findChargeRange(final String productIdentifier, final ChargeDefinition chargeDefinition) {
    if ((chargeDefinition.getForSegmentSet() == null) ||
        (chargeDefinition.getFromSegment() == null) ||
        (chargeDefinition.getToSegment() == null))
      return Optional.empty();

    final List<BalanceSegmentEntity> segmentSet = balanceSegmentRepository.findByProductIdentifierAndSegmentSetIdentifier(productIdentifier, chargeDefinition.getForSegmentSet())
        .sorted(Comparator.comparing(BalanceSegmentEntity::getLowerBound))
        .collect(Collectors.toList());

    final Map<String, Segment> segments = Stream.iterate(0, i -> i + 1).limit(segmentSet.size())
        .map(i -> new Segment(
            segmentSet.get(i).getSegmentIdentifier(),
            segmentSet.get(i).getLowerBound(),
            Optional.ofNullable(i + 1 < segmentSet.size() ?
                segmentSet.get(i + 1).getLowerBound() :
                null)
        ))
        .collect(Collectors.toMap(x -> x.identifier, x -> x));


    final Optional<Segment> fromSegment = Optional.ofNullable(segments.get(chargeDefinition.getFromSegment()));
    final Optional<Segment> toSegment = Optional.ofNullable(segments.get(chargeDefinition.getToSegment()));
    if (!fromSegment.isPresent() || !toSegment.isPresent())
      return Optional.empty();

    return Optional.of(new ChargeRange(fromSegment.get().getLowerBound(), toSegment.get().getUpperBound()));
  }