diff --git a/cube/src/main/java/zone/cogni/asquare/cube/sparql2json/SparqlSelectToJson.java b/cube/src/main/java/zone/cogni/asquare/cube/sparql2json/SparqlSelectToJson.java index 19a69d6d..1554e190 100644 --- a/cube/src/main/java/zone/cogni/asquare/cube/sparql2json/SparqlSelectToJson.java +++ b/cube/src/main/java/zone/cogni/asquare/cube/sparql2json/SparqlSelectToJson.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -40,15 +41,36 @@ public SparqlSelectToJson(Resource[] queryResources, TemplateService templateSer } public SparqlSelectToJson(Resource[] queryResources, TemplateService templateService, Map context, ListExceptionHandling listExceptionHandling) { - this.queries = asQueries(queryResources, templateService, context); - this.listExceptionHandling = listExceptionHandling; + this(asQueries(templateService, queryResources, context), listExceptionHandling); + } + + private static List asQueries(TemplateService templateService, Resource[] queryResources, Map context) { + Stream> templateSuppliers = Arrays.stream(queryResources).map(TemplateService::fromResource); + return getQueries(templateService, context, templateSuppliers); + } + + private static List getQueries(TemplateService templateService, Map context, Stream> templateSuppliers) { + return templateService.processTemplates(templateSuppliers, context) + .map(QueryFactory::create) + .collect(Collectors.toList()); + } + + public SparqlSelectToJson(List queries, TemplateService templateService, Map context) { + this(queries, templateService, context, ListExceptionHandling.fail); + } + + public SparqlSelectToJson(List queries, TemplateService templateService, Map context, ListExceptionHandling listExceptionHandling) { + this(asQueries(templateService, queries, context), listExceptionHandling); } - private List asQueries(Resource[] queryResources, TemplateService templateService, Map context) { - return Arrays.stream(queryResources) - .map(resource -> templateService.processTemplate(resource, context)) - .map(QueryFactory::create) - .collect(Collectors.toList()); + public static List asQueries(TemplateService templateService, List templates, Map context) { + Stream> templateSuppliers = templates.stream().map(string -> () -> string); + return getQueries(templateService, context, templateSuppliers); + } + + public SparqlSelectToJson(List queries, ListExceptionHandling listExceptionHandling) { + this.queries = queries; + this.listExceptionHandling = listExceptionHandling; } public ObjectNode convert(Model model, Map bindings) { diff --git a/cube/src/main/java/zone/cogni/asquare/cube/spel/TemplateService.java b/cube/src/main/java/zone/cogni/asquare/cube/spel/TemplateService.java index 2ffecc4d..82f00410 100644 --- a/cube/src/main/java/zone/cogni/asquare/cube/spel/TemplateService.java +++ b/cube/src/main/java/zone/cogni/asquare/cube/spel/TemplateService.java @@ -3,7 +3,13 @@ import org.springframework.core.io.Resource; import zone.cogni.core.spring.ResourceHelper; +import java.util.function.Supplier; +import java.util.stream.Stream; + public interface TemplateService { + static Supplier fromResource(Resource templateResource) { + return () -> ResourceHelper.toString(templateResource); + } String processTemplate(String template, Object root); @@ -20,7 +26,14 @@ default NamedTemplate getNewNamedTemplateCopy(NamedTemplate namedTemplate, Objec } default String processTemplate(Resource templateResource, Object root) { - String template = ResourceHelper.toString(templateResource); - return processTemplate(template, root); + return processTemplate(fromResource(templateResource), root); + } + + default String processTemplate(Supplier templateSupplier, Object root) { + return processTemplate(templateSupplier.get(), root); + } + + default Stream processTemplates(Stream> templateSuppliers, Object root) { + return templateSuppliers.map(supplier -> processTemplate(supplier, root)); } }