Added JPA Hibernate for PostgreSQL + simple sql to match the model
This commit is contained in:
parent
2c5a934b36
commit
63bba067ba
13
pom.xml
13
pom.xml
|
@ -15,7 +15,7 @@
|
|||
<parent>
|
||||
<groupId>eu.dnetlib</groupId>
|
||||
<artifactId>uoa-spring-boot-parent</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
@ -29,6 +29,17 @@
|
|||
<artifactId>uoa-validator-engine2</artifactId>
|
||||
<version>0.9.0</version>
|
||||
</dependency>
|
||||
<!-- jpa, crud repository -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- PostgreSQL -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,177 @@
|
|||
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.*;
|
||||
import eu.dnetlib.validatorapi.entities.RuleInfo;
|
||||
import eu.dnetlib.validatorapi.entities.ValidationJob;
|
||||
import eu.dnetlib.validatorapi.entities.ValidationJobResult;
|
||||
import eu.dnetlib.validatorapi.repository.ValidationJobRepository;
|
||||
import eu.dnetlib.validatorapi.repository.ValidationResultRepository;
|
||||
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.*;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.xpath.XPath;
|
||||
import javax.xml.xpath.XPathConstants;
|
||||
import javax.xml.xpath.XPathExpression;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.util.*;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin(origins = "*")
|
||||
public class ValidationController {
|
||||
|
||||
private final Logger log = LogManager.getLogger(this.getClass());
|
||||
private final ValidationJobRepository validationJobRepository;
|
||||
private final ValidationResultRepository validationResultRepository;
|
||||
|
||||
@Autowired
|
||||
public ValidationController(ValidationJobRepository validationJobRepository, ValidationResultRepository validationResultRepository) {
|
||||
this.validationJobRepository = validationJobRepository;
|
||||
this.validationResultRepository = validationResultRepository;
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = {"/validateOAIPMH"}, method = RequestMethod.POST)
|
||||
public void validateOAIPMH(@RequestParam(name = "guidelines") String guidelinesProfileName,
|
||||
@RequestParam(name = "baseUrl", defaultValue = "localhost") String baseUrl, //not in use now
|
||||
@RequestParam(name="numberOfRecords", defaultValue = "10") int numberOfRecords, //not in use now
|
||||
@RequestBody String OAIPMHResponse) {
|
||||
|
||||
ValidationJob validationJob = new ValidationJob(baseUrl, numberOfRecords);
|
||||
|
||||
List<RuleInfo> resultRules = null;
|
||||
List<RuleInfo> fairRules = null;
|
||||
AbstractOpenAireProfile profile = null;
|
||||
AbstractOpenAireProfile fairProfile = null;
|
||||
|
||||
if (guidelinesProfileName.equals("dataArchiveGuidelinesV2Profile")) {
|
||||
profile = new DataArchiveGuidelinesV2Profile();
|
||||
fairProfile = new FAIR_Data_GuidelinesProfile();
|
||||
|
||||
} else if (guidelinesProfileName.equals("literatureGuidelinesV3Profile")) {
|
||||
profile = new LiteratureGuidelinesV3Profile();
|
||||
|
||||
} else if (guidelinesProfileName.equals("literatureGuidelinesV4Profile")) {
|
||||
profile = new LiteratureGuidelinesV4Profile();
|
||||
|
||||
} else if (guidelinesProfileName.equals("fairDataGuidelinesProfile")) {
|
||||
fairProfile = new FAIR_Data_GuidelinesProfile();
|
||||
}
|
||||
|
||||
if (profile == null && fairProfile == null) {
|
||||
log.error("Exception: No valid guidelines");
|
||||
new Exception("Validation Job stopped unexpectedly. No valid guidelines were provided.");
|
||||
}
|
||||
|
||||
validationJob.guidelines = profile.name();
|
||||
System.out.println("Initial validation job "+ validationJob + " | " + validationJob.hashCode() + "\n");
|
||||
validationJobRepository.save(validationJob);
|
||||
int record = 0;
|
||||
double resultSum = 0;
|
||||
|
||||
try {
|
||||
List<String> recordXmls = extractRecordXmls(OAIPMHResponse);
|
||||
List<ValidationJobResult> validationJobResults = new ArrayList<>();
|
||||
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
|
||||
for (String recordXml : recordXmls) {
|
||||
Document doc = db.parse(new InputSource(new StringReader(recordXml)));
|
||||
if(profile != null) {
|
||||
resultRules = new ArrayList<>();
|
||||
//what id is that?
|
||||
XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc);
|
||||
|
||||
Map<String, Guideline.Result> results = validationResult.results();
|
||||
for (Map.Entry entry : results.entrySet()) {
|
||||
|
||||
ValidationJobResult validationJobResult = new ValidationJobResult();
|
||||
validationJobResult.validationJobId = validationJob.id;
|
||||
validationJobResult.ruleName = entry.getKey().toString();
|
||||
validationJobResult.recordUrl = "localhost://records/record["+record+"]"; // silly id
|
||||
Guideline.Result engineResult = (Guideline.Result) entry.getValue();
|
||||
validationJobResult.score = engineResult.score();
|
||||
validationJobResult.status = engineResult.status().toString();
|
||||
validationJobResult.internalError = engineResult.internalError();
|
||||
resultSum += engineResult.score();
|
||||
|
||||
validationJobResult.warnings = ((List<String>) engineResult.warnings()).toArray(new String[0]);
|
||||
validationJobResult.errors = ((List<String>) engineResult.errors()).toArray(new String[0]);
|
||||
System.out.println(validationJobResult + " | " + validationJobResult.hashCode() + "\n");
|
||||
validationResultRepository.save(validationJobResult);
|
||||
validationJobResults.add(validationJobResult);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
record++;
|
||||
}
|
||||
validationJob.status = "COMPLETED";
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("Validation job stopped unexpectedly.", e.getMessage());
|
||||
System.out.println("ERROR " + e.getMessage());
|
||||
validationJob.status = "STOPPED";
|
||||
|
||||
} finally {
|
||||
validationJob.endDate = new Date();
|
||||
System.out.println("Final validation job "+ validationJob.hashCode());
|
||||
validationJob.recordsTested = record;
|
||||
validationJob.score = resultSum / record;
|
||||
validationJobRepository.save(validationJob);
|
||||
}
|
||||
|
||||
//xmlValidationResponse.setRules(resultRules);
|
||||
//xmlValidationResponse.setFairRules(fairRules);
|
||||
}
|
||||
|
||||
@RequestMapping(value = {"/getResultsByJobId"}, method = RequestMethod.POST)
|
||||
public void getJobResults(@RequestParam(name = "jobId") String jobId){
|
||||
System.out.println(validationResultRepository.getSummarryResult().toString());
|
||||
}
|
||||
|
||||
public List<String> extractRecordXmls(String xml) throws Exception {
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
Document doc = dBuilder.parse(new InputSource(new StringReader(xml)));
|
||||
|
||||
XPathFactory xfactory = XPathFactory.newInstance();
|
||||
XPath xpath = xfactory.newXPath();
|
||||
XPathExpression recordsExpression = xpath.compile("//record");
|
||||
NodeList recordNodes = (NodeList) recordsExpression.evaluate(doc, XPathConstants.NODESET);
|
||||
|
||||
List<String> records = new ArrayList<String>();
|
||||
for (int i = 0; i < recordNodes.getLength(); ++i) {
|
||||
Node element = recordNodes.item(i);
|
||||
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
Transformer xform = TransformerFactory.newInstance().newTransformer();
|
||||
xform.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // optional
|
||||
xform.setOutputProperty(OutputKeys.INDENT, "yes"); // optional
|
||||
xform.transform(new DOMSource(element), new StreamResult(stringWriter));
|
||||
|
||||
records.add(stringWriter.toString());
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
}
|
|
@ -1,8 +1,6 @@
|
|||
package eu.dnetlib.validatorapi.entities;
|
||||
|
||||
import eu.dnetlib.validator2.engine.Status;
|
||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||
import eu.dnetlib.validator2.validation.guideline.StandardResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package eu.dnetlib.validatorapi.entities;
|
||||
|
||||
import org.springframework.boot.autoconfigure.session.StoreType;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class SummaryResult {
|
||||
|
||||
@Id
|
||||
String rule_name;
|
||||
long passed_records;
|
||||
long failed_records;
|
||||
long errors;
|
||||
long warnings;
|
||||
|
||||
public SummaryResult(String rule_name, long passed_records, long failed_records, long errors, long warnings) {
|
||||
this.rule_name = rule_name;
|
||||
this.passed_records = passed_records;
|
||||
this.failed_records = failed_records;
|
||||
this.errors = errors;
|
||||
this.warnings = warnings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SummaryResult{" +
|
||||
"rule_name='" + rule_name + '\'' +
|
||||
", passed_records=" + passed_records +
|
||||
", failed_records=" + failed_records +
|
||||
", errors=" + errors +
|
||||
", warnings=" + warnings +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package eu.dnetlib.validatorapi.entities;
|
||||
|
||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Date;
|
||||
|
||||
@Entity
|
||||
@Table(name = "validation_jobs")
|
||||
public class ValidationJob {
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Id
|
||||
public int id; //not in use for now
|
||||
|
||||
@Column(name = "base_url")
|
||||
public String baseUrl;
|
||||
@Column(name="number_of_records")
|
||||
public int numberOfRecords;
|
||||
@Column(name="guidelines")
|
||||
public String guidelines;
|
||||
|
||||
@Column(name="started")
|
||||
public Date startDate;
|
||||
@Column(name="ended")
|
||||
public Date endDate;
|
||||
|
||||
@Column(name = "records_tested")
|
||||
public int recordsTested;
|
||||
@Column(name="duration")
|
||||
public String status; //stopped, completed, in progres
|
||||
@Column(name="score")
|
||||
public double score;
|
||||
|
||||
public ValidationJob(){
|
||||
startDate = new Date();
|
||||
}
|
||||
|
||||
public ValidationJob(String baseUrl, int numberOfRecords) {
|
||||
this.startDate = new Date();
|
||||
this.baseUrl = baseUrl;
|
||||
this.numberOfRecords = numberOfRecords;
|
||||
this.status = "IN_PROGRESS";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ValidationJob {" +
|
||||
"id=" + id +
|
||||
", baseUrl='" + baseUrl + '\'' +
|
||||
", numberOfRecords=" + numberOfRecords +
|
||||
", guidelines='" + guidelines + '\'' +
|
||||
", startDate=" + startDate +
|
||||
", endDate=" + endDate +
|
||||
", recordsTested=" + recordsTested +
|
||||
", status='" + status + '\'' +
|
||||
", score=" + score +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package eu.dnetlib.validatorapi.entities;
|
||||
|
||||
import eu.dnetlib.validator2.engine.Status;
|
||||
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name="validation_results")
|
||||
@IdClass(ValidationJobResult.class)
|
||||
public class ValidationJobResult implements Serializable {
|
||||
|
||||
@Id
|
||||
@Column(name = "validation_job_id")
|
||||
public int validationJobId;
|
||||
|
||||
@Id
|
||||
@Column(name = "rule_name")
|
||||
public String ruleName;
|
||||
|
||||
@Id
|
||||
@Column(name = "rule_weight")
|
||||
public int ruleWeight;
|
||||
|
||||
@Id
|
||||
@Column(name = "record_url")
|
||||
public String recordUrl;
|
||||
|
||||
//not in use yet
|
||||
@Column(name = "warnings", columnDefinition = "text[]")
|
||||
@Type(type = "eu.dnetlib.validatorapi.utils.CustomStringArrayType")
|
||||
public String[] warnings;
|
||||
|
||||
@Column(name = "errors", columnDefinition = "text[]")
|
||||
@Type(type = "eu.dnetlib.validatorapi.utils.CustomStringArrayType")
|
||||
public String[] errors;
|
||||
|
||||
@Column(name = "internal_error")
|
||||
public String internalError;
|
||||
@Column(name = "status")
|
||||
public String status;
|
||||
@Column(name = "score")
|
||||
public double score;
|
||||
|
||||
public ValidationJobResult() {}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ValidationJobResult{" +
|
||||
", warnings=" + warnings +
|
||||
", errors=" + errors +
|
||||
", internalError='" + internalError + '\'' +
|
||||
", status='" + status + '\'' +
|
||||
", score=" + score +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package eu.dnetlib.validatorapi.repository;
|
||||
|
||||
import eu.dnetlib.validatorapi.entities.ValidationJob;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ValidationJobRepository extends JpaRepository<ValidationJob, Long> {
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package eu.dnetlib.validatorapi.repository;
|
||||
|
||||
import eu.dnetlib.validatorapi.entities.SummaryResult;
|
||||
import eu.dnetlib.validatorapi.entities.ValidationJobResult;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface ValidationResultRepository extends JpaRepository<ValidationJobResult, Long> {
|
||||
|
||||
@Query(value =
|
||||
"SELECT NEW eu.dnetlib.validatorapi.entities.SummaryResult(sr.ruleName, " +
|
||||
"COUNT(CASE WHEN sr.status = 'SUCCESS' THEN 1 END) AS passed_records, " +
|
||||
"COUNT(CASE WHEN sr.status = 'FAILURE' THEN 1 END) AS failed_records, " +
|
||||
"COUNT(CASE WHEN array_length(sr.errors, 1) > 0 THEN 1 END) AS errors, " +
|
||||
"COUNT(CASE WHEN array_length(sr.warnings, 1) > 0 THEN 1 END) AS warnings) " +
|
||||
"FROM ValidationJobResult sr " +
|
||||
"GROUP BY sr.ruleName")
|
||||
List<SummaryResult> getSummarryResult();
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
package eu.dnetlib.validatorapi.utils;
|
||||
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.usertype.UserType;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.*;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class CustomStringArrayType implements UserType {
|
||||
@Override
|
||||
public int[] sqlTypes() {
|
||||
return new int[]{Types.ARRAY};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class returnedClass() {
|
||||
return String[].class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o1, Object o2) throws HibernateException {
|
||||
if (o1 instanceof String[] && o2 instanceof String[]) {
|
||||
return Arrays.deepEquals((String[])o1, (String[])o2);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode(Object o) throws HibernateException {
|
||||
return Arrays.hashCode((String[])o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
|
||||
throws HibernateException, SQLException {
|
||||
Array array = rs.getArray(names[0]);
|
||||
return array != null ? array.getArray() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
|
||||
throws HibernateException, SQLException {
|
||||
if (value != null && st != null) {
|
||||
Array array = session.connection().createArrayOf("text", (String[])value);
|
||||
st.setArray(index, array);
|
||||
} else {
|
||||
st.setNull(index, sqlTypes()[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object deepCopy(Object o) throws HibernateException {
|
||||
String[] a = (String[])o;
|
||||
return Arrays.copyOf(a, a.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMutable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable disassemble(Object o) throws HibernateException {
|
||||
return (Serializable) o;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object assemble(Serializable serializable, Object o) throws HibernateException {
|
||||
return serializable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object replace(Object o, Object o1, Object o2) throws HibernateException {
|
||||
return o;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
server.port = 9200
|
||||
|
||||
## PostgreSQL
|
||||
spring.datasource.url=jdbc:postgresql://localhost:5432/validator
|
||||
spring.datasource.username=dnet
|
||||
spring.datasource.password=pass
|
||||
|
||||
#drop n create table again, good for testing, comment this in production or set as validate
|
||||
spring.jpa.hibernate.ddl-auto=update
|
|
@ -0,0 +1,25 @@
|
|||
CREATE TABLE public.validation_jobs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
base_url text,
|
||||
number_of_records text DEFAULT 10,
|
||||
guidelines text NOT NULL,
|
||||
started timestamp without time zone NOT NULL,
|
||||
ended timestamp without time zone,
|
||||
records_tested integer,
|
||||
status text,
|
||||
score text,
|
||||
duration text
|
||||
);
|
||||
|
||||
ALTER TABLE public.validation_jobs OWNER TO dnet;
|
||||
|
||||
CREATE TABLE public.validation_results (
|
||||
validation_job_id integer REFERENCES validation_jobs (id),
|
||||
record_url text,
|
||||
rule_name text,
|
||||
warnings text[],
|
||||
errors text[],
|
||||
internal_error text,
|
||||
status text,
|
||||
score double precision
|
||||
);
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,280 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
|
||||
<responseDate>2020-04-06T13:57:50Z</responseDate>
|
||||
<request verb="ListRecords" metadataPrefix="oai_dc" set="ec_fundedresources">https://dias.library.tuc.gr/oaiHandler
|
||||
</request>
|
||||
<ListRecords>
|
||||
<record>
|
||||
<header>
|
||||
<identifier>oai:dlib.tuc.gr:21811_oa</identifier>
|
||||
<datestamp>2012-10-10T00:00:00Z</datestamp>
|
||||
</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>
|
||||
<record>
|
||||
<header>
|
||||
<identifier>oai:dlib.tuc.gr:22973_oa</identifier>
|
||||
<datestamp>2012-10-10T00:00:00Z</datestamp>
|
||||
</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/conferenceObject</dc:type>
|
||||
<dc:title xml:lang="en">Motorway flow optimization in presence of vehicle automation and communication
|
||||
systems
|
||||
</dc:title>
|
||||
<dc:creator xml:lang="en">Roncoli Claudio()</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:description xml:lang="en">The research leading to these results has received funding from the European
|
||||
Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement
|
||||
n. 321132, project TRAMAN21.
|
||||
</dc:description>
|
||||
<dc:subject xml:lang="en">Motorway traffic control</dc:subject>
|
||||
<dc:subject xml:lang="en">Traffic flow optimisation</dc:subject>
|
||||
<dc:subject xml:lang="en">Quadratic programming</dc:subject>
|
||||
<dc:identifier>http://purl.tuc.gr/dl/dias/9BEA2A38-AFF2-49E1-B344-30E2C7BD34B5</dc:identifier>
|
||||
<dc:date>Published at: 2014-10-12</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: 2014</dc:date>
|
||||
<dc:description xml:lang="en">Summarization: This paper describes a novel approach for defining optimal
|
||||
strategies in motorway traffic flow control, considering that a portion of vehicles are equipped with
|
||||
vehicle automation and communication systems. An optimisation problem, formulated as a Quadratic Programming
|
||||
(QP) problem, is developed with the purpose of minimising traffic congestion. The proposed problem is based
|
||||
on a first-order macroscopic traffic flow model able to capture the lane changing and the capacity drop
|
||||
phenomena. An application example demonstrates the achievable improvements in terms of the Total Time Spent
|
||||
if the vehicles travelling on the motorway are influenced by the control actions computed as a solution of
|
||||
the optimisation problem.
|
||||
</dc:description>
|
||||
<dc:description xml:lang="el">Παρουσιάστηκε στο: International Conference on Engineering and Applied Sciences
|
||||
Optimization
|
||||
</dc:description>
|
||||
<dc:publisher xml:lang="en">National Technical University of Athens</dc:publisher>
|
||||
<dc:identifier xml:lang="el">Βιβλιογραφική αναφορά: C. Roncoli, M. Papageorgiou, I. Papamichail, "Motorway
|
||||
flow optimization in presence of vehicle automation and communication systems," in Proceedings of the 1st
|
||||
International Conference on Engineering and Applied Science Optimization (OPT-i), 2014, pp. 519-529.
|
||||
</dc:identifier>
|
||||
<dc:type>full paper</dc:type>
|
||||
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/246686</dc:relation>
|
||||
</oai_dc:dc>
|
||||
</metadata>
|
||||
</record>
|
||||
<record>
|
||||
<header>
|
||||
<identifier>oai:dlib.tuc.gr:22969_oa</identifier>
|
||||
<datestamp>2012-10-10T00:00:00Z</datestamp>
|
||||
</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/conferenceObject</dc:type>
|
||||
<dc:title xml:lang="en">On microscopic modelling of adaptive cruise control systems</dc:title>
|
||||
<dc:creator xml:lang="el">Ντουσακης Ιωαννης-Αντωνιος(http://users.isc.tuc.gr/~intousakis1)</dc:creator>
|
||||
<dc:creator xml:lang="en">Ntousakis Ioannis-Antonios(http://users.isc.tuc.gr/~intousakis1)</dc:creator>
|
||||
<dc:creator xml:lang="el">Νικολος Ιωαννης(http://users.isc.tuc.gr/~inikolos)</dc:creator>
|
||||
<dc:creator xml:lang="en">Nikolos Ioannis(http://users.isc.tuc.gr/~inikolos)</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:description xml:lang="en">The research leading to these results has received funding from the European
|
||||
Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement
|
||||
n. 321132, project TRAMAN21.
|
||||
</dc:description>
|
||||
<dc:subject xml:lang="en">Adaptive cruise control</dc:subject>
|
||||
<dc:subject xml:lang="en">Traffic flow modelling</dc:subject>
|
||||
<dc:subject xml:lang="en">Microscopic simulation</dc:subject>
|
||||
<dc:identifier>http://purl.tuc.gr/dl/dias/F89B7182-6D1F-4179-A6D8-A875F09FD053</dc:identifier>
|
||||
<dc:date>Published at: 2014-10-12</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: 2014</dc:date>
|
||||
<dc:description xml:lang="en">Summarization: The Adaptive Cruise Control (ACC) system, is one of the emerging
|
||||
vehicle technologies that has already been deployed in the market. Although it was designed mainly to
|
||||
enhance driver comfort and passengers’ safety, it also affects the dynamics of traffic flow. For this
|
||||
reason, a strong research interest in the field of modelling and simulation of ACC-equipped vehicles has
|
||||
been increasingly observed in the last years. In this work, previous modelling efforts reported in the
|
||||
literature are reviewed, and some critical aspects to be considered when designing or simulating such
|
||||
systems are discussed. Moreover, the integration of ACC-equipped vehicle simulation in the commercial
|
||||
traffic simulator Aimsun is described; this is subsequently used to run simulations for different
|
||||
penetration rates of ACC-equipped vehicles, different desired time-gap settings and different networks, to
|
||||
assess their impact on traffic flow characteristics.
|
||||
</dc:description>
|
||||
<dc:description xml:lang="el">Παρουσιάστηκε στο: International Symposium of Transport Simulation 2014
|
||||
</dc:description>
|
||||
<dc:publisher xml:lang="en">Elsevier</dc:publisher>
|
||||
<dc:identifier xml:lang="en">Bibliographic citation: I.A. Ntousakis, I.K. Nikolos, M. Papageorgiou, "On
|
||||
Microscopic Modelling Of Adaptive Cruise Control Systems," in Proceedings of the 4th International Symposium
|
||||
of Transport Simulation (ISTS), 2014.
|
||||
</dc:identifier>
|
||||
<dc:type>full paper</dc:type>
|
||||
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/246686</dc:relation>
|
||||
</oai_dc:dc>
|
||||
</metadata>
|
||||
</record>
|
||||
<record>
|
||||
<header>
|
||||
<identifier>oai:dlib.tuc.gr:22968_oa</identifier>
|
||||
<datestamp>2012-10-10T00:00:00Z</datestamp>
|
||||
</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/conferenceObject</dc:type>
|
||||
<dc:title xml:lang="en">Stability investigation for simple PI-controlled traffic systems</dc:title>
|
||||
<dc:creator xml:lang="en">Karafyllis Iason()</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:description xml:lang="en">The research leading to these results has received funding from the European
|
||||
Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement
|
||||
n. 321132, project TRAMAN21.
|
||||
</dc:description>
|
||||
<dc:subject xml:lang="en">Systems, Nonlinear,nonlinear systems,systems nonlinear</dc:subject>
|
||||
<dc:subject xml:lang="en">DES (System analysis),Discrete event systems,Sampled-data systems,discrete time
|
||||
systems,des system analysis,discrete event systems,sampled data systems
|
||||
</dc:subject>
|
||||
<dc:subject xml:lang="en">PI-regulator</dc:subject>
|
||||
<dc:identifier>http://purl.tuc.gr/dl/dias/A5DB2E56-C2C1-4AF6-A769-6BE271182E1C</dc:identifier>
|
||||
<dc:identifier>978-1-4799-2889-7 10.1109/ISCCSP.2014.6877846</dc:identifier>
|
||||
<dc:date>Published at: 2014-10-13</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: 2014</dc:date>
|
||||
<dc:description xml:lang="en">Summarization: This paper provides sufficient conditions for the Input-to-State
|
||||
Stability property of simple uncertain vehicular-traffic network models under the effect of a PI-regulator.
|
||||
Local stability properties for vehicular-traffic networks under the effect of PI-regulator control are
|
||||
studied as well: the region of attraction of a locally exponentially stable equilibrium point is estimated
|
||||
by means of Lyapunov functions.
|
||||
</dc:description>
|
||||
<dc:description xml:lang="el">Παρουσιάστηκε στο: 6th International Symposium on Communications, Controls, and
|
||||
Signal Processing
|
||||
</dc:description>
|
||||
<dc:publisher xml:lang="en">Institute of Electrical and Electronics Engineers</dc:publisher>
|
||||
<dc:identifier xml:lang="en">Bibliographic citation: I. Karafyllis, M. Papageorgiou, "Stability investigation
|
||||
for simple PI-controlled traffic systems," in Proceedings of 6th International Symposium on Communications,
|
||||
Controls, and Signal Processing, 2014, pp. 186-189.
|
||||
</dc:identifier>
|
||||
<dc:type>full paper</dc:type>
|
||||
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/246686</dc:relation>
|
||||
</oai_dc:dc>
|
||||
</metadata>
|
||||
</record>
|
||||
<record>
|
||||
<header>
|
||||
<identifier>oai:dlib.tuc.gr:24473_oa</identifier>
|
||||
<datestamp>2012-10-10T00:00:00Z</datestamp>
|
||||
</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">Microsimulation analysis of practical aspects of traffic control with variable speed
|
||||
limits
|
||||
</dc:title>
|
||||
<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:creator xml:lang="en">Muller Eduardo Rauh()</dc:creator>
|
||||
<dc:creator xml:lang="en">Carlson Rodrigo Castelan()</dc:creator>
|
||||
<dc:creator xml:lang="en">Kraus Werner()</dc:creator>
|
||||
<dc:description xml:lang="en">The research leading to these results has received funding from the European
|
||||
Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement
|
||||
n. 321132, project TRAMAN21. The paper has been published by IEEE
|
||||
(http://ieeexplore.ieee.org/Xplore/defdeny.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fstamp%2Fstamp.jsp%3Ftp%3D%26arnumber%3D7006741&denyReason=-134&arnumber=7006741&productsMatched=null)
|
||||
and is IEEE copyrighted.
|
||||
</dc:description>
|
||||
<dc:subject xml:lang="en">Traffic volume,traffic flow,traffic volume</dc:subject>
|
||||
<dc:subject xml:lang="en">Mainstream Traffic Flow Control</dc:subject>
|
||||
<dc:subject xml:lang="en">Variable Speed Limits</dc:subject>
|
||||
<dc:subject xml:lang="en">Freeway traffic control</dc:subject>
|
||||
<dc:identifier>http://purl.tuc.gr/dl/dias/1968E8C7-94C6-4EB3-A513-C686F3F12B79</dc:identifier>
|
||||
<dc:identifier>10.1109/TITS.2014.2374167</dc:identifier>
|
||||
<dc:date>Published at: 2015-03-26</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: 2015</dc:date>
|
||||
<dc:description xml:lang="en">Summarization: Mainstream traffic flow control (MTFC) with variable speed limits
|
||||
(VSLs) is a freeway traffic control method that aims to maximize throughput by regulating the mainstream
|
||||
flow upstream from a bottleneck. Previous studies in a macroscopic simulator have shown optimal and feedback
|
||||
MTFC potential to improve traffic conditions. In this paper, local feedback MTFC is applied in microscopic
|
||||
simulation for an on-ramp merge bottleneck. Traffic behavior reveals important aspects that had not been
|
||||
previously captured in macroscopic simulation. Mainly, the more realistic VSL application at specific points
|
||||
instead of along an entire freeway section produces a slower traffic response to speed limit changes. In
|
||||
addition, the nonlinear capacity flow/speed limit relation observed in the microscopic model is more
|
||||
pronounced than what was observed at the macroscopic level. After appropriate modifications in the control
|
||||
law, significant improvements in traffic conditions are obtained.
|
||||
</dc:description>
|
||||
<dc:publisher xml:lang="en">Institute of Electrical and Electronics Engineers</dc:publisher>
|
||||
<dc:description xml:lang="en">Presented on: IEEE Transactions on Intelligent Transportation Systems
|
||||
</dc:description>
|
||||
<dc:type>peer-reviewed</dc:type>
|
||||
<dc:identifier xml:lang="en">Bibliographic citation: E.R. Müller, R.C. Carlson, W. Kraus Jr, M. Papageorgiou,
|
||||
"Microsimulation analysis of practical aspects of traffic control with variable speed limits," IEEE
|
||||
Transactions on Intelligent Transportation Systems, vol. 16, no.1, pp. 512-523, 2015.
|
||||
</dc:identifier>
|
||||
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/246686</dc:relation>
|
||||
</oai_dc:dc>
|
||||
</metadata>
|
||||
</record>
|
||||
|
||||
<resumptionToken expirationDate="2020-04-07T16:59:31Z" completeListSize="14459" cursor="0">1586181471310:302
|
||||
</resumptionToken>
|
||||
</ListRecords>
|
||||
</OAI-PMH>
|
Loading…
Reference in New Issue