Added ability to get default charge definitions for a pattern.
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 b68ff20..8e11724 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
@@ -45,6 +45,14 @@
List<Pattern> getAllPatterns();
@RequestMapping(
+ value = "/patterns/{patternpackage}/charges/",
+ method = RequestMethod.GET,
+ produces = MediaType.ALL_VALUE,
+ consumes = MediaType.APPLICATION_JSON_VALUE
+ )
+ List<ChargeDefinition> getAllDefaultChargeDefinitionsForPattern(@PathVariable("patternpackage") final String patternPackage);
+
+ @RequestMapping(
value = "/products/",
method = RequestMethod.GET,
produces = MediaType.ALL_VALUE,
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestPatterns.java b/component-test/src/main/java/io/mifos/portfolio/TestPatterns.java
index a3e83c9..b46f6e6 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestPatterns.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestPatterns.java
@@ -15,6 +15,8 @@
*/
package io.mifos.portfolio;
+import io.mifos.core.api.util.NotFoundException;
+import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
import io.mifos.portfolio.api.v1.domain.Pattern;
import org.junit.Assert;
import org.junit.Test;
@@ -31,4 +33,17 @@
Assert.assertNotNull(allPatterns);
Assert.assertTrue(allPatterns.size() > 0);
}
+
+ @Test
+ public void shouldReturnDefaultCharges() {
+ final List<ChargeDefinition> chargeDefinitions =
+ portfolioManager.getAllDefaultChargeDefinitionsForPattern("io.mifos.individuallending.api.v1");
+ Assert.assertNotNull(chargeDefinitions);
+ Assert.assertTrue(chargeDefinitions.size() > 0);
+ }
+
+ @Test(expected = NotFoundException.class)
+ public void shouldNotReturnDefaultChargesForNonExistentPackage() {
+ portfolioManager.getAllDefaultChargeDefinitionsForPattern("io.mifos.nonexistentproduct.api.v1");
+ }
}
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/service/PatternService.java b/service/src/main/java/io/mifos/portfolio/service/internal/service/PatternService.java
index cb33897..2d40f29 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/service/PatternService.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/service/PatternService.java
@@ -15,6 +15,8 @@
*/
package io.mifos.portfolio.service.internal.service;
+import io.mifos.core.lang.ServiceException;
+import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
import io.mifos.portfolio.api.v1.domain.Pattern;
import io.mifos.products.spi.PatternFactory;
import io.mifos.portfolio.service.internal.pattern.PatternFactoryRegistry;
@@ -48,4 +50,10 @@
{
return patternFactoryRegistry.getPatternFactoryForPackage(identifier).map(PatternFactory::pattern);
}
+
+ public List<ChargeDefinition> findDefaultChargeDefinitions(final String patternPackage) {
+ return patternFactoryRegistry.getPatternFactoryForPackage(patternPackage)
+ .orElseThrow(() -> ServiceException.notFound("Pattern with package " + patternPackage + " doesn't exist."))
+ .charges();
+ }
}
diff --git a/service/src/main/java/io/mifos/portfolio/service/rest/PatternRestController.java b/service/src/main/java/io/mifos/portfolio/service/rest/PatternRestController.java
index 89ebe69..408453b 100644
--- a/service/src/main/java/io/mifos/portfolio/service/rest/PatternRestController.java
+++ b/service/src/main/java/io/mifos/portfolio/service/rest/PatternRestController.java
@@ -17,15 +17,14 @@
import io.mifos.anubis.annotation.AcceptedTokenType;
import io.mifos.anubis.annotation.Permittable;
+import io.mifos.core.lang.ServiceException;
import io.mifos.portfolio.api.v1.PermittableGroupIds;
+import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
import io.mifos.portfolio.api.v1.domain.Pattern;
import io.mifos.portfolio.service.internal.service.PatternService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -51,7 +50,22 @@
)
public
@ResponseBody
- List<Pattern> getAllEntities() {
+ List<Pattern> getAllPatterns() {
return this.patternService.findAllEntities();
}
+
+ @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.PRODUCT_MANAGEMENT)
+ @RequestMapping(
+ value = "/{patternpackage}/charges/",
+ method = RequestMethod.GET,
+ consumes = MediaType.ALL_VALUE,
+ produces = MediaType.APPLICATION_JSON_VALUE
+ )
+ public
+ @ResponseBody
+ List<ChargeDefinition> getAllDefaultChargeDefinitionsForPattern(@PathVariable("patternpackage") final String patternPackage) {
+ final Pattern pattern = this.patternService.findByIdentifier(patternPackage)
+ .orElseThrow(() -> ServiceException.notFound("Pattern with package " + patternPackage + " doesn't exist."));
+ return this.patternService.findDefaultChargeDefinitions(patternPackage);
+ }
}