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