From 85494a6dac792da26c86ed5b8f9fb7345a9199e3 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Thu, 6 Oct 2022 13:59:26 +0300 Subject: [PATCH] First version of project - /validate POST method gets param 'guidelines' (name of selected guidelines to validate with) and a string as body (xml) to be validated --- .gitignore | 3 + pom.xml | 51 ++++++++++++ .../validatorapi/ServletInitializer.java | 13 +++ .../validatorapi/ValidatorApiApplication.java | 20 +++++ .../ValidatorApiConfiguration.java | 18 +++++ .../configuration/GlobalVars.java | 31 ++++++++ .../ValidatorApiCheckDeployController.java | 46 +++++++++++ .../controllers/ValidatorController.java | 79 +++++++++++++++++++ src/main/resources/Record_21811.xml | 52 ++++++++++++ src/main/resources/application.properties | 0 src/main/resources/log4j2.xml | 39 +++++++++ src/main/resources/validatorapi.properties | 2 + 12 files changed, 354 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/eu/dnetlib/validatorapi/ServletInitializer.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/ValidatorApiApplication.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/ValidatorApiConfiguration.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/configuration/GlobalVars.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorApiCheckDeployController.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorController.java create mode 100644 src/main/resources/Record_21811.xml create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/main/resources/validatorapi.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b74675 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea/ +make.sh +target/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..cab462c --- /dev/null +++ b/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + org.example + validator-api + 1.0-SNAPSHOT + uoa-validator-api + war + + eu.dnetlib + uoa-spring-boot-parent + 1.0.0-SNAPSHOT + + + UTF-8 + UTF-8 + 1.8 + ${maven.build.timestamp} + E MMM dd HH:mm:ss z yyyy + + + + eu.dnetlib + uoa-validator-engine2 + 0.9.0 + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + uoa-validator-api + + + src/main/resources + true + + + + \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validatorapi/ServletInitializer.java b/src/main/java/eu/dnetlib/validatorapi/ServletInitializer.java new file mode 100644 index 0000000..0ed639d --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/ServletInitializer.java @@ -0,0 +1,13 @@ +package eu.dnetlib.validatorapi; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.support.SpringBootServletInitializer; + +public class ServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(ValidatorApiApplication.class); + } + +} diff --git a/src/main/java/eu/dnetlib/validatorapi/ValidatorApiApplication.java b/src/main/java/eu/dnetlib/validatorapi/ValidatorApiApplication.java new file mode 100644 index 0000000..7d32f5c --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/ValidatorApiApplication.java @@ -0,0 +1,20 @@ +package eu.dnetlib.validatorapi; + +import eu.dnetlib.validatorapi.configuration.GlobalVars; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; + +@SpringBootApplication(scanBasePackages = {"eu.dnetlib.validatorapi"}) +@PropertySources({ + @PropertySource("classpath:validatorapi.properties"), + @PropertySource(value = "classpath:dnet-override.properties", ignoreResourceNotFound = true) +}) +@EnableConfigurationProperties({GlobalVars.class}) +public class ValidatorApiApplication { + public static void main(String[] args) { + SpringApplication.run(ValidatorApiApplication.class, args); + } +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validatorapi/ValidatorApiConfiguration.java b/src/main/java/eu/dnetlib/validatorapi/ValidatorApiConfiguration.java new file mode 100644 index 0000000..c0cb293 --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/ValidatorApiConfiguration.java @@ -0,0 +1,18 @@ +package eu.dnetlib.validatorapi; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@Configuration +public class ValidatorApiConfiguration extends WebMvcConfigurerAdapter { + private final Logger log = LogManager.getLogger(this.getClass()); + + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } +} diff --git a/src/main/java/eu/dnetlib/validatorapi/configuration/GlobalVars.java b/src/main/java/eu/dnetlib/validatorapi/configuration/GlobalVars.java new file mode 100644 index 0000000..5f8e62d --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/configuration/GlobalVars.java @@ -0,0 +1,31 @@ +package eu.dnetlib.validatorapi.configuration; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Date; + +@ConfigurationProperties("validatorapi.globalVars") +public class GlobalVars { + public static Date date = new Date(); + private Date buildDate; + private String version; + + public String getBuildDate() { + if(buildDate == null) { + return null; + } + return buildDate.toString(); + } + + public void setBuildDate(Date buildDate) { + this.buildDate = buildDate; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorApiCheckDeployController.java b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorApiCheckDeployController.java new file mode 100644 index 0000000..8fe9220 --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorApiCheckDeployController.java @@ -0,0 +1,46 @@ +package eu.dnetlib.validatorapi.controllers; + +import eu.dnetlib.validatorapi.configuration.GlobalVars; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@CrossOrigin(origins = "*") +public class ValidatorApiCheckDeployController { + private static final Logger log = LogManager.getLogger(ValidatorApiCheckDeployController.class); + + @Autowired + private GlobalVars globalVars; + + @RequestMapping(value = {"", "/health_check"}, method = RequestMethod.GET) + public String hello() { + log.debug("Hello from validator-api!"); + return "Hello from validator-api!"; + } + +// @PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)") + @RequestMapping(value = "/health_check/advanced", method = RequestMethod.GET) + public Map checkEverything() { + Map response = new HashMap<>(); + + if(globalVars.date != null) { + response.put("Date of deploy", globalVars.date.toString()); + } + if(globalVars.getBuildDate() != null) { + response.put("Date of build", globalVars.getBuildDate()); + } + if(globalVars.getVersion() != null) { + response.put("Version", globalVars.getVersion()); + } + + return response; + } +} diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorController.java b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorController.java new file mode 100644 index 0000000..31e5e63 --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidatorController.java @@ -0,0 +1,79 @@ +package eu.dnetlib.validatorapi.controllers; + +import eu.dnetlib.validator2.validation.XMLApplicationProfile; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; +import eu.dnetlib.validator2.validation.guideline.openaire.DataArchiveGuidelinesV2Profile; +import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV3Profile; +import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV4Profile; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.web.bind.annotation.*; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.StringReader; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@CrossOrigin(origins = "*") +public class ValidatorController { + private final Logger log = LogManager.getLogger(this.getClass()); + + @RequestMapping(value = {"/validate"}, method = RequestMethod.POST) + public List validate(@RequestParam(name = "guidelines") String guidelinesProfileName, @RequestBody String xml) { + log.debug(xml); + List resultMessages = new ArrayList<>(); + + AbstractOpenAireProfile profile = null; + if(guidelinesProfileName.equals("dataArchiveGuidelinesV2Profile")) { + profile = new DataArchiveGuidelinesV2Profile(); + } else if(guidelinesProfileName.equals("literatureGuidelinesV3Profile")) { + profile = new LiteratureGuidelinesV3Profile(); + } else if(guidelinesProfileName.equals("literatureGuidelinesV4Profile")) { + profile = new LiteratureGuidelinesV4Profile(); + } + if(profile == null) { + new Exception("No valid guidelines"); + } + log.debug("Max score: " + profile.maxScore()); + Map scorePerDoc = new LinkedHashMap<>(); +// String file = "/home/konstantina/projects/validator-api/src/main/resources/Record_21811.xml"; + XMLApplicationProfile.ValidationResult result = null; + try { +// log.debug("Processing " + file); +// Document doc = DOMBuilder.parse(new FileReader(file), false, true, true); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(new InputSource(new StringReader(xml))); + result = profile.validate("id", doc); + Date date = new Date(); + scorePerDoc.put("input-"+date.toString(), result.score()); + Map results = result.results(); + log.debug("\n\nPrinting results..."); + for (Map.Entry entry : results.entrySet()) { + log.debug(entry.getKey() + " = " + entry.getValue()); + resultMessages.add(entry.getKey() + " = " + entry.getValue()); + } + } + catch(Exception e) { + log.debug(e.getMessage()); + log.debug(e); + e.printStackTrace(); + resultMessages.add("Error processing input"); + } + String printout = scorePerDoc.entrySet().stream(). + map(entry -> { + resultMessages.add("score: " + entry.getValue()); + return entry.getValue() + ": " + entry.getKey(); + }).collect(Collectors.joining("\n")); + log.debug("\n\nPrinting scorePerDoc..."); + log.debug(printout); + + return resultMessages; + } + + } diff --git a/src/main/resources/Record_21811.xml b/src/main/resources/Record_21811.xml new file mode 100644 index 0000000..1b69ab8 --- /dev/null +++ b/src/main/resources/Record_21811.xml @@ -0,0 +1,52 @@ + +
+ oai:dlib.tuc.gr:21811 + 2012-10-10T00:00:00Z + 28 +
+ + + info:eu-repo/semantics/article + Mainstream traffic flow control on freeways using variable speed limits + Carlson Rodrigo Castelan () + Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa) + Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa) + Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou) + Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou) + Traffic incident management,traffic congestion management,traffic incident + management + + http://purl.tuc.gr/dl/dias/CF2DBEC9-EA4E-4D15-931D-C8D5D903D718 + 10.4237/transportes.v21i3.694 + Published at: 2014-09-25 + en + info:eu-repo/semantics/openAccess + License: http://creativecommons.org/licenses/by-nc-nd/4.0/ + application/pdf + Issued on: 2013 + Summarization: Mainstream Traffic Flow Control (MTFC), enabled via variable + speed limits, is a control concept for real-time freeway traffic management. The benefits of MTFC for + efficient freeway traffic flow have been demonstrated recently using an optimal control approach and a + feedback control approach. In this paper, both control approaches are reviewed and applied to a freeway + network in a simulation environment. The validated network model used reflects an actual freeway (a + ring-road), fed with actual (measured) demands. The optimal and feedback control results are discussed, + compared and demonstrated to improve significantly the system performance. In particular, the feedback + control scheme is deemed suitable for immediate practical application as it takes into account operational + requirements and constraints, while its results are shown to be satisfactory. In addition, the control + system performance was not very sensitive to variations of the parameters of the feedback controller. This + result indicates that the burden associated with fine tuning of the controller may be reduced in the field. + + ANPET - Associação Nacional de Pesquisa e Ensino em Transportes + Presented on: Transportes + peer-reviewed + Bibliographic citation: R.C. Carlson, I. Papamichail, M. Papageorgiou, + "Mainstream traffic flow control on freeways using variable speed limits," Transportes, vol. 21, no. 3, pp. + 56-65, 2013. + doi:10.4237/transportes.v21i3.694 + + info:eu-repo/grantAgreement/EC/FP7/246686 + + +
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..15ce9dd --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,39 @@ + + + + + %d %p %t [%c] - %m%n + + + + + + + ${LOG_PATTERN} + + + + + + + + + ${LOG_PATTERN} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/validatorapi.properties b/src/main/resources/validatorapi.properties new file mode 100644 index 0000000..d722b58 --- /dev/null +++ b/src/main/resources/validatorapi.properties @@ -0,0 +1,2 @@ +validatorapi.globalVars.buildDate=@timestamp@ +validatorapi.globalVars.version=@version@ \ No newline at end of file