Listing balance segment sets.
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java b/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
index ffe36ac..ac86d39 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
@@ -135,14 +135,23 @@
value = "/products/{productidentifier}/balancesegmentsets/",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE,
- consumes = MediaType.APPLICATION_JSON_VALUE
- )
+ consumes = MediaType.APPLICATION_JSON_VALUE)
@ThrowsException(status = HttpStatus.CONFLICT, exception = ProductInUseException.class)
void createBalanceSegmentSet(
@PathVariable("productidentifier") final String productIdentifier,
final BalanceSegmentSet balanceSegmentSet);
@RequestMapping(
+ value = "/products/{productidentifier}/balancesegmentsets/",
+ method = RequestMethod.GET,
+ produces = MediaType.ALL_VALUE,
+ consumes = MediaType.APPLICATION_JSON_VALUE
+ )
+ @ThrowsException(status = HttpStatus.CONFLICT, exception = ProductInUseException.class)
+ List<BalanceSegmentSet> getAllBalanceSegmentSets(
+ @PathVariable("productidentifier") final String productIdentifier);
+
+ @RequestMapping(
value = "/products/{productidentifier}/balancesegmentsets/{balancesegmentsetidentifier}",
method = RequestMethod.GET,
produces = MediaType.ALL_VALUE,
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java b/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
index 197b3d5..dc9b4ff 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
@@ -25,6 +25,7 @@
import java.math.BigDecimal;
import java.util.Arrays;
+import java.util.List;
/**
* @author Myrle Krantz
@@ -60,9 +61,30 @@
final BalanceSegmentSet changedBalanceSegmentSet = portfolioManager.getBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet.getIdentifier());
Assert.assertEquals(balanceSegmentSet, changedBalanceSegmentSet);
+
+ final BalanceSegmentSet balanceSegmentSet2 = new BalanceSegmentSet();
+ balanceSegmentSet2.setIdentifier(testEnvironment.generateUniqueIdentifer("bss"));
+ balanceSegmentSet2.setSegments(Arrays.asList(
+ BigDecimal.ZERO.setScale(4, BigDecimal.ROUND_HALF_EVEN),
+ BigDecimal.TEN.setScale(4, BigDecimal.ROUND_HALF_EVEN),
+ BigDecimal.valueOf(10_000_0000, 4)));
+ balanceSegmentSet2.setSegmentIdentifiers(Arrays.asList("abc", "def", "ghi"));
+
+ portfolioManager.createBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet2);
+ Assert.assertTrue(this.eventRecorder.wait(EventConstants.POST_BALANCE_SEGMENT_SET, new BalanceSegmentSetEvent(product.getIdentifier(), balanceSegmentSet2.getIdentifier())));
+
+ final List<BalanceSegmentSet> balanceSegmentSets = portfolioManager.getAllBalanceSegmentSets(product.getIdentifier());
+ Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet));
+ Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet2));
+ Assert.assertTrue(balanceSegmentSets.size() == 2);
+
portfolioManager.deleteBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet.getIdentifier());
Assert.assertTrue(this.eventRecorder.wait(EventConstants.DELETE_BALANCE_SEGMENT_SET, new BalanceSegmentSetEvent(product.getIdentifier(), balanceSegmentSet.getIdentifier())));
+ final List<BalanceSegmentSet> balanceSegmentSetsAfterDelete = portfolioManager.getAllBalanceSegmentSets(product.getIdentifier());
+ Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet2));
+ Assert.assertTrue(balanceSegmentSetsAfterDelete.size() == 1);
+
enableProduct(product);
createCase(product.getIdentifier());
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java b/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
index 0a4f903..c66952b 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
@@ -29,4 +29,6 @@
Stream<BalanceSegmentEntity> findByProductIdentifierAndSegmentSetIdentifier(String productIdentifier, String segmentSetIdentifier);
Optional<BalanceSegmentEntity> findByProductIdentifierAndSegmentSetIdentifierAndSegmentIdentifier(String productIdentifier, String segmentSetIdentifier, String segmentIdentifier);
+
+ Stream<BalanceSegmentEntity> findByProductIdentifier(String productIdentifier);
}
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java b/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
index ee558a6..34dfbad 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
@@ -17,11 +17,15 @@
import io.mifos.portfolio.api.v1.domain.BalanceSegmentSet;
import io.mifos.portfolio.service.internal.mapper.BalanceSegmentSetMapper;
+import io.mifos.portfolio.service.internal.repository.BalanceSegmentEntity;
import io.mifos.portfolio.service.internal.repository.BalanceSegmentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* @author Myrle Krantz
@@ -50,4 +54,15 @@
return BalanceSegmentSetMapper.map(balanceSegmentRepository
.findByProductIdentifierAndSegmentSetIdentifier(productIdentifier, balanceSegmentSetIdentifier));
}
+
+ public List<BalanceSegmentSet> findByIdentifier(final String productIdentifier) {
+ final Map<String, List<BalanceSegmentEntity>> listsOfEntitiesDividedBySet = balanceSegmentRepository
+ .findByProductIdentifier(productIdentifier)
+ .collect(Collectors.groupingBy(BalanceSegmentEntity::getSegmentSetIdentifier, Collectors.toList()));
+ return listsOfEntitiesDividedBySet.values().stream()
+ .map(x -> BalanceSegmentSetMapper.map(x.stream()))
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .collect(Collectors.toList());
+ }
}
diff --git a/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java b/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
index a5ca9cc..2d81434 100644
--- a/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
+++ b/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
@@ -33,6 +33,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
+import java.util.List;
/**
* @author Myrle Krantz
@@ -60,8 +61,7 @@
@RequestMapping(
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
- produces = MediaType.APPLICATION_JSON_VALUE
- )
+ produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody
ResponseEntity<Void> createBalanceSegmentSet(
@PathVariable("productidentifier") final String productIdentifier,
@@ -74,6 +74,21 @@
return new ResponseEntity<>(HttpStatus.ACCEPTED);
}
+
+ @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.PRODUCT_MANAGEMENT)
+ @RequestMapping(
+ method = RequestMethod.GET,
+ consumes = MediaType.ALL_VALUE,
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public @ResponseBody
+ List<BalanceSegmentSet> getAllBalanceSegmentSets(
+ @PathVariable("productidentifier") final String productIdentifier) {
+ checkThatProductExists(productIdentifier);
+
+ return balanceSegmentSetService.findByIdentifier(productIdentifier);
+ }
+
+
@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.PRODUCT_MANAGEMENT)
@RequestMapping(
value = "{balancesegmentsetidentifier}",
@@ -132,7 +147,7 @@
private void checkThatSegmentSetDoesntExist(final String productIdentifier, final String segmentSetIdentifier) {
if (balanceSegmentSetService.existsByIdentifier(productIdentifier, segmentSetIdentifier))
- throw ServiceException.notFound("Segment set with identifier ''{0}.{1}'' already exists.", productIdentifier, segmentSetIdentifier);
+ throw ServiceException.conflict("Segment set with identifier ''{0}.{1}'' already exists.", productIdentifier, segmentSetIdentifier);
}
private void checkThatProductAndBalanceSegmentSetExist(final String productIdentifier, final String segmentSetIdentifier) {