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