diff --git a/Dockerfile b/Dockerfile index 4e32d11..33104fa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ RUN git clone -b feature/Produkte --single-branch https://bitbucket.org/omds/omd && cd /tmp/lib/OMDSServiceDefinition \ && mvn clean install -DskipTests +COPY src ./src COPY . . RUN mvn clean package -DskipTests diff --git a/src/main/java/com/kapdion/omds/productdefinitions/apriori/AprioriService.java b/src/main/java/com/kapdion/omds/productdefinitions/apriori/AprioriService.java index 68d0c59..72faee1 100644 --- a/src/main/java/com/kapdion/omds/productdefinitions/apriori/AprioriService.java +++ b/src/main/java/com/kapdion/omds/productdefinitions/apriori/AprioriService.java @@ -16,25 +16,36 @@ import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.rio.RDFFormat; import org.eclipse.rdf4j.rio.Rio; import org.eclipse.rdf4j.sail.memory.MemoryStore; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.stereotype.Service; import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import java.io.*; -import java.nio.file.Files; import java.util.Arrays; +import java.util.Comparator; +import java.util.List; import java.util.stream.Collectors; import static org.eclipse.rdf4j.model.util.Values.iri; +@Service public class AprioriService { + @Autowired + private ResourceLoader resourceLoader; + public String getProductsResponse(ProductsRequest productsRequest) { Repository repo = new SailRepository(new MemoryStore()); repo.init(); try (RepositoryConnection conn = repo.getConnection()) { - conn.add(new File("src/main/resources/data/prodelements.ttl"), RDFFormat.TURTLE); + Resource resource = resourceLoader.getResource("classpath:data/prodelements.ttl"); + conn.add(resource.getInputStream(), "", RDFFormat.TURTLE); String queryString = """ PREFIX vvo: @@ -104,7 +115,8 @@ public class AprioriService { repo.init(); try (RepositoryConnection conn = repo.getConnection()) { - conn.add(new File("src/main/resources/data/Attribute.ttl"), RDFFormat.TURTLE); + Resource resource = resourceLoader.getResource("classpath:data/Attribute.ttl"); + conn.add(resource.getInputStream(), "", RDFFormat.TURTLE); String queryString = """ PREFIX vvo: @@ -146,7 +158,8 @@ public class AprioriService { repo.init(); try (RepositoryConnection conn = repo.getConnection()) { - conn.add(new File("src/main/resources/data/Attribute.ttl"), RDFFormat.TURTLE); + Resource resource = resourceLoader.getResource("classpath:data/Attribute.ttl"); + conn.add(resource.getInputStream(), "", RDFFormat.TURTLE); String queryString = """ PREFIX vvo: @@ -188,7 +201,8 @@ public class AprioriService { repo.init(); try (RepositoryConnection conn = repo.getConnection()) { - conn.add(new File("src/main/resources/data/Attribute.ttl"), RDFFormat.TURTLE); + Resource resource = resourceLoader.getResource("classpath:data/Attribute.ttl"); + conn.add(resource.getInputStream(), "", RDFFormat.TURTLE); String queryString = """ PREFIX vvo: @@ -226,7 +240,8 @@ public class AprioriService { repo.init(); try (RepositoryConnection conn = repo.getConnection()) { - conn.add(new File("src/main/resources/data/Attribute.ttl"), RDFFormat.TURTLE); + Resource resource = resourceLoader.getResource("classpath:data/Attribute.ttl"); + conn.add(resource.getInputStream(), "", RDFFormat.TURTLE); String queryString = """ PREFIX vvo: @@ -265,15 +280,35 @@ public class AprioriService { IRI beschreibungIri = iri("http://vvo.pisanoapi.at/beschreibung"); IRI artIri = iri("http://vvo.pisanoapi.at/art"); - File file = new File("src/main/resources/data/plausis"); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resources = resolver.getResources("classpath:auto:data/plausis/*"); int i = 1; - for (File plausi : Arrays.stream(file.listFiles()).sorted().collect(Collectors.toList())) { - var lines = Files.lines(plausi.toPath()).map(String::trim).toList(); + List sortedResources = Arrays.stream(resources) + .sorted(Comparator.comparing(Resource::getFilename)) + .toList(); - String beschreibung = lines.stream().filter(line -> line.startsWith("#beschreibung:")).findFirst().get().substring(14); - String art = lines.stream().filter(line -> line.startsWith("#art:")).findFirst().get().substring(5); - String query = lines.stream().filter(line -> !line.startsWith("#") && !line.isEmpty()).collect(Collectors.joining("\n")); + for (Resource plausiResource : sortedResources) { + List lines; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plausiResource.getInputStream()))) { + lines = reader.lines().map(String::trim).toList(); + } + + String beschreibung = lines.stream() + .filter(line -> line.startsWith("#beschreibung:")) + .findFirst() + .map(line -> line.substring(14)) + .orElse("Keine Beschreibung"); + + String art = lines.stream() + .filter(line -> line.startsWith("#art:")) + .findFirst() + .map(line -> line.substring(5)) + .orElse("Unbekannt"); + + String query = lines.stream() + .filter(line -> !line.startsWith("#") && !line.isEmpty()) + .collect(Collectors.joining("\n")); IRI spezPlausiIri = iri(plausiIri.stringValue() + i); @@ -284,6 +319,5 @@ public class AprioriService { i++; } - } } diff --git a/src/main/java/com/kapdion/omds/productdefinitions/calculate/CalculateService.java b/src/main/java/com/kapdion/omds/productdefinitions/calculate/CalculateService.java index ef6e219..f8c3797 100644 --- a/src/main/java/com/kapdion/omds/productdefinitions/calculate/CalculateService.java +++ b/src/main/java/com/kapdion/omds/productdefinitions/calculate/CalculateService.java @@ -66,44 +66,44 @@ public class CalculateService { private VerkaufsproduktType pruefePlausis(VerkaufsproduktType vp) throws IOException { - File file = new File("src/main/resources/data/plausis"); - - Repository repo = new SailRepository(new MemoryStore()); - repo.init(); - - try (RepositoryConnection conn = repo.getConnection()) { - TreeHelper treeHelper = new TreeHelper(); - TreeItem vpTree = new TreeItem<>(new GuiProdukt(vp)); - treeHelper.produktToTree(vp, vpTree); - Model model = rdfHelper.createRdfModel(vpTree); - conn.add(model); - - for (File plausi : file.listFiles()) { - var lines = Files.lines(plausi.toPath()).map(String::trim).toList(); - - String art = lines.stream().filter(line -> line.startsWith("#art:")).findFirst().get().substring(5); - String query = lines.stream().filter(line -> !line.startsWith("#") && !line.isEmpty()).collect(Collectors.joining("\n")); - - - if (art.equals("update")){ - conn.prepareUpdate(query).execute(); - - model.clear(); - conn.getStatements(null, null, null).forEach(model::add); - }else if (art.equals("graph")){ - GraphQuery q = conn.prepareGraphQuery(query); - Model validatedModel = QueryResults.asModel(q.evaluate()); - model.addAll(validatedModel); - } - - } - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Rio.write(model, baos, RDFFormat.JSONLD); - - return rdfHelper.calculateRequestToVerkaufsprodukt(baos.toString()); - } catch(Exception ignored) { - System.out.println(ignored.getMessage()); - } +// File file = new File("src/main/resources/data/plausis"); +// +// Repository repo = new SailRepository(new MemoryStore()); +// repo.init(); +// +// try (RepositoryConnection conn = repo.getConnection()) { +// TreeHelper treeHelper = new TreeHelper(); +// TreeItem vpTree = new TreeItem<>(new GuiProdukt(vp)); +// treeHelper.produktToTree(vp, vpTree); +// Model model = rdfHelper.createRdfModel(vpTree); +// conn.add(model); +// +// for (File plausi : file.listFiles()) { +// var lines = Files.lines(plausi.toPath()).map(String::trim).toList(); +// +// String art = lines.stream().filter(line -> line.startsWith("#art:")).findFirst().get().substring(5); +// String query = lines.stream().filter(line -> !line.startsWith("#") && !line.isEmpty()).collect(Collectors.joining("\n")); +// +// +// if (art.equals("update")){ +// conn.prepareUpdate(query).execute(); +// +// model.clear(); +// conn.getStatements(null, null, null).forEach(model::add); +// }else if (art.equals("graph")){ +// GraphQuery q = conn.prepareGraphQuery(query); +// Model validatedModel = QueryResults.asModel(q.evaluate()); +// model.addAll(validatedModel); +// } +// +// } +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// Rio.write(model, baos, RDFFormat.JSONLD); +// +// return rdfHelper.calculateRequestToVerkaufsprodukt(baos.toString()); +// } catch(Exception ignored) { +// System.out.println(ignored.getMessage()); +// } return vp; }