From ede6c2e021295744387a3be44fb3568ca2725d1a Mon Sep 17 00:00:00 2001 From: parekhrikin Date: Thu, 31 Aug 2023 03:55:28 -0700 Subject: [PATCH] Fuseki configuration --- eBL-backend/pom.xml | 14 +++++ .../com/info7255/ebl/config/FusekiConfig.java | 30 ++++++++++ .../java/com/info7255/ebl/service/Atkin.java | 60 +++++++++++++++++++ .../info7255/ebl/service/Eratosthenes.java | 39 ++++++++++++ .../info7255/ebl/service/QuoteService.java | 14 +++++ .../src/main/resources/application.properties | 3 + 6 files changed, 160 insertions(+) create mode 100644 eBL-backend/src/main/java/com/info7255/ebl/config/FusekiConfig.java create mode 100644 eBL-backend/src/main/java/com/info7255/ebl/service/Atkin.java create mode 100644 eBL-backend/src/main/java/com/info7255/ebl/service/Eratosthenes.java diff --git a/eBL-backend/pom.xml b/eBL-backend/pom.xml index 53a39da..0dff366 100644 --- a/eBL-backend/pom.xml +++ b/eBL-backend/pom.xml @@ -258,6 +258,20 @@ 4.3.5 + + org.apache.jena + jena-fuseki-main + 4.9.0 + + + + javax.servlet + servlet-api + 2.5 + provided + + + diff --git a/eBL-backend/src/main/java/com/info7255/ebl/config/FusekiConfig.java b/eBL-backend/src/main/java/com/info7255/ebl/config/FusekiConfig.java new file mode 100644 index 0000000..b349d9a --- /dev/null +++ b/eBL-backend/src/main/java/com/info7255/ebl/config/FusekiConfig.java @@ -0,0 +1,30 @@ +package com.info7255.ebl.config; + +import org.apache.jena.fuseki.main.FusekiServer; +import org.apache.jena.query.Dataset; +import org.apache.jena.tdb.TDBFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FusekiConfig { + + @Value("${fuseki.port}") + private int port; + + @Value("${fuseki.datasetPath}") + private String datasetPath; + + @Bean(initMethod = "start", destroyMethod = "stop") + public FusekiServer fusekiServer() { + Dataset dataset = TDBFactory.createDataset(datasetPath); + return FusekiServer.create() + .port(port) + .add("/dataset", dataset) + .build(); + } + + +} diff --git a/eBL-backend/src/main/java/com/info7255/ebl/service/Atkin.java b/eBL-backend/src/main/java/com/info7255/ebl/service/Atkin.java new file mode 100644 index 0000000..8ca9985 --- /dev/null +++ b/eBL-backend/src/main/java/com/info7255/ebl/service/Atkin.java @@ -0,0 +1,60 @@ +package com.info7255.ebl.service; + +import java.util.*; + +public class Atkin { + + public static List findPrimes(int limit) { + boolean[] isPrime = new boolean[limit + 1]; + Arrays.fill(isPrime, false); + + // 2 and 3 are known primes + isPrime[2] = true; + isPrime[3] = true; + + for (int x = 1; x * x <= limit; x++) { + for (int y = 1; y * y <= limit; y++) { + int n = (4 * x * x) + (y * y); + if (n <= limit && (n % 12 == 1 || n % 12 == 5)) { + isPrime[n] = !isPrime[n]; + } + + n = (3 * x * x) + (y * y); + if (n <= limit && n % 12 == 7) { + isPrime[n] = !isPrime[n]; + } + + n = (3 * x * x) - (y * y); + if (x > y && n <= limit && n % 12 == 11) { + isPrime[n] = !isPrime[n]; + } + } + } + + for (int n = 5; n * n <= limit; n++) { + if (isPrime[n]) { + for (int k = n * n; k <= limit; k += n * n) { + isPrime[k] = false; + } + } + } + + List primes = new ArrayList<>(); + for (int i = 2; i <= limit; i++) { + if (isPrime[i]) { + primes.add(i); + } + } + + return primes; + } + + public static void main(String[] args) { + int limit = 50; + + List primes = findPrimes(limit); + System.out.println("Prime numbers up to " + limit + ":"); + System.out.println(primes); + } + +} diff --git a/eBL-backend/src/main/java/com/info7255/ebl/service/Eratosthenes.java b/eBL-backend/src/main/java/com/info7255/ebl/service/Eratosthenes.java new file mode 100644 index 0000000..2f5f641 --- /dev/null +++ b/eBL-backend/src/main/java/com/info7255/ebl/service/Eratosthenes.java @@ -0,0 +1,39 @@ +package com.info7255.ebl.service; + +import java.util.*; + +public class Eratosthenes { + + public static List findPrimesInRange(int start, int end) { + + boolean[] isPrime = new boolean[end + 1]; + Arrays.fill(isPrime, true); + + for (int i = 2; i * i <= end; i++) { + if (isPrime[i]) { + for (int j = i * i; j <= end; j += i) { + isPrime[j] = false; + } + } + } + + List primes = new ArrayList<>(); + for (int i = Math.max(2, start); i <= end; i++) { + if (isPrime[i]) { + primes.add(i); + } + } + + return primes; + } + + public static void main(String[] args) { + int start = 10; + int end = 50; + + List primesInRange = findPrimesInRange(start, end); + System.out.println("Prime numbers between " + start + " and " + end + ":"); + System.out.println(primesInRange); + } + +} diff --git a/eBL-backend/src/main/java/com/info7255/ebl/service/QuoteService.java b/eBL-backend/src/main/java/com/info7255/ebl/service/QuoteService.java index 662b9ea..7f2c109 100644 --- a/eBL-backend/src/main/java/com/info7255/ebl/service/QuoteService.java +++ b/eBL-backend/src/main/java/com/info7255/ebl/service/QuoteService.java @@ -11,7 +11,12 @@ import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.jena.fuseki.main.FusekiServer; import org.apache.jena.rdf.model.*; +import org.apache.jena.update.UpdateExecutionFactory; +import org.apache.jena.update.UpdateFactory; +import org.apache.jena.update.UpdateProcessor; +import org.apache.jena.update.UpdateRequest; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.query.*; @@ -38,6 +43,7 @@ public class QuoteService { ObjectMapper objectMapper = new ObjectMapper(); + private final ApplicationEventPublisher publisher; public static QueryBank queryBank = new QueryBank(); @@ -132,7 +138,15 @@ public void generateRDF(JsonNode rate, Optional user, JsonNode quote){ model.write(System.out, "TURTLE"); + String fusekiServiceUrl = "http://localhost:3030/dataset/update"; + + String insertQuery = "INSERT DATA { GRAPH { " + + portPair + + " } }"; + UpdateRequest updateRequest = UpdateFactory.create(insertQuery); + UpdateProcessor updateProcessor = UpdateExecutionFactory.createRemote(updateRequest, fusekiServiceUrl); + updateProcessor.execute(); log.info("RDF created", portPair); diff --git a/eBL-backend/src/main/resources/application.properties b/eBL-backend/src/main/resources/application.properties index 756d1b9..0b93d0b 100644 --- a/eBL-backend/src/main/resources/application.properties +++ b/eBL-backend/src/main/resources/application.properties @@ -6,3 +6,6 @@ rdf4j.spring.repository.remote.name=myrepo # Optional with username and password rdf4j.spring.repository.remote.username=admin rdf4j.spring.repository.remote.password=1234 + +fuseki.port=3030 +fuseki.datasetPath=/Users/rikinparekh/Repos/fuseki-server