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

This commit is contained in:
Konstantina Galouni 2022-10-06 13:59:26 +03:00
parent e3407abf4d
commit 85494a6dac
12 changed files with 354 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea/
make.sh
target/

51
pom.xml Normal file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>validator-api</artifactId>
<version>1.0-SNAPSHOT</version>
<name>uoa-validator-api</name>
<packaging>war</packaging>
<parent>
<groupId>eu.dnetlib</groupId>
<artifactId>uoa-spring-boot-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>E MMM dd HH:mm:ss z yyyy</maven.build.timestamp.format>
</properties>
<dependencies>
<dependency>
<groupId>eu.dnetlib</groupId>
<artifactId>uoa-validator-engine2</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>uoa-validator-api</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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<String, String> checkEverything() {
Map<String, String> 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;
}
}

View File

@ -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<String> validate(@RequestParam(name = "guidelines") String guidelinesProfileName, @RequestBody String xml) {
log.debug(xml);
List<String> 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<String, Double> 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<String, Guideline.Result> 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;
}
}

View File

@ -0,0 +1,52 @@
<record>
<header>
<identifier>oai:dlib.tuc.gr:21811</identifier>
<datestamp>2012-10-10T00:00:00Z</datestamp>
<setSpec>28</setSpec>
</header>
<metadata>
<oai_dc:dc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:type>info:eu-repo/semantics/article</dc:type>
<dc:title xml:lang="en">Mainstream traffic flow control on freeways using variable speed limits</dc:title>
<dc:creator xml:lang="en">Carlson Rodrigo Castelan ()</dc:creator>
<dc:creator xml:lang="el">Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)</dc:creator>
<dc:creator xml:lang="en">Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)</dc:creator>
<dc:creator xml:lang="el">Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)</dc:creator>
<dc:creator xml:lang="en">Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)</dc:creator>
<dc:subject xml:lang="en">Traffic incident management,traffic congestion management,traffic incident
management
</dc:subject>
<dc:identifier>http://purl.tuc.gr/dl/dias/CF2DBEC9-EA4E-4D15-931D-C8D5D903D718</dc:identifier>
<dc:identifier>10.4237/transportes.v21i3.694</dc:identifier>
<dc:date>Published at: 2014-09-25</dc:date>
<dc:language>en</dc:language>
<dc:rights>info:eu-repo/semantics/openAccess</dc:rights>
<dc:rights xml:lang="en">License: http://creativecommons.org/licenses/by-nc-nd/4.0/</dc:rights>
<dc:format>application/pdf</dc:format>
<dc:date>Issued on: 2013</dc:date>
<dc:description xml:lang="en">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.
</dc:description>
<dc:publisher xml:lang="en">ANPET - Associação Nacional de Pesquisa e Ensino em Transportes</dc:publisher>
<dc:description xml:lang="en">Presented on: Transportes</dc:description>
<dc:type>peer-reviewed</dc:type>
<dc:identifier xml:lang="en">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
</dc:identifier>
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/246686</dc:relation>
</oai_dc:dc>
</metadata>
</record>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d %p %t [%c] - %m%n
</Property>
</Properties>
<Appenders>
<!-- Rolling File Appender -->
<RollingFile name="R" fileName="/var/log/dnet/uoa-validator-api/uoa-validator-api.log"
filePattern="/var/log/dnet/uoa-validator-api/uoa-validator-api-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="S" fileName="/var/log/dnet/uoa-validator-api/uoa-validator-api-spring.log"
filePattern="/var/log/dnet/uoa-validator-api/uoa-validator-api-spring-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="org.springframework" level="debug" additivity="false">
<AppenderRef ref="S"/>
</Logger>
<Root level="debug">
<AppenderRef ref="R"/>
</Root>
</Loggers>
</Configuration>

View File

@ -0,0 +1,2 @@
validatorapi.globalVars.buildDate=@timestamp@
validatorapi.globalVars.version=@version@