diff --git a/eBL-backend/pom.xml b/eBL-backend/pom.xml
index ac4f70e..7b49bfb 100644
--- a/eBL-backend/pom.xml
+++ b/eBL-backend/pom.xml
@@ -226,7 +226,31 @@
5.0.0
+
+ org.apache.jena
+ jena-core
+ 4.9.0
+
+
+
+ org.apache.jena
+ apache-jena-libs
+ 4.9.0
+ pom
+
+
+ org.apache.jena
+ jena-rdfconnection
+ 4.9.0
+
+
+
+ org.apache.jena
+ jena
+ 4.9.0
+ pom
+
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/EBlApplication.java b/eBL-backend/src/main/java/com/info7255/ebl/EBlApplication.java
index 7d62e8c..8df94d3 100644
--- a/eBL-backend/src/main/java/com/info7255/ebl/EBlApplication.java
+++ b/eBL-backend/src/main/java/com/info7255/ebl/EBlApplication.java
@@ -6,11 +6,13 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
+import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.filter.ShallowEtagHeaderFilter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
//import javax.servlet.Filter;
+@EnableAsync
@Configuration
@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
@EnableWebMvc
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/controller/FreightController.java b/eBL-backend/src/main/java/com/info7255/ebl/controller/FreightController.java
index e2a9bfd..c5c6512 100644
--- a/eBL-backend/src/main/java/com/info7255/ebl/controller/FreightController.java
+++ b/eBL-backend/src/main/java/com/info7255/ebl/controller/FreightController.java
@@ -5,6 +5,7 @@
import com.google.common.hash.Hashing;
import com.info7255.ebl.MyToken;
import com.info7255.ebl.repository.FreightDAO;
+import com.info7255.ebl.service.QuoteService;
import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
@@ -39,6 +40,9 @@ public class FreightController {
static ObjectMapper mapper = new ObjectMapper();
static String jws;
+ @Autowired
+ private QuoteService quoteService;
+
@PostMapping("/schema")
public ResponseEntity saveSchema(@RequestBody JsonNode schema, @RequestHeader HttpHeaders headers) throws IOException {
@@ -128,6 +132,10 @@ public ResponseEntity remove(@PathVariable String id, @RequestHeader HttpHeaders
@PostMapping("/quote")
public ResponseEntity quote(@RequestBody JsonNode quote, @RequestHeader HttpHeaders requestHeaders) {
+
+
+ quoteService.quote(quote);
+
return ResponseEntity.ok("Quoted");
}
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/event/QuoteEvent.java b/eBL-backend/src/main/java/com/info7255/ebl/event/QuoteEvent.java
index 1a2f27c..f8e3158 100644
--- a/eBL-backend/src/main/java/com/info7255/ebl/event/QuoteEvent.java
+++ b/eBL-backend/src/main/java/com/info7255/ebl/event/QuoteEvent.java
@@ -11,7 +11,7 @@ public class QuoteEvent {
private JsonNode quote;
public QuoteEvent(JsonNode quote) {
- quote = this.quote;
+ this.quote = quote;
}
public JsonNode getQuote() {
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/lisetener/EmailListeners.java b/eBL-backend/src/main/java/com/info7255/ebl/lisetener/EmailListeners.java
index 82812aa..74cc6a8 100644
--- a/eBL-backend/src/main/java/com/info7255/ebl/lisetener/EmailListeners.java
+++ b/eBL-backend/src/main/java/com/info7255/ebl/lisetener/EmailListeners.java
@@ -1,20 +1,32 @@
package com.info7255.ebl.lisetener;
+import com.info7255.ebl.entity.User;
import com.info7255.ebl.event.QuoteEvent;
+import com.info7255.ebl.repository.UserRepository;
import com.info7255.ebl.service.EmailService;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import java.util.Optional;
+
@Component
@RequiredArgsConstructor
public class EmailListeners {
+ @Autowired
+ private UserRepository userRepository;
private final EmailService emailService;
+ @Async
@EventListener
public void onRateQuotationEvent(QuoteEvent event){
- emailService.sendQuotationEmail(event.getQuote());
+ Optional user = userRepository.findById(String.valueOf(event.getQuote().get("customerID")));
+
+ emailService.sendQuotationEmail(user, event.getQuote());
}
}
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/lisetener/SemanticQuoteCreationListener.java b/eBL-backend/src/main/java/com/info7255/ebl/lisetener/SemanticQuoteCreationListener.java
new file mode 100644
index 0000000..cc29c7d
--- /dev/null
+++ b/eBL-backend/src/main/java/com/info7255/ebl/lisetener/SemanticQuoteCreationListener.java
@@ -0,0 +1,45 @@
+package com.info7255.ebl.lisetener;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.info7255.ebl.entity.User;
+import com.info7255.ebl.event.QuoteEvent;
+import com.info7255.ebl.repository.FreightDAO;
+import com.info7255.ebl.repository.UserRepository;
+import com.info7255.ebl.service.QuoteService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class SemanticQuoteCreationListener {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private QuoteService quoteService;
+
+ @Autowired
+ private FreightDAO dao;
+
+ @Async
+ @EventListener
+ public void onRateQuotationEvent(QuoteEvent event) {
+
+ Optional user = userRepository.findById(String.valueOf(event.getQuote().get("customerID")));
+
+ log.info("Inside SemanticQuoteCreationListener", event);
+
+ JsonNode rate = dao.findRateById(String.valueOf(event.getQuote().get("rateID")));
+
+ quoteService.generateRDF(rate, user, event.getQuote());
+
+ }
+}
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/resource/VCARD.java b/eBL-backend/src/main/java/com/info7255/ebl/resource/VCARD.java
new file mode 100644
index 0000000..d74af8b
--- /dev/null
+++ b/eBL-backend/src/main/java/com/info7255/ebl/resource/VCARD.java
@@ -0,0 +1,28 @@
+package com.info7255.ebl.resource;
+
+import org.apache.jena.rdf.model.* ;
+
+/** VCARD vocabulary class for namespace http://www.w3.org/2001/vcard-rdf/3.0#
+ */
+public class VCARD {
+
+ /**
+ * The namespace of the vocabulary as a string
+ */
+ public static final String uri ="http://www.w3.org/2001/vcard-rdf/3.0#";
+
+ /** returns the URI for this schema
+ * @return the URI for this schema
+ */
+ public static String getURI() {
+ return uri;
+ }
+
+ private static final Model m = ModelFactory.createDefaultModel();
+
+ public static final Property TWENTY = m.createProperty(uri, "TWENTY" );
+ public static final Property FORTY = m.createProperty(uri, "FORTY" );
+ public static final Property FORTYHQ = m.createProperty(uri, "FORTYHQ" );
+ public static final Property BUY = m.createProperty(uri, "BUY");
+ public static final Property SELL = m.createProperty(uri, "SELL");
+}
diff --git a/eBL-backend/src/main/java/com/info7255/ebl/service/EmailService.java b/eBL-backend/src/main/java/com/info7255/ebl/service/EmailService.java
index 11fbfea..b47cbfb 100644
--- a/eBL-backend/src/main/java/com/info7255/ebl/service/EmailService.java
+++ b/eBL-backend/src/main/java/com/info7255/ebl/service/EmailService.java
@@ -1,14 +1,22 @@
package com.info7255.ebl.service;
import com.fasterxml.jackson.databind.JsonNode;
+import com.info7255.ebl.entity.User;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import java.util.Optional;
+
+@Slf4j
+@Service
public class EmailService {
public EmailService() {
}
- public void sendQuotationEmail(JsonNode quote){
+ public void sendQuotationEmail(Optional user, JsonNode quote){
+ log.info("Email Quotation sent!", quote);
}
}
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 01ce73d..5aee6bb 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
@@ -1,31 +1,61 @@
package com.info7255.ebl.service;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import com.info7255.ebl.entity.User;
import com.info7255.ebl.event.QuoteEvent;
import com.info7255.ebl.repository.FreightDAO;
+import com.info7255.ebl.resource.VCARD;
import lombok.Data;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.jena.rdf.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
+import java.util.Optional;
+import java.util.UUID;
+
+@Slf4j
@Component
@RequiredArgsConstructor
public class QuoteService {
-// private final User user;
-
-// private final EmailService emailService;
+ ObjectMapper objectMapper = new ObjectMapper();
private final ApplicationEventPublisher publisher;
public void quote(JsonNode quote) {
-// emailService.sendQuotationEmail(quote);
-
publisher.publishEvent(new QuoteEvent(quote));
}
+ public void generateRDF(JsonNode rate, Optional user, JsonNode quote){
+
+ Model model = ModelFactory.createDefaultModel();
+
+ JsonNode ppJson = objectMapper.createObjectNode();
+
+ ((ObjectNode) ppJson).put("id", UUID.randomUUID().toString());
+ ((ObjectNode) ppJson).put("pol", rate.get("pol"));
+ ((ObjectNode) ppJson).put("pod", rate.get("pod"));
+
+ Resource portPair = model.createResource((Resource) ppJson);
+
+ portPair.addProperty(VCARD.BUY, model.createResource()
+ .addProperty(VCARD.TWENTY, rate.get("twenty").asText())
+ .addProperty(VCARD.FORTY, rate.get("forty").asText())
+ .addProperty(VCARD.FORTYHQ, rate.get("fortyhq").asText()))
+ .addProperty(VCARD.SELL, model.createResource()
+ .addProperty(VCARD.TWENTY, quote.get("sellRate20").asText())
+ .addProperty(VCARD.FORTY, quote.get("sellRate40").asText())
+ .addProperty(VCARD.FORTYHQ, rate.get("sellRate40HQ").asText()));
+
+ log.info("RDF created", portPair);
+
+ }
+
}
diff --git a/react-admin-dashboard/src/scenes/rates/index.jsx b/react-admin-dashboard/src/scenes/rates/index.jsx
index 809ef3d..3e631dc 100644
--- a/react-admin-dashboard/src/scenes/rates/index.jsx
+++ b/react-admin-dashboard/src/scenes/rates/index.jsx
@@ -20,6 +20,7 @@ const Rates = () => {
customers: []
});
const [openDialog, setOpenDialog] = useState(false);
+ const [selectedRowId, setSelectedRowId] = useState(null);
const theme = useTheme();
const colors = tokens(theme.palette.mode);
@@ -49,7 +50,8 @@ const Rates = () => {
.then(() => console.log('Delete successful'));
};
- const handleQuote = () => {
+ const handleQuote = (rowID) => {
+ setSelectedRowId(rowID);
setOpenDialog(true);
};
@@ -60,7 +62,7 @@ const Rates = () => {
return (
handleQuote(params.row.id)}
color="primary"
aria-label="quote"
>
@@ -82,21 +84,21 @@ const Rates = () => {
{custList.customers.length > 0 ? (
{
- console.log(values);
+ console.log(selectedRowId);
// Handle form submission
fetch('http://localhost:8080/quote', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
- body: JSON.stringify({...values, ["rateID"]: params.row.id})
+ body: JSON.stringify({...values, ["rateID"]: selectedRowId})
})
.then(response => {
console.log(response.json());
@@ -125,7 +127,7 @@ const Rates = () => {
>